完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
各位烧友,请教一个问题,就是我在任务中调用uCOS的定时器实现周期延时的时候,定时器一被调用串口打印就被中断了,而且后面一直都不再打印了,搞得我调试的时候很不方便;但是如果我在Main函数中调用定时器,串口打印就不会被中断,是不是在任务中的时候发生了任务调度,但是定时器的优先级又很高,导致串口打印被中断了呢?
伪代码如下: main { 1、SetFanCtlSpdDly(500,3); //每隔3秒加一次风机速度,目标值500 //此处是通过创建uCOS软件定时器实现,此处打印函数不会中断 2、恢复风机延时调速任务 } 风机延时调速任务 { 一分钟后SetFanCtlSpdDly(900,3); //此处任务中调用定时器时会停止打印 } 注:打印函数是在另一个任务中一直打印速度值 求指教^_^ |
|
相关推荐
3个回答
|
|
打印的时候进去临界代码段,打印完成了再退出
最佳答案
|
|
|
|
如果SetFanCtlSpdDly就是你说的定时器的话,那么打印任务的优先级可能较低,同样被SetFanCtlSpdDly延迟了,那要看你的SetFanCtlSpdDly怎么写的了,可以考虑用信号量来延时并解决释放CPU资源的问题
|
|
|
|
andy_wsj 发表于 2016-9-29 11:54 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); } 具体代码是这样的,当速度达到我期望的速度时就会在回调函数里面删掉定时器。我是在想定时器的优先级这么高,除了系统节拍任务不会有任务比他高了,那怎么保证在开定时器的时候打印任务不被中断哟?我试过吧锁调度器代码屏蔽了也不行,你说的那种方法能说的详细点么?好不好封装成函数啊 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1812 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
952 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1340 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1801 浏览 1 评论
560 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 09:30 , Processed in 0.619789 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号