嵌入式系统调试 - 我应该使用输出/日志文件吗?

时间:2015-03-05 17:16:08

标签: c debugging embedded

我对嵌入式系统很新,但不是编程。

我们在应用程序中管理不同数据结构的大型列表,我们填充从传入的字符数组解析的数据。对于调试,查看每个结构的手表似乎并不实用,我已经考虑构建将结构中包含的数据打印到文件的功能,因此我可以轻松地比较预期与结果。这是你在嵌入式系统中会做的事吗?我还有其他选择吗?

避免增加代码大小,仅包括调试版本。该系统是stm32F2xx和IDE keil uVision。

谢谢!

3 个答案:

答案 0 :(得分:1)

在将其与嵌入式应用程序集成之前,在测试框架中在PC上开发,调试和单元测试纯数据处理代码通常更简单;只留下调试I / O驱动程序,调度和实时处理目标的任务。

帮助STM32数据类型大小和字节顺序与32位x86编译器相同,因此数据处理代码可移植性通常没有问题。但是,您可能会对浮点数据持谨慎态度,其中ARM编译器软件浮点上的结果可能与x86硬件浮点不完全相同。

当然,如果您打算将实际结果与预期结果进行比较,而不是建议使用单元测试框架。您还可以从更高的数据吞吐量中受益,因此您可以在目标上执行更多的测试。然后,您可能只需要对目标进行最低限度的测试,以验证结果是否与单元测试行为相当。 32位

答案 1 :(得分:1)

我很少使用工具链的调试器来完成我的嵌入式工作,除非我遇到一个非常困难的问题或者提出一个电路板。相反,我通常对设备的一个串行端口进行“printf调试”,并在主机PC上的串行终端程序(例如putty)中查看输出。

这允许我使用优化进行编译并删除生成的非必要信息的二进制文件,并仍然监视程序的执行和内存。我在我的工具库中有一些实用程序函数可以使这种调试生效,我将跟踪/调试代码#ifdef TRACE等包装起来,以确保这些代码不会在我的发布版本中结束。

我不了解在这个领域工作的其他人,但这对我很有用,老实说我不知道​​更好的方法。

答案 2 :(得分:0)

如果您可以JTAG进入设备,那么通常可以通过JTAG / IDE链将fprintf放入主机的项目目录中。

如果您可以以传输字符串的相同方式传回已解析的结构,那么您可以考虑在主机环境中处理它们。

幸运的是我们的设备和主机都运行Linux并使用GCC,整数大小,浮点格式,对齐要求,字节顺序等设备或主机都是一样的,我们处理原始字节流时遇到的困难很小。结构。

如果是这种情况,您也可以这样做。

此外,您可以使用mex函数将C struct转换为MATLAB struct并在MATLAB中处理它。