嵌入式技术william hill官网
直播中

发生的方式

8年用户 1223经验值
擅长:处理器/DSP
私信 关注
[问答]

软件定时器进不了回调函数请问这种可能是什么原因导致?

各位专家,请教一下,

我的依据RT-thread nano的任务,以前定时器都很正常,随着代码不停的增加,发现有个定时器启动后,进不了回调函数了,也不是始终不行,运行一段时间后不行了。

由于找不到原因,定时器优先级,堆栈改大,SOFT TIMER改成了HARD TIMER,这个定时器正常了,悲剧的是发现又有一个周期定时器,进不了回调函数了,重启程序就会好一会儿,

请问,这种可能是什么原因导致?

我用的都是静态函数,RAM足够大,RT-Thread对于定时器的数量有没有限制,感觉以前定时器少的时候没毛病,定时器多了产生的问题

回帖(5)

李华

2022-10-21 10:33:07
在定时器回调函数中不要执行耗时操作,特别不能延时,定时器回调函数默认优先级是4很高了。软件定时器也不要放耗时操作。

有耗时操作需求的,可以自己创建一个线程,基于邮箱,消息队列或,事件标志组来实现。
或者使用rtt官方的workqueue
举报

发生的方式

2022-10-21 10:33:18
定时器回调函数中,能不能使用互斥量?比如等待串口发送数据;我的代码中,确实有个定时器回调函数中用了延时函数,我改改看
举报

李华

2022-10-21 10:33:29
可以,但强烈不推荐
硬件定时器是在中断中执行,软件定时器优先级是4,你要想想你的定时器的回调函数是否需要这么高的优先级。
当然你也可以把软件定时器优先级改的低点
你要把很多操作放到定时器来做,就失去rtos的意义了
举报

发生的方式

2022-10-21 10:33:39
谢谢您,就是函数延时的问题,照您的指导,超时函数就发送两个标志,在thread中延时、循环,目前一切正常了,感谢!!!
举报

李华

2022-10-21 10:33:48
发送标志推荐信号量或者事件集,不要循环判断很浪费性能。
另一方面使用标志位还需要考虑标志位的互斥,推荐用操作系统提供的任务同步方式
举报

更多回帖

发帖
×
20
完善资料,
赚取积分