- 1
- 2
- 3
- 4
- 5
固件定时器回调里做重活是个坑.docx
资料介绍
固件定时器回调里做重活是个坑
先说个反例
很多嵌入式工程师写定时器中断回调,习惯性在里面干重活——长时间的计算、字符串拼接、调用耗时的函数、甚至发数据。觉得反正定时到了就执行,放哪都一样。结果程序跑起来就出各种怪问题:任务卡顿、数据丢、行为错乱。原因就是定时器回调里干重活,把系统的时序给搞乱了。
定时器中断回调有它的"规矩",它应该短、快、干净。在里面干重活,轻则影响其他中断,重则导致系统崩溃或者死锁。
为什么回调里不能干重活
定时器中断一旦触发,CPU 要停下来当前做的事,先执行回调。如果回调很长、很耗时,那么在这段时间里,其他更高优先级或者同级的中断就被延迟了。表现就是:本该及时响应的数据接收、按键扫描、协议处理,都被这个"啰嗦"的回调给拖住了。
更麻烦的是,如果回调里调用了某个函数,而这个函数恰好需要等待另一个中断,就可能形成"中断嵌套等待"甚至死锁。嵌入式里很多"程序卡死"的悬案,最后查出来都是中断回调里干了重活导致的。
还有一层:如果回调里访问了共享资源(比如全局变量、缓冲区),而主循环或其他中断也在访问,就可能产生竞态条件,数据出错。
回调里常见的"重活"
一是耗时计算。比如浮点运算、复杂滤波、大量的数学处理,这些在中断回调里很耗时。
二是阻塞操作。比如往串口同步发数据、等待某个硬件就绪,这些一阻塞就卡住中断。
三是资源分配和字符串处理。动态内存分配、字符串拼接这类操作,在中断里既耗时又不安全(可能引起内存碎片或竞态)。
部分文件列表
| 文件名 | 大小 |
| 固件定时器回调里做重活是个坑.docx | 38K |
最新上传
-
yahuang001 打赏3.00元 3天前
-
yahuang001 打赏1.00元 3天前
-
zhongshaoxiong 打赏3.00元 3天前
-
他山之石可攻玉 打赏60.00元 3天前
用户:烟雨
-
江岚 打赏210.00元 3天前
用户:潇潇江南
-
江岚 打赏100.00元 3天前
-
21ic下载 打赏310.00元 3天前
用户:gsy幸运
-
21ic下载 打赏310.00元 3天前
用户:zhengdai
-
21ic下载 打赏310.00元 3天前
用户:江岚
-
21ic下载 打赏210.00元 3天前
用户:潇潇江南
-
21ic下载 打赏60.00元 3天前
用户:他山之石可攻玉
-
21ic下载 打赏60.00元 3天前
用户:烟雨
-
21ic下载 打赏60.00元 3天前
用户:w178191520
-
21ic下载 打赏60.00元 3天前
用户:w993263495
-
21ic下载 打赏110.00元 3天前
用户:xzxbybd
-
21ic下载 打赏60.00元 3天前
用户:zq_1943
-
21ic下载 打赏20.00元 3天前
用户:kk1957135547
-
21ic下载 打赏20.00元 3天前
用户:sun2152
-
21ic下载 打赏20.00元 3天前
用户:铁蛋锅
-
21ic下载 打赏20.00元 3天前
用户:xuzhen1
-
21ic下载 打赏20.00元 3天前
用户:w1966891335
-
21ic下载 打赏35.00元 3天前
用户:有理想666
-
21ic下载 打赏15.00元 3天前
用户:nuaanuaa111
-
21ic下载 打赏20.00元 3天前
用户:liqiang9090
-
21ic下载 打赏15.00元 3天前
用户:ningmengge
-
21ic下载 打赏10.00元 3天前
用户:mulanhk
-
21ic下载 打赏5.00元 3天前
用户:asys
-
21ic下载 打赏10.00元 3天前
用户:舞蹈荀彧
-
21ic小能手 打赏5.00元 3天前
资料:磁编码器开源方案
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏50.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏10.00元 3天前
-
21ic小能手 打赏10.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏3.00元 3天前




全部评论(0)