初级会员

- 积分
- 79
- 金钱
- 79
- 注册时间
- 2015-11-18
- 在线时间
- 9 小时
|
5金钱
本帖最后由 zuozhongkai 于 2016-3-26 12:09 编辑
[mw_shl_code=applescript,true]最近在看一个RTOS的相关程序,看它是这样建立任务的:
static void vdOSTaskListCreate(void)
{
OS_CreateTask(Task_Can,STK_TASK_CAN_SIZE,PRIO_TASK_CAN);
OS_CreateTask(Task_Misc,STK_TASK_MISC_SIZE,PRIO_TASK_MISC);
#ifdef USE_UART
OS_CreateTask(Task_Uart,STK_TASK_UART_SIZE,PRIO_TASK_UART);
#endif
OS_CreateTask(Task_Idle,STK_TASK_IDLE_SIZE,PRIO_TASK_IDLE);
}
但是在每个任务里面(如下的任务)都要用这句来启动定时OS_TaskStartTimer(PRIO_TASK_CAN, 0, 5);//Start 10ms Timer触发多久才进一次任务Task_Can()。我的意思是RTOS是时间片运行任务的话,不是上面创建了任务后,它就按时间片来运行每个任务嘛?没有必再用这一句OS_TaskStartTimer(PRIO_TASK_CAN, 0, 5);//Start 10ms Timer来启动定时器来触发Task_Can()任务了。
void Task_Can(void)
{
MSG msg;
CanDrv_CanPowerOnInit();
IL_IlInitPowerOn();
Misc_vdKeyStatusInit();
//Uds_PowerOnInit();
#if RN5387 == CAN_TEST_MODULE
OS_TaskStartTimer(PRIO_TASK_CAN, 0, 1);//Start 2ms Timer
#else
OS_TaskStartTimer(PRIO_TASK_CAN, 0, 5);//Start 10ms Timer
#endif
while(1)
{
//DispMode = DISPMODE_MUTE;
DispMode = DISPMODE_RADIO;
if(OS_TaskGetMsg(PRIO_TASK_CAN, &msg))
{
// OS_TaskClearMsg(PRIO_TASK_CAN);
switch(msg.evt)
}
}[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
但是没有OS_TaskStartTimer()创建一个定时器,我的任务只执行一次而以( 就是OS_CreateTask(Task_Can,STK_TASK_CAN_SIZE,PRIO_TASK_CAN);创建这个任务后,会进一次这个任务函数 Task_Can(void))。我试过把任务里面的OS_TaskStartTimer()创建定时器去掉了,我的任务只执行一次不会再进来了(我的任务里面是一个死循环的,就是while(1){},这个循环不会再进来了)。
|