为什么要RAM调试?
一、准备(这里以STM32F103C8的LED流水灯程序为例)
二、修改工程:打开Keil mdk工程,修改以下设置 1.添加一个Project target: 如图1左Project视图中右键Template_Flash选择Manage Project Items…出现工程文件管理界面。
图1 :左为project视图,右为工程项管理界面 在弹出的工程文件管理界面作图1右图所示的设置:(1)单击添加按钮;(2)输入Target名称,如Template_RAM;(3)单击Set as Current Target按钮,然后按ok保存。 这样做的好处是:可以使用下载按钮旁边的下拉列表切换用于Flash下载的配置和进行RAM调试的配置,如图2。 图2 :编译目标选择下拉框 2.分配RAM和Flash空间: 由《STM32数据手册》得知,STM32F103C8的RAM大小为20K,根据自己索要调试的代码分配者20K的空间; 例如:如图3是流水灯程序编译后的keil输出,流水灯程序占Flash:1352字节,占RAM:268+24+1632,那么可以将STM32F103C8的20K的RAM分10k给ROM,剩下10k作为RAM。 图3:流水灯程序Build Output 单击keil工具栏中的魔术棒按钮如图4(Options for Target…)弹出工程选项窗口: 图4 :工程选项Options forTarget按钮 修改工程选项的Target标签的IROM和IRAM如图5。设置IROM的Start=0x20000000,Size=0x2800(0x2800=10k);IRAM的Start=0x20002800,Size=0x2800。 图5 :工程选项-Target标签设置 为何这样设置? 答:下图来自《Cortex-M3权威指南(中文)》84页,据图5.1知Cortex-M3内核MCU内部RAM起始地址为0x20000000,因为STM32F103C8的内部RAM=20K,因此地址范围是:0x20000000~0x20005000。这样上述设置将10k分给的代码区(IROM),将10k分给了数据区(IRAM)。 3.修改中间文件和链接文件保存路径:(文件路径跟别的Target不同即可) 如图6,打开选项的Output标签,将objects文件的保存路径改为工程目录/OBJ/RAM目录下;同理,选项的Listing标签中,将lst文件的保存路径改为工程目录/LIST/RAM目录下; 图6:工程选项-Output标签设置 目的是:避免二、1步中所示的不同配置的Target产生的中间文件和链接文件混淆。 4.添加宏定义: 在选项的C/C++标签的Preprocessor Symbols的define中添加定义:VECT_TAB_SRAM,若有别的定义,则用英文逗号隔开。 图7:工程选项-C/C++标签设置 5.清除flash编程算法以及添加初始化文件: (1)在选项的BEBUG标签中选择右侧的仿真器如Jlink,图8左; 图8 :左 工程选项-Debug标签 ;右 单击左图Setting弹出的仿真器设置界面 然后单击右边的Settings按钮:弹出如图8右图所示设置页,选择Flash download标签,设置如下:直到将Programming Algorithm中的内容清空。选项的Utilities标签也有一个Setting按钮,里面的设置同理。 (2)在选项的BEBUG标签中选择右侧的仿真器选择下方有一个Initialization File,添加Dbg_RAM.ini文件; 说明:Dbg_RAM.ini文件来自Keil安装目录\ARM\Pack\Keil\STM32F1xx_DFP\1.1.0\Boards\Keil\MCBSTM32C\Blinky\Dbg_RAM.ini,将其复制到工程目录的USER子目录下;不同版本Keil该文件路径可能不同。该文件可手动创建,内容如下:
6.最后的设置:选项的Utilities标签的 Update Target Before DeBugging项不能选中! 图9:工程选项-Utilities标签 上述设置完成后,注意单击ok保存设置。 三、enjoy程序调试: 重新编译项目文件,单击keil工具栏中的Bebug按钮就可以在RAM中调试程序。 注意: 1.RAM调试Target不能用于下载,因此不能单击下载按钮; 2.调试过程中复位后必须退出Debug再重新进入Debug。原因是复位后程序回到了芯片flash的起始地址而非RAM起始地址。 3.若进入debug程序立即运行,可先在main函数或需要的地方加好断点,或者取消图8工程选项-Debug标签所示的Run to main().选项 为什么是取消勾选??不得而知。 RAM调试工程模板下载: |
|
来自: 旭日东升4k165w > 《文件夹1》