Chapter0 开发工具链
1. Compiler
ARM 主流编译器(armcc、iar、gcc for arm、LLVM(clang))
2. IDE
IAR Embedded Workbench
-
gitignore
对 IAR Embedded Workbench 文件进行版本控制
$PROJ_DIR$\settings$PROJ_DIR$\Debug\*$PROJ_DIR$\Release\* -
icf文件(链接脚本)
icf主要作用就是定义FLASH存储段地址、RAM存储段地址和堆栈大小。每个芯片开发商都会针对每款芯片来编写一个.icf文件即链接文件。对于基本的应用,这个.icf文件足以满足你的工程需要。但有时也会需要改动,比如当你的项目要添加外部RAM时、修改app存放地址时。都要修改icf。
-
map文件
通过map文件也可以查看代码的的存储信息,如变量大小存放位置、函数大小存放位置等等。以及查看固件的存储信息,ROM占用和RAM占用
-
分析程序栈最大深度,调试查看栈占用
在IAR Embedded Workbench中分析和监控堆栈使用
1 在Project>Options>Linker>Advanced中,选中Enable stack usage analysis来使能堆栈使用分析功能
由于堆栈使用分析的结果将会包含在链接器生成的map文件中,需要在Project>Options>Linker> List选项卡中选中Generate Linker map file
2 在tools>Options>Stack选项中勾选Enable graphical stack display and stack usage tracking以启用运行时堆栈使用跟踪
调试时,可通过View>Stack打开Stack窗口,每当执行停止时,C-SPY 会在Stack窗口中更新堆栈的使用情况
-
创建多个工程配置并且切换
在IAR的Workspace窗口顶部的下拉菜单中有两个选项,Debug和Release。
名字和数量可以在菜单栏的Project->Edit Configuration中增删修改
每个选项都对应着一个工程配置(也就是项目名称右击Options里的内容),互相是独立的。
3. Debug Tool
LKS_Scope
一款国产的上位机跟踪软件,和JScope一样的功能,但是可以修改变量,这点jscope不行。推荐使用
amaocom
一款功能丰富的串口调试软件,相比于一般调试工具SSCOM等等。有如下功能
发送帧与接收帧计数,可以用于测试通信设备的通信丢包率。
指定关键字高亮与过滤,可以用于再快速通信下查找数据包。
SEGGER JLink
-
JScope
J-Scope、可以在目标MCU运行时,实时分析数据并图形化显示的软件。
它不需要SWO或目标上的任何额外引脚等功能,使用可用的标准调试端口JTAG\SWD。
J-Scope能够以类似示波器的方式显示多个变量的值。通过读取elf\obj\out\axf文件,允许选择多个变量进行可视化。
-
HSS模式
HSS模式是通过采样周期定时从内存文件中读取变量的值,所以采样周期和可执行文件是必须的。
为了更加准确有效的采集到对的数据,最好用volatile声明变量。
优点:随时可连接MCU,不影响MCU正常运行,因为不需添加任何代码,所以也不会占用MCU紧张的资源。
缺点:速度慢,采样速率基本固定在1khz左右,因此仅仅适合采样变量变化速率低于1khz的情况, 因为数据是根据采样率来的,所以实时性不是太准,不够低速率下影响不大。
如图,再选中工程中的.elf/.obj/.out/.axf等可执行文件,即可开始调试,IAR对应.out,MDK对应.axf

-
RTT模式
RTT模式下,所有的数据和时间戳均是有MCU来提供。
优点:比HSS更高的数据吞吐量,最高可达2MB/S,不过这个是由MCU上使用的缓冲区大小决定, 即使只有512字节的小缓冲区也可以达到1MB/S,够用了;J-Scope数据采集与MCU的应用程序执行同步, 因为应用程序决定何时以及如何采样数据;不需要知道变量位置, RTT缓冲区的位置由J-Scope自动检测;时间戳等数据可以被添加到数据样本中。
缺点:稍微比较麻烦,需要移植RTT代码,占用mcu资源,大概需要1.4kb左右的flash,1KB左右的RAM。
-
-
JLink RTT
调试备忘录-J-Link RTT的使用(原理 + 教程 + 应用 + 代码)
RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合了SWO和半主机的优点,具有极高的性能。
使用RTT可以从MCU非常快速输出调试信息和数据,且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU,兼容性强。