原来学uCos只是表面,今天才发现uCos没有心跳也是可以活的,只是延时功能。 即:OSTimeDly、OSTimexxx 头的功能不能使用。
如果有是用OSTimexxx,任务将会卡死。其实,OSTimeDly 功能就是延时指定时间再唤醒任务。延时过程中任务是挂起状态,时间
到后,等待高任务运行完后在运行。下面测试不开cpu硬件定时器情况下的程序:
//Task0由 MainTask建立,优先级为2
void Task0 (void *pArg)
{
pArg = pArg;
while(1)
{
GPIOB->ODR &= ~GPIO_Pin_14;
OSTaskSuspend(2); //Task0挂起
}
}
//Task0由 Main()建立,优先级为3
void MainTask (void *pArg)
{
pArg = pArg;
//OS_CPU_SysTickInit();
OSSetupTask(Task0, 2);
while(1)
{
GPIOB->ODR &= ~GPIO_Pin_14;
OSTaskResume(2); //唤醒Task0
}
}
用户程序一共两个任务,Task0 优先于MainTask,Task0运行完后挂起让出CPU,MainTask接运行,
完后唤醒Task0,Task0运行完后挂起让出CPU,如此循环调度。
这说明在没有硬件定时器支持情况下,且不用OSTime功能,uCos也是能运行的。