各位烧友,请教一个问题,就是我在任务中调用uCOS的定时器实现周期延时的时候,定时器一被调用串口打印就被中断了,而且后面一直都不再打印了,搞得我调试的时候很不方便;但是如果我在Main函数中调用定时器,串口打印就不会被中断,是不是在任务中的时候发生了任务调度,但是定时器的优先级又很高,导致串口打印被中断了呢?
伪代码如下:
main
{
1、SetFanCtlSpdDly(500,3); //每隔3秒加一次风机速度,目标值500
//此处是通过创建uCOS软件定时器实现,此处打印函数不会中断
2、恢复风机延时调速任务
}
风机延时调速任务
{
一分钟后SetFanCtlSpdDly(900,3);
//此处任务中调用定时器时会停止打印
}
注:打印函数是在另一个任务中一直打印速度值
求指教^_^
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void SetFanCtlSpdDly(uint16_t i_u16ExpectSpdValue,uint8_t i_u8DelayTime)
{
OS_ERR err;
g_u16FanExpectCtlSpd = i_u16ExpectSpdValue;
if(i_u8DelayTime > 0) {
OSTmrCreate((OS_TMR *)&FanSpdCycleDlyTimeAdjustTmr,
(CPU_CHAR *)"fan Speed Cycle Delay Time Adjust Timer",
(OS_TICK)0,
(OS_TICK)i_u8DelayTime * OS_CFG_TMR_TASK_RATE_HZ,
(OS_OPT)OS_OPT_TMR_PERIODIC,
(OS_TMR_CALLBACK_PTR)FanSpdAdjustDlyCallBack,
(void *)0,
(OS_ERR *)&err);
if(err == OS_ERR_NONE) {
OSTmrStart(&FanSpdCycleDlyTimeAdjustTmr, &err);
}
} else {
SetFanCtlSpd(i_u16ExpectSpdValue);
}
具体代码是这样的,当速度达到我期望的速度时就会在回调函数里面删掉定时器。我是在想定时器的优先级这么高,除了系统节拍任务不会有任务比他高了,那怎么保证在开定时器的时候打印任务不被中断哟?我试过吧锁调度器代码屏蔽了也不行,你说的那种方法能说的详细点么?好不好封装成函数啊
一周热门 更多>