50 我可以使用什么简单的方法来调试没有串口或视频的嵌入式处理器?

我们有一个小型嵌入式系统,没有任何视频或串行端口(即我们无法通过 printf 输出文本)。
我们希望通过初始化序列来跟踪代码的进度。
我们可以做一些简单的事情来帮助解决这个问题。
它没有运行任何操作系统,硬件平台在某种程度上是可定制的。

请先 登录 后评论

4 个回答

Benoit

您可以采用一些策略来帮助调试:

如果您有可用的输出引脚,您可以将它们连接到 LED(或示波器)并切换输出引脚高/低电平以指示代码中已到达某些点。
例如,1 次闪烁可能是程序加载,2 次闪烁是 foozbar 初始化,3 次闪烁是接受输入...

如果您有多个输出线可用,您可以使用 7 段 LED 来传达更多信息(数字/字母而不是闪烁)。

如果您有读取内存的能力并且有一些可用的 RAM,您可以使用 sprint 函数进行类似 printf 的调试,但不是转到屏幕/串行端口,而是写入内存中。

请先 登录 后评论
Andrew Edgecombe

这取决于您尝试执行的调试类型 - 特别是如果您采用临时跟踪方法,或者您尝试提供可用作在调试期间指示状态的工具时项目(或产品)的生命周期。

首先,深入的源代码跟踪和调试在线调试器(例如 jtag)会非常有帮助。但是,它们在您的调试需要设置断点以及调查内存和寄存器时最有帮助 - 这使得在您处理时间关键问题时几乎没有什么好处。

如果您需要确定程序状态而不会对系统的执行产生重大影响,那么使用连接到备用 I/O 引脚的 LED 会很有帮助。这些也可以用作数字存储示波器 (DSO) 或逻辑分析仪的输入。 通过选择可在 DSO 上识别的独特脉冲模式,可以使这项技术更加强大。

不过,对于更通用的调试工具,串行端口是一个很好的解决方案。为了节省成本和 PCB 空间,您可能会发现使用包含 RS232 转换器的插件模块很有用。

如果您想在产品的正常操作中提供更长期的状态指示,那么 LED 又是一种便宜且简单的方法。然而,在这种情况下,最好选择足够慢的脉冲模式,以便通过目视检查轻松识别。随着时间的推移,您将学习到代表“正常”行为的特定模式。

请先 登录 后评论
Eli Bendersky

您可以通过系统的 IO 引脚使用 bit-banging 轻松模拟串行通信 (UART)。将它挂在卡的一个针脚上并连接到那里的 RS232 转换器(TTL 到 RS232 转换器很容易购买或构建),然后连接到您 PC 的串行端口。

请先 登录 后评论
Purple Tentacle

使用位结合软件 UART 的想法很好,但编写一个需要一些努力,而且您需要一些免费的计时器和中断。如果您的硬件有任何其他未使用的串行接口(SPI、I2C、..),使用它们会更容易。使用小型微控制器,您可以将接口转换为 RS-232。

如果您必须使用 bit-banging,制作同步串行可能是一种更简单的选择,因为它对时序并不重要。

请先 登录 后评论