繁体   English   中英

调试如何在用C编程的MCU系统中进行

[英]How debugging works in MCU systems programmed in C

据我了解,在Linux系统上,调试是通过ptrace sys-call完成的。
我想知道如何为微控制器(无OS)编写调试器。
为了简单起见,让我们假设使用诸如Arduino Due (基于ARM)之类的板的软件调试器。

  • 假设我对调试器在Linux和Windows上的工作方式有一个很好的了解,那么我将学到什么来完成这样的项目
  • 为MCU系统编程调试器有何不同? (我不能使用系统调用)
  • 是否可以通过USB或串行接口进行调试?
  • 我应该使用哪种语言? (C,C ++,Arm汇编)
  • armgcc编译器如何为我的项目提供帮助(是否有-g等标志选项?)

我计划将调试器实现为命令行Linux实用程序。

包括Arduino Due上的ARM在内的大多数现代处理器均具有通过JTAG接口进行的片上调试支持。 Cortex-M3片上调试支持8个硬件断点和一些其他功能-由于代码在闪存中运行,因此您无法设置软件断点。

JTAG接口本身非常简单,但是您将需要特殊的硬件才能从PC支持它。 根据性能和功能的不同,JTAG调试器的成本可能从非常低到昂贵的价格差异很大。 需要将JTAG连接到调试器软件的软件。 OpenOCD是一个开放源代码工具,用于将JTAG /片上调试与GDB接口,允许将GDB-ARM托管在PC上以调试远程ARM目标。

从理论上讲,您可以编写自己的软件来通过JTAG访问OCD。 尽管我已经在ARM9,SrongARM和x86上使用了VxWorks,并且它对目标托管调试的支持有限,但我从未考虑过在微控制器上实现目标托管调试器。 目标托管调试的实用程序受到缺少源代码和符号表信息的限制,这些信息和符号表信息可用于托管调试器以支持源级调试。

即使这样,我相信也可以从目标本身访问片上调试, 有关详细信息,请参阅ARM文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM