调试微处理器

时间:2012-12-22 22:41:36

标签: debugging embedded microcontroller jtag

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

1 个答案:

答案 0 :(得分:5)

  

毋庸置疑,代码处于汇编状态且非常复杂。你会如何处理这个问题?

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

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

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

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

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