初级会员

- 积分
- 79
- 金钱
- 79
- 注册时间
- 2015-11-18
- 在线时间
- 9 小时
|
最近在看一个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)
}
}
|
|