在没有调试器的情况下,进行代码调试的手段就只有 log 大法,为了能够尽可能详细地输出有用的调试信息,往往我们需要将调用栈、R0- R15 寄存器、SCB、中断状态、线程状态等信息打印出来,然后配合反汇编进行调试跟踪代码。这会用到一些特殊的函数(内链汇编函数),下面将介绍我用到的汇编函数,这些都基于 GUN GCC 工具链。
1. 调试器是通过停止CPU核心的时钟来停止被调试程序的运行,实际上被调试芯片的硬件模块并没有被复位,它们还处于使能状态,那些能够自动运行的模块只是处于暂停状态,一旦恢复了时钟之后,它们仍会继续运行。 2. 目前常用的调试软件,不管是IAR EWARM还是Keil MDK,调试软件界面上的"复位"按钮都不能对芯片执行硬件的复位,...
1 使用 Eclipse 调试程序:以 S3C2410/S3C2440 的 u-boot 程序为例 注意:调试网上下载的 u-boot 时,需要定义 CONFIG_SKIP_LOWLEVEL_INIT,它表示“跳过底层的初始始化”,就是不要初始化存储控制器,不要再次复制 u-boot 本身到 SDRAM中。对于光盘中的 u-boot,已经增加的自动识别代码,无需定义这个宏。 虽然不...
1 1. Cortex-M3/M4 内核的高级调试功能 对于Cortex-M3/M4内核调试而言,不仅仅有设置程序断点、单步、全速、观察内核资源这么简单的功能。事实上内核调试模块还提供了几项高级功能,用于帮助用户更加清楚地了解程序运行状态,快速定位问题。AK100Pro 仿真器能完善的支持这些功能,本文详细阐述具体应用方法。其它仿真器(...
出于调试目的,以下字符串会在正常工作期间发送至 UART(见图8)。 图8. 用于调试的UART字符串 常见变化 对于标准UART至RS-232接口,可以用 ADM3202等器件代替FT232R收发器,前者需采用3 V电源供电。对于更宽的温度范围,可以使用不同的热电偶,例如J型热电偶。为使冷结补偿误差最小,可以让一个热敏电阻与实际的冷结...
1.1 跟踪调试模式 大多数的微处理器都提供了跟踪调试接口,例如最常用的JTAG 接口,Cortex-M3 内核除了支持JTAG 调试外,还提供了专门的指令追踪单元(ITM).JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1 兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如ARM.DSP...
Cortex‐M3 在内核水平上搭载了若干种调试相关的特性。最主要的就是程序执行控制,包括停机(halting)、单步执行(stepping)、指令断点、数据观察点、寄存器和存储器访问、性能速写(profiling)以及各种跟踪机制。 Cortex‐M3 的调试系统基于 ARM 最新的 CoreSight 架构。不同于以往的 ARM 处理器,内核本身不再含有 JTAG ...
摘要:以ARM Core Sight Architecture Specification规范和ARM Debug Interface Architecture Specification规范为出发点,分析了ARM CoreSight调试与追踪体系在ARM Cortex M3内核中的实现过程。同时,对比分析了新的Serial WireDebug调试技术和经典的JTAG调试技术的异同。
基于Cortex-M3核的软件调试突破了这样的限制,Cortex-M3内核提供了一个ITM(Instrumentation Trace Macrocell)接口,通过SWV(Serial Wire Viewer)可调试由SWO引脚接收到的ITM数据。ITM实现了32个通用的数据通道,基于这样的实现,CMSIS规定用通道0作为终端来输出调试信息,通道31用于操作系统的输出调试(特权模式访问)。在core_...