1

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

4

1 回答 1

5

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

我建议您从(或生成)这部分的需求规范开始,并用 C 重新实现代码(甚至仔细使用 C++ 子集)。如果您认为的“复杂性”仅仅是代码而不是需求,那么设计出来是个好主意——它只会使未来的维护更加复杂、容易出错和昂贵。

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

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

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

综上所述,将其视为“黑盒”并得出代码效率低下的结论是有点飞跃。例如,什么样的闪存看起来很慢?它如何与微控制器接口?你是如何衡量这种表现的?闪存本质上很慢——尤其是写入和页面擦除;在对软件性能做出任何结论之前,请检查 Flash 的性能规格。

于 2012-12-23T13:04:56.763 回答