ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

嵌入式驱动开发:量产级工程化实战(第 5 篇)——资源受限下的日志系统设计

嵌入式驱动开发:量产级工程化实战(第 5 篇)——资源受限下的日志系统设计 一次“没有日志”的排查困境先讲一个反面的案例。某款便携式医疗设备,MCU 是 STM32L071,64KB Flash、20KB RAM,电池供电,要求待机电流低于 5μA。设备在客户现场偶尔会死机,概率很低,大概一个月一两次。客户重启之后就好了,但问题一直找不到根因。我拿到这个项目时,问的第一个问题是:“有没有日志?”回答是:“有,但是只能在调试串口上看。设备在现场,不可能接串口。”第二个问题:“那设备死机之后,重启时有没有保留什么信息?”回答是:“没有。我们试过写 Flash,但写一次要几十毫秒,而且会增加功耗,后来就去掉了。”这就是问题所在。一个在现场跑的设备,没有持久化日志,没有崩溃现场记录,出了问题只能靠猜。而日志系统本身,又因为“写 Flash 慢、功耗高”被砍掉了。这个困境很典型:资源受限的系统里,日志系统往往被视为“奢侈品”,被第一个砍掉。但真出了问题,又最需要它。这篇文章要解决的,就是这个问题。我会展示怎么设计一个在 64KB Flash、20KB RAM 的 MCU 上运行、不影响实时性、功耗可控、又能保留足够现场信息的日志系统。核心是三个技术:环形缓冲区 + DMA + 低优先级日志任务。再加上一个关键的补充:崩溃现场的最小化保存。一、日志系统的设计约束资源受限系统的三个硬约束在资源受限的 MCU 上设计日志系统,必须面对三个硬约束:
返回列表