这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » RTOS是NUCLEUS, 这是一个app的Task的问题,虚心请教.

共2条 1/1 1 跳转至

RTOS是NUCLEUS, 这是一个app的Task的问题,虚心请教.

菜鸟
2006-02-20 22:07:28     打赏

这是一个app的task的代码,其RTOS 是NUCLEUS.

void App_Task(void)
{
UNSIGNED rcv_msg[5],size;

/* disable key event */
KEY_EventEnable( FALSE);
/* Create rx data Q */
App_CreateQ();
m_bEvHandlerEnable = 1;
ApiLink_Init(0);
BasicApi_Init(0);
Trace_Init();
Debug_Init();

Peanut_Init(0);
EvHandler_FlushEvent(0);

SysDev_SetSysInitLevel(SYSINIT_LEVEL_1);
EvHandler_Process();
/* enable key event */
KEY_EventEnable( TRUE );

if(App_RunEx(0, 100, TRUE) == 0)
return;

EvHandler_Process();

while (TRUE)
{
if( NU_Receive_From_Queue(&App_RxDataQ, rcv_msg, 5 , &size, NU_SUSPEND)== NU_SUCCESS )
{

switch (rcv_msg[0])
{

case SYNC_App_TASK:
if( (rcv_msg[1] == 1) && \
(rcv_msg[2]>= NETNOTI_PDP_OPEN) && (rcv_msg[2] < NET_NOTI_NUM) )
{
Network_PostNotiEvent(rcv_msg[2], rcv_msg[3], rcv_msg[4]);
break;
}
EvHandler_PostEvent( (T_HANDLE)rcv_msg[1], (T_EVENT)rcv_msg[2], (T_PARAM)rcv_msg[3], (T_PARAM)rcv_msg[4]);

if( rcv_msg[2] == DEV_FLIP_CHANGE_E)
{
if( rcv_msg[3] == DEV_FLIP_OPEN)
{
SYS_ProcMsmDeepSleep();
}
}
else if( rcv_msg[2] == DEV_KEY_KEYDOWN_E)
{
SYS_ProcMsmDeepSleep();
}

EvHandler_Process();
break;

case SYNC_APPTIMER_TASK:
__is_timer_pend = 0;
TimerCore_Process();
break;

case SYNC_SNDMIDI:
if(rcv_msg[3])
{
SysHeap_Free((char*)rcv_msg[3]);
}
break;

default:

break;

}
PalDisp_RefreshAll();
}//End if
}//END while(TRUE)
}

---------------------------------------------------------

问题是,在这个TASK的代码中,RTOS每次执行的入点是哪里?是从函数头重新开始执行吗?

void App_Task(void)
{
UNSIGNED rcv_msg[5],size;

还是从对NU_Receive_From_Queue 的判断开始执行.

因为有10几个TASK,RTOS在进行scheduler . 要中断这个TASK必须从while(TRUE)的入点,即:NU_Receive_From_Queue的判断处. 但是当这个TASK重新获得资源时,是从哪里开始执行呢?

谢谢.期待你的指教.




关键词: NUCLEUS     这是     一个     问题     虚心     请教    

菜鸟
2006-02-21 04:00:00     打赏
2楼
你的task程序App_Task在任务创建时带参数NU_START,第一次运行在NU_Receive_From_Queue 处阻塞,以后每次在NU_Receive_From_Queue处获取资源后运行后面的程序,直到再次到NU_Receive_From_Queue处。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]