什么是调试strong>
调试 Debug 输入—>输出 不符合设计逻辑
- 调试就是通过理解系统行为(运行),让系统实现其正确的功能的过程。
- 在调试时,我们试图根除导致系统出现未预期行为的根本原因。为了理解其根本原因,我们需要理解系统的运行情况。
- 我们需要理解系统在做什么—-不是我们认为系统应该做什么, 也不是另外什么人说系统在做什么—-而是系统实际上在做什么。
- 如果我们不理解系统,就不能指望改动系统让它完成我们想做的事情。而且,我们所做的任何改变系统行为的事情,都有破坏另外一些事情的危险;也可能因为改动而带来了更多的bug。
调试的一般过程
- 识别问题(加断点对timer计数的影响)
- 收集信息logging:(收集什么信息输出错误的直接输入信息,逐级tracing)
- 分析收集的数据,定位bug;
- 修改bug。
可控性 & 可观测性 :来自软件工程的概念,其中可观测性是软件、硬件调试的基石。
静态调试:
- 单步执行;设置断点;
- 观察变量;观察寄存器和存储器值;
- 修改变量、寄存器和存储器的值;
- 运行一段程序;
“必须掌握的基本技能”
动态调试:
- 实时记录、观察数据;
- RTDX 条件断点
论述”调试”的书籍:
- The Science of Debugging, MattTelles.程序调试思想与实践,中国水力水电出版 —bug 是系统逻辑的奴隶
- Debugging Application , JohnRobbins ,Microsoft Press ,2000 主要针对windows程序调试中文名: 应用程序调试技术
- 软件调试思想: Robert Charles Metzger
写 C6000 中断程序:
一般来讲,嵌入式系统是中断驱动的系统,另外还有数据流驱动的嵌入式系统(Windows:事件驱动)典型的结构:main函数中初始化->While循环等待中断到来,在中断处理程序中进行真正的数据处理中断之间的关系: -同步关系:中断的触发次数成比例
-异步关系:。。。
-因果关系:一个中断触发其他中断,可看作是同步 关系中的一种特例
基于以上关系的中断间的 数据共享模式:
-乒乓模式:采数中断+处理中断, 同步中断关系
-圆周buffer:串口中断+处理中断,异步中断关系
-共享memory:传数中断+DMA结束中断,因果关系
调试经验:
- 可中断程序的编写:应用条件—-核循环的并行指令数不小于6 (SPRA534 Writing Interruptible Looped Code ForThe TMS320C6x)
- 调试中数据的存储和显示:1. 系统级调试中的重要性 2. CCS的显示工具 3. Matlab
- 定点DSP实现浮点运算的考虑
- 对感兴趣的事件做记录:随时关心程序运行时间:注意数组的越界和指针的使用:中断向量表被修改,程序就会跑飞
- 关于全局变量和局部变量:万事皆有原因“快”与“慢”,“大”与“小”.
- 选择高级的优化不会造成程序错误,如果有错误,是自己程序的问题。(例:最初接dqy的 DSP板 程序,局部变量->全局变量,堆栈)
- 设计小实验进行某些验证:语法,设想。例子:PM数据改变,怀疑硬件问题,结果设计DMA改写PM,不排除软件的bug;培养工程动手能力,想一想->试一试,
- far型数据:truncated错误
- CCS不支持中文目录
- 节拍节拍节拍:处理帧、时间粒度
- 改变某部分后出了问题,就是改的部分有 bug.
- 中断处理的超时错误计数器在停止(halt命令)后加1--JTAG对实时时序的影响
- Restart —> gomain 跑飞和reload—>gomain跑飞的原因:(1)GIE为1和IER的某些位为1(2)发生了某些中断或IFR某些位为1(3)中断向量表未初始化。要运行run time load 后才初始化。发生中断后,读取中断向量表的值是乱数。(联系那个 设置大数组的 调试例子)

自己开发的硬件平台,在交付软件开发工程师之前,应该做测试。以便于硬件bug和软件bug的定位。
主要的测试内容:
- 数据IO
- 数据处理
测试方法:
(1)时间足够长,1hour以上
(2)数据IO:DMA,CPU核和各个外设通讯
(3)数据处理:FFT,充分使用各个运算单元
TI DSP软件开发学习:
- 硬件知识
要客观世界可“控制”,可“利用”,你需要先深刻地理解客观世界的运行规律。然后,在种种规律(也可理解为“限制”)的前提下实现你的想法。
———————————————————————————————————————————————
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!