调试微处理器

Shm*_*opy 1 embedded debugging microcontroller jtag

我们的一个协处理器是一个8位微处理器.它的主要作用是控制处理闪存的硬件.我们怀疑它运行的代码非常低效,因为我们在读/写闪存时测量了低速.问题是,我们只有一个J-TAG端口连接到主CPU,因此调试它不是一个选项.我们所拥有的是一个可从CPU获得的寄存器,其中包含微处理器的程序计数器.坏消息是,微处理器的工作频率与CPU不同,因此监控外部的程序计数器也很困难.测量微处理器内部的时间也非常困难,因为它的寄存器只有8位长.不用说,代码是汇编而且非常复杂.你会如何解决这个问题?

Cli*_*ord 5

不用说,代码是汇编而且非常复杂.你会如何解决这个问题?

我建议你从这个部分的需求规范开始(或生成),并在C中重新实现代码(或者甚至小心使用C++子集).如果您认为的"复杂性"仅仅是代码而不是要求,那么将其设计出来也是一个好主意 - 它只会使未来的维护变得更加复杂,容易出错并且成本高昂.

使用汇编程序的常见理由之一是大小和性能,但更常见的是大量汇编程序代码远非最佳; 为了保持一定的生产力和可维护性,通常使用"锅炉板"代码并重用不适合特定情况的代码,而编译器将分析代码更改并执行系统设计人员的那种"微优化"真的不应该出汗.使您的算法和数据结构高效,并将目标指令集详细信息留给编译器.

即使没有直接调试目标的能力,使用高级语言也可以在PC上进行原型设计和仿真.

即使您保留汇编代码,如果您的开发工具包含指令集模拟器,那么这可能是硬件调试的一个很好的替代方案; 特别是如果它支持可用于模拟硬件设备行为的调试器脚本.

所有这一切,将其视为一个"黑盒子",并得出结论认为代码效率低下是一个小小的飞跃.例如,什么样的闪存看起来很慢?它是如何与微控制器连接的?你是如何衡量这种表现的?闪存本质上很慢 - 尤其是写入和页面擦除; 在得出有关软件性能的任何结论之前,请检查Flash的性能规格.