📄 net_os.c
字号:
* Argument(s) : timeout_ms Timeout value (in milliseconds).
*
* perr Pointer to variable that will receive the return error code from this function :
*
* NET_ERR_NONE Network transmit suspend timeout successfully set.
*
* --- RETURNED BY NetOS_TimeoutCalc_OS_tick() : ----
* NET_OS_ERR_INVALID_TIME Invalid time value.
*
* Return(s) : none.
*
* Caller(s) : NetOS_Init(),
* Application.
*
* This function is a network protocol suite application interface (API) function & MAY be
* called by application function(s).
*
* Note(s) : none.
*********************************************************************************************************
*/
#if (NET_CFG_LOAD_BAL_EN == DEF_ENABLED)
void NetOS_TxSuspendTimeoutSet (CPU_INT32U timeout_ms,
NET_ERR *perr)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
INT16U os_tick;
os_tick = NetOS_TimeoutCalc_OS_tick(timeout_ms, perr); /* Calculate timeout value (in OS ticks). */
if (*perr != NET_OS_ERR_NONE) {
return;
}
CPU_CRITICAL_ENTER();
/* Set network transmit suspend timeout value ... */
NetOS_TxSuspendTimeout_tick = os_tick; /* ... (in OS ticks). */
CPU_CRITICAL_EXIT();
*perr = NET_ERR_NONE;
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* NetOS_TxSuspendTimeoutGet_ms()
*
* Description : Get network transmit suspend timeout value.
*
* Argument(s) : perr Pointer to variable that will receive the return error code from this function :
*
* NET_ERR_NONE Network transmit suspend timeout
* successfully returned.
*
* Return(s) : Network transmit suspend timeout value (in milliseconds).
*
* Caller(s) : Application.
*
* This function is a network protocol suite application interface (API) function & MAY be
* called by application function(s).
*
* Note(s) : none.
*********************************************************************************************************
*/
#if (NET_CFG_LOAD_BAL_EN == DEF_ENABLED)
CPU_INT32U NetOS_TxSuspendTimeoutGet_ms (NET_ERR *perr)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
CPU_SR cpu_sr;
#endif
INT16U os_tick;
CPU_INT16U timeout_ms;
CPU_CRITICAL_ENTER();
/* Get network transmit suspend timeout value ... */
os_tick = NetOS_TxSuspendTimeout_tick; /* ... (in OS ticks). */
CPU_CRITICAL_EXIT();
timeout_ms = (CPU_INT16U)NetOS_TimeoutCalc_ms(os_tick); /* Calculate timeout value (in milliseconds). */
*perr = NET_ERR_NONE;
return (timeout_ms);
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*********************************************************************************************************
* NETWORK TIMER MANAGEMENT FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NetOS_Tmr_Init()
*
* Description : (1) Perform Timer/OS initialization :
*
* (a) Create network timer task
*
*
* Argument(s) : perr Pointer to variable that will receive the return error code from this function :
*
* NET_OS_ERR_NONE Network timer/OS initialization successful.
* NET_OS_ERR_INIT_TMR_TASK Network timer task NOT successfully
* initialized.
* NET_OS_ERR_INIT_TMR_TASK_NAME Network timer task name NOT successfully
* configured.
*
* Return(s) : none.
*
* Caller(s) : NetTmr_Init().
*
* This function is an INTERNAL network protocol suite function & MUST NOT be called by
* application function(s).
*
* Note(s) : none.
*********************************************************************************************************
*/
/*$PAGE*/
void NetOS_Tmr_Init (NET_ERR *perr)
{
INT8U os_err;
/* Create NetOS_Tmr_Task() [see Note #1a]. */
#if (OS_TASK_CREATE_EXT_EN == 1)
#if (OS_STK_GROWTH == 1)
os_err = OSTaskCreateExt((void (*)(void *)) NetOS_Tmr_Task,
(void * ) 0,
(OS_STK * )&NetOS_Tmr_TaskStk[NET_OS_CFG_TMR_TASK_STK_SIZE - 1],
(INT8U ) NET_OS_CFG_TMR_TASK_PRIO,
(INT16U ) NET_OS_CFG_TMR_TASK_PRIO, /* Set task id same as task prio. */
(OS_STK * )&NetOS_Tmr_TaskStk[0],
(INT32U ) NET_OS_CFG_TMR_TASK_STK_SIZE,
(void * ) 0,
(INT16U )(OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK));
#else
os_err = OSTaskCreateExt((void (*)(void *)) NetOS_Tmr_Task,
(void * ) 0,
(OS_STK * )&NetOS_Tmr_TaskStk[0],
(INT8U ) NET_OS_CFG_TMR_TASK_PRIO,
(INT16U ) NET_OS_CFG_TMR_TASK_PRIO, /* Set task id same as task prio. */
(OS_STK * )&NetOS_Tmr_TaskStk[NET_OS_CFG_TMR_TASK_STK_SIZE - 1],
(INT32U ) NET_OS_CFG_TMR_TASK_STK_SIZE,
(void * ) 0,
(INT16U )(OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK));
#endif
#else
#if (OS_STK_GROWTH == 1)
os_err = OSTaskCreate((void (*)(void *)) NetOS_Tmr_Task,
(void * ) 0,
(OS_STK * )&NetOS_Tmr_TaskStk[NET_OS_CFG_TMR_TASK_STK_SIZE - 1],
(INT8U ) NET_OS_CFG_TMR_TASK_PRIO);
#else
os_err = OSTaskCreate((void (*)(void *)) NetOS_Tmr_Task,
(void * ) 0,
(OS_STK * )&NetOS_Tmr_TaskStk[0],
(INT8U ) NET_OS_CFG_TMR_TASK_PRIO);
#endif
#endif
if (os_err != OS_ERR_NONE) {
*perr = NET_OS_ERR_INIT_TMR_TASK;
return;
}
#if (OS_TASK_NAME_SIZE >= NET_TASK_NAME_SIZE_MAX)
OSTaskNameSet((INT8U ) NET_OS_CFG_TMR_TASK_PRIO,
(INT8U *) NET_TMR_TASK_NAME,
(INT8U *)&os_err);
if (os_err != OS_ERR_NONE) {
*perr = NET_OS_ERR_INIT_TMR_TASK_NAME;
return;
}
#endif
*perr = NET_OS_ERR_NONE;
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetOS_Tmr_Task()
*
* Description : OS-dependent shell task to schedule & run Timer Task Handler.
*
* (1) Shell task's primary purpose is to schedule & run NetTmr_TaskHandler(); shell task
* should run NetTmr_TaskHandler() at NET_TMR_CFG_TASK_FREQ rate forever (i.e. shell
* task should NEVER exit).
*
*
* Argument(s) : p_data Pointer to task initialization data (required by uC/OS-II).
*
* Return(s) : none.
*
* Created by : NetOS_Tmr_Init().
*
* Note(s) : (2) Assumes OS_TICKS_PER_SEC frequency is greater than NET_TMR_CFG_TASK_FREQ. Otherwise,
* timer task scheduling rate will NOT be correct.
*********************************************************************************************************
*/
static void NetOS_Tmr_Task (void *p_data)
{
INT16U dly;
(void)&p_data; /* Prevent compiler warning. */
dly = OS_TICKS_PER_SEC / NET_TMR_CFG_TASK_FREQ; /* Delay task at NET_TMR_CFG_TASK_FREQ rate. */
while (DEF_ON) {
OSTimeDly(dly);
NetTmr_TaskHandler();
}
}
/*$PAGE*/
/*
*********************************************************************************************************
*********************************************************************************************************
* NETWORK INTERFACE CARD FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NetOS_NIC_Init()
*
* Description : (1) Perform NIC/OS initialization :
*
* (a) Implement NIC transmit ready signal by creating a binary semaphore.
*
* Initialize transmit ready signal based on configuration :
*
* (1) NET_NIC_CFG_TX_RDY_INIT_VAL configured to initialize the NIC-transmit-ready
* OS object with one of the following values :
*
* (A) 0, for NIC driver's that implement the NIC's transmit-ready status using
* the Transmit Empty interrupt.
*
* (B) 1, for NIC driver's that implement the NIC's transmit-ready status using
* the Transmit Complete interrupt.
*
* See also 'net_cfg NETWORK INTERFACE CARD CONFIGURATION Note #2'.
*
*
* Argument(s) : perr Pointer to variable that will receive the return error code from this function :
*
* NET_OS_ERR_NONE NIC/OS initialization successful.
* NET_OS_ERR_INIT_NIC_TX_RDY NIC transmit ready signal NOT successfully
* initialized.
* NET_OS_ERR_INIT_NIC_TX_RDY_NAME NIC transmit ready name NOT successfully
* configured.
*
* Return(s) : none.
*
* Caller(s) : NetNIC_Init().
*
* This function is a network protocol suite to network interface controller (NIC) function &
* SHOULD be called only by appropriate network interface controller initialization function(s).
*
* Note(s) : none.
*********************************************************************************************************
*/
void NetOS_NIC_Init (NET_ERR *perr)
{
#if (OS_EVENT_NAME_SIZE >= NET_OBJ_NAME_SIZE_MAX)
INT8U os_err;
#endif
/* Create transmit ready signal (see Note #1a). */
NetOS_NIC_TxRdySignalPtr = OSSemCreate((INT16U)NET_NIC_CFG_TX_RDY_INIT_VAL);
if (NetOS_NIC_TxRdySignalPtr == (OS_EVENT *)0) {
*perr = NET_OS_ERR_INIT_NIC_TX_RDY;
return;
}
#if (OS_EVENT_NAME_SIZE >= NET_OBJ_NAME_SIZE_MAX)
OSEventNameSet((OS_EVENT *) NetOS_NIC_TxRdySignalPtr,
(INT8U *) NET_NIC_TX_RDY_NAME,
(INT8U *)&os_err);
if (os_err != OS_ERR_NONE) {
*perr = NET_OS_ERR_INIT_NIC_TX_RDY_NAME;
return;
}
#endif
*perr = NET_OS_ERR_NONE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -