最近开始在lm3s上学习uCOS的任务管理,遇到些问题,得到些体会特来分享给大家!!
我开始将lm3s的3个pwm模块同时启用,将各pwm模块的配置操作放在3个独立的任务,我以其中我建的一个pwmout任务为例来说明
……
pwm的配置:PWMGenConfigure(PWM_BASE, PWM_GEN_0, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC
| PWM_GEN_MODE_GEN_NO_SYNC);
……
OSTaskCreate (pwmout1, (void *)0, &Gstkpwm1[TASK_PWM1_STK_SIZE-1], TASK_PWM1_PRIO);
……
static void pwmout0(void *parg)
{
(void)parg;
pwm0(500,500); /*更改pwm周期和脉宽*/
while(1);
}
一开始根本就意识不到这个问题,后来看很多资料加之N次调试才发现问题所在,优先级比它低的任务都不能执行,对可剥夺型的Ucos,只有优先级高于它的任务才能打断它,除此之外cpu一直被这个pwmout0任务所霸占。最后得出的总结:在创建任何任务时(除空闲任务),任务内容中必须包含能使该任务自动让出cpu控制权的代码(比如挂起、删除或改变优先级)。在所查阅的资料中都未强调这一点,只有如下这个框图,对我们菜鸟级的初读次图时未必能意识到这一点。