加速Cortex-M MCU调试的五个技巧


调试嵌入式软件是我最不喜欢的行为,不幸地是,它却是必要的。值得庆幸地是,技术和工具链创新的进步衍生出大量的新技术,从而大大地加快了调试过程。下面让我们来看看其中一些方法,从传统的断点调试出发到更先进的仪器跟踪技术。
技巧1# - 传统的断点调试
调试嵌入式软件是我最不喜欢的行为,不幸地是,它却是必要的。值得庆幸地是,技术和工具链创新的进步衍生出大量的新技术,从而大大地加快了调试过程。下面让我们来看看其中一些方法,从传统的断点调试出发到更先进的仪器跟踪技术。
技巧1# - 传统的断点调试
到现在为止,相信大家对单片机已经有了一个基本概念,但是我们为什么要学习单片机呢?我们需要找到爱上单片机的一万个理由。
单片机在实际中的应用
Thumb-2指令集
同时支持16位和32位指令系统
Bit[15:11]
0b11101
0b11110
0b11111 紧邻的两个半字构成一条32位指令
其他:皆为16位指令
调试,在企业程序设计里(我把企业商务类型的软件开发叫企业程序设计,把单片机与驱动程序这样接触底层汇编与硬件相关的程序设计叫底层程序设计),调试一般都用来跟踪变量的赋值过程,以及查看内存堆栈的内容,查看这些内容的目的在于观察变量的赋值过程与赋值情况从而达到调试的目的。由于企业程序的宿主就是开发它的计算机本身,因此企业程序设计比起底层程序设计,特别是单片机的程序设计调试来的更直观,调试也更方便。
本文将详细为大家介绍并讲解ARM的指令集。
比如:
ADC :带进位的加法
(Addition with Carry)
ADC{条件}{S}
dest = op_1 + op_2 + carry
ARM公司的Cortex-M0应用于各种微控制器(MCU)中,并可让研发工程师以8位的价位创造32位的的效能,并将传统的8位和16位的处理器升级到更高效、更低功耗的32位处理器。
;先在RAM 中分配系统使用的栈,RAM 的起始地址为0x2000_0000
;然后在RAM 中分配变量使用的堆
;然后在CODE 区(flash)分配中断向量表,flash 的起始地址为0x0800_0000,该中断向量表就从这个起始地址开始分配
;分配完成后,再定义和实现相应的中断函数,
Cortex‐M3 是一个32 位处理器内核。内部的数据是32 位的,寄存器是32 位的,存储器接口也是32 位的。
CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行。这样一来数据访问不再占用指令总线,从而提升了性能。
内容提要
本文将详细介绍ARM 指令集,其中包括:寄存器和处理器模式(26-bit 体系)、寄存器和处理器模式(32-bit 体系)、程序状态寄存器和操纵它的指令、寄存器装载和存储指令、算术和逻辑指令、移位操作、乘法指令、比较指令、分支指令、条件执行、软件中断指令、APCS (ARM 过程调用标准)、编写安全的 32-bit 代码的基本规则、IEEE 浮点指令、汇编器伪指令、指令快速查找、ARM 指令
本文将以目前流行的ARM嵌入式微处理器、嵌入式Linux作为主要内容,从嵌入式系统基本原理、系统设计,到抽象出研究嵌入式系统的技术途径进行了较深入阐述。其内容包括了嵌入式处理器原理、汇编语言、系统设计与软件开发、计算机接口技术与应用等方面的知识,并通过实例讲解嵌入式系统设计过程和原理。
章节目录