中断的应用--一个工程产品案例的剖析

1 一个工程产品案例的剖析

  • 背景:
    • 嵌入式实现系统对时序的要求比较严格
    • 各个线程的执行有相对严格的时间要求
  • 痛点:
    • 断点调试在嵌入式实时系统中不适用

2 常规解决方案

2.1 日志调试法

  • 在代码中的“关键位置”添加打印语句
  • 打印语句尽可能详细的打印上下文信息(函数名、局部变量等)
  • 当系统出现问题时,查看日志文件,分析问题

2.2 日志调试法存在的问题

  • 不易维护
    • 打印语句分散于产品代码的各个角落
  • 影响效率
    • 过多的打印语句意味着过多的IO操作,影响产品的整体执行效率
  • 分析困难
    • 当日志输出量非常多的时候,非常难精确定位问题
    • 也许只有添加打印语句的工程师能够看得懂日志输出

3 一个疯狂的想法

同时结合日志调试法和断点调试法的优点,使得实时系统调试时,能够任意查看指定代码行上下文的信息,并且,不增加打印语句,不暂停执行。

4 解决方案

  1. 获取原程序指定行对应的代码地址
  2. 把代码地址中的指令替换为中断触发指令
  3. 在中断服务程序中抓取全局信息和栈信息
  4. 抓取的信息发送回调试程序解析并输出

5 实践结果

  • 基于ARM+Linux平台完整实现
  • 通过中断原理成功获取上下文信息
  • 完全不影响程序执行时序
  • 产品关键技术点
    • 中断、ISR、编译信息、GDB
    • GUI、Socket、多线程

修改记录


时间动作
2017.6.5首次上传

参考资料


唐老师 — 狄泰软件学院 — 十二月提升计划

李云 — 《专业嵌入式软件开发 全面走向高质量编程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值