uCos串口打印被中断的问题
伪代码如下:
main
{
1、SetFanCtlSpdDly(500,3); //每隔3秒加一次风机速度,目标值500
//此处是通过创建uCOS软件定时器实现,此处打印函数不会中断
2、恢复风机延时调速任务
}
风机延时调速任务
{
一分钟后SetFanCtlSpdDly(900,3);
//此处任务中调用定时器时会停止打印
}
注:打印函数是在另一个任务中一直打印速度值
求指教^_^
打印的时候进去临界代码段,打印完成了再退出
如果SetFanCtlSpdDly就是你说的定时器的话,那么打印任务的优先级可能较低,同样被SetFanCtlSpdDly延迟了,那要看你的SetFanCtlSpdDly怎么写的了,可以考虑用信号量来延时并解决释放CPU资源的问题
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);
}
具体代码是这样的,当速度达到我期望的速度时就会在回调函数里面删掉定时器。我是在想定时器的优先级这么高,除了系统节拍任务不会有任务比他高了,那怎么保证在开定时器的时候打印任务不被中断哟?我试过吧锁调度器代码屏蔽了也不行,你说的那种方法能说的详细点么?好不好封装成函数啊