点击左上方蓝色“一口Linux”,选择“设为星标”
第一时间看干货文章
?【干货】嵌入式驱动工程师学习路线?【干货】Linux嵌入式知识点-思维导图-免费获取?【就业】一个可以写到简历的基于Linux物联网综合项目?【就业】找工作简历模版
lpss4cbvj2k64021949637.gif
1为什么很多人说嵌入式开发很难?
其实,嵌入式开发的难度相对来说不算大,只是嵌入式开发会遇到各种各样奇奇怪怪的问题,问题多了,很多人就觉得难。
如果把这些问题一个一个拆解开来看,其实都是小问题。今天就来说说嵌入式开发常见问题解决方法。
5ocickmm1em64021949737.jpg
一、问题复现稳定复现问题才能正确的对问题进行定位、解决以及验证。一般来说,越容易复现的问题越容易解决。1.1 模拟复现条件有的问题存在于特定的条件下,只需要模拟出现问题的条件即可复现。对于依赖外部输入的条件,如果条件比较复杂难以模拟可以考虑程序里预设直接进入对应状态。1.2 提高相关任务执行频率例如某个任务长时间运行才出现异常则可以提高该任务的执行频率。1.3 增大测试样本量程序长时间运行后出现异常,问题难以复现,可以搭建测试环境多套设备同时进行测试。二、问题定位缩小排查范围,确认引入问题的任务、函数、语句。2.1 打印LOG根据问题的现象,在抱有疑问的代码处增加LOG输出,以此来追踪程序执行流程以及关键变量的值,观察是否与预期相符。2.2 在线调试在线调试可以起到和打印LOG类似的作用,另外此方法特别适合排查程序崩溃类的BUG,当程序陷入异常中断(HardFault,看门狗中断等)的时候可以直接STOP查看call stack以及内核寄存器的值,快速定位问题点。2.3 版本回退使用版本管理工具时可以通过不断回退版本并测试验证来定位首次引入该问题的版本,之后可以围绕该版本增改的代码进行排查。2.4 二分注释二分注释即以类似二分查找法的方式注释掉部分代码,以此判断问题是否由注释掉的这部分代码引起。具体方法为将与问题不相干的部分代码注释掉一半,看问题是否解决,未解决则注释另一半,如果解决则继续将注释范围缩小一半,以此类推逐渐缩小问题的范围。2.5 保存内核寄存器快照Cortex M内核陷入异常中断时会将几个内核寄存器的值压入栈中,如下图: |