|
我之前也没有用过操作系统,刚刚接触uC,想请教诸位一个问题。 以下是我写的一段代码,核心思想是在一个任务运行过程中检查变量,如果发现超出阈值则挂起此任务, 唤醒另外一个任务。但是事实上每次都无法切换任务,仍然在执行原任务。可能是什么原因呢? while(1) { if(auto_speed <= 5) { Uart_SendString("Swtich WorkMode\n"); (1) err = OSTaskSuspend(OS_PRIO_SELF);//挂起当前任务--自动巡航 Uart_ShowInt(err); (2) Uart_SendByte('\t'); (3) err = OSTaskResume(StopModeTaskPrio);//手动驾驶任务解除挂起 Uart_ShowInt(err); Uart_SendByte('\n'); break; } OSTimeDly(OS_TICKS_PER_SEC/50);//频率为50Hz } 我总共有三个任务,StopModeTask、ManualModeTask、AutoModeTask,刚开始时都被挂起,先运行AutoModeTask,按键中断 可以改变速度,如果速度小到一定程度,就挂起当前的AutoModeTask任务,转而执行StopModeTask任务。 实际的运行结果是输出来了(1)处,但是(2)(3)处都没有输出,并且一直在原任务——AutoModeTask运行,根本没有切换。 请问这是什么原因呢?
|
|