按钮(调试、debug)时进行的硬件在线调试、单步运行等功能。
要实现调试功能,还要在"Options for Target->Debug->Settings"中进行配置,见图 4910。
图 4910 设置仿真前检查代码并下载程序到FLASH中
在图中我们需要勾选"Verify Code Download"及"Download to FLASH"选项,也就是说点击调试按钮后,本工程的程序会被下载到内部SRAM中,只有勾选了这两个选项才能正常仿真。(至于为什么FLASH版本的程序不需要勾选,不太清楚)
经过这样的配置后,硬件仿真时与平时内部FLASH版本的程序无异,支持软件复位、单步运行、全速运行以及查看各种变量值等 (同样地,前提是BOOT0和BOOT要被设置为SRAM启动) 。
7. 不需要修改BOOT引脚的仿真配置
假如您使用的硬件平台中BOOT0和BOOT1引脚电平已被固定,设置为内部FLASH启动,不方便改成SRAM方式,可以使用如下方法配置调试选项实现在SRAM调试:
(1) 与上述步骤一样,勾选"Verify Code Download"及"Download to FLASH"选项;
(2) 见图 4911,在"Options for Target->Debug"对话框中取消勾选"Load Application at startup"选项。点击"Initialization File"文本框右侧的文件浏览按钮,在弹出的对话框中新建一个名为"Debug_RAM.ini"的文件;
图 4911 新建一个ini文件
(3) 在Debug_RAM.ini文件中输入如代码清单 494中的内容。
代码清单 494 Debug_RAM.ini文件内容
1 /***********************************************************/
2 /* Debug_RAM.ini: Initialization File for Debugging from Internal RAM */
3 /******************************************************/
4 /* This file is part of the uVision/ARM development tools. */
5 /* Copyright (c) 2005-2014 Keil Software. All rights reserved. */
6 /* This software may only be used under the terms of a valid, current, */
7 /* end user licence from KEIL for a compatible version of KEIL software */
8 /*development tools. Nothing else gives you the right to use this software */
9 /***************************************************/
10
11 FUNC void Setup (void) {
12 SP = _RDWORD(0x20000000); // 设置栈指针SP,把0x20000000地址中的内容赋值到SP。
13 PC = _RDWORD(0x20000004); // 设置程序指针PC,把0x20000004地址中的内容赋值到PC。
14 XPSR = 0x01000000; // 设置状态寄存器指针xPSR
15 _WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
16 }
17
18 LOAD %L INCREMENTAL // 下载axf文件到RAM
19 Setup(); //调用上面定义的setup函数设置运行环境
20
21 //g, main //跳转到main函数,本示例调试时不需要从main函数执行,注释掉了,程序从启动代码开始执行
上述配置过程是控制MDK执行仿真器的脚本文件Debug_RAM.ini,而该脚本文件在下载了程序到SRAM后,初始化了SP指针(即MSP)和PC指针分别指向了0x20000000和0x20000004,这样的操作等效于从SRAM复位。
有了这样的配置,即使BOOT0和BOOT1引脚不设置为SRAM启动也能正常仿真了,但点击下载按钮把程序下载到SRAM然后按复位是不能全速运行的(这种运行方式脱离了仿真器的控制,SP和PC指针无法被初始化指向SRAM)。
上述Debug_RAM.ini文件是从STM32F4的MDK芯片包里复制过来的,若您感兴趣可到MDK安装目录搜索该文件名,该文件的语法可以从MDK的帮助手册的"µVision User's Guide->Debug Commands"章节学习。
49.5 每课一问
4. 在内部FLASH运行的程序与在SRAM运行的程序主要差异有哪些?
按钮(调试、debug)时进行的硬件在线调试、单步运行等功能。
要实现调试功能,还要在"Options for Target->Debug->Settings"中进行配置,见图 4910。
图 4910 设置仿真前检查代码并下载程序到FLASH中
在图中我们需要勾选"Verify Code Download"及"Download to FLASH"选项,也就是说点击调试按钮后,本工程的程序会被下载到内部SRAM中,只有勾选了这两个选项才能正常仿真。(至于为什么FLASH版本的程序不需要勾选,不太清楚)
经过这样的配置后,硬件仿真时与平时内部FLASH版本的程序无异,支持软件复位、单步运行、全速运行以及查看各种变量值等 (同样地,前提是BOOT0和BOOT要被设置为SRAM启动) 。
7. 不需要修改BOOT引脚的仿真配置
假如您使用的硬件平台中BOOT0和BOOT1引脚电平已被固定,设置为内部FLASH启动,不方便改成SRAM方式,可以使用如下方法配置调试选项实现在SRAM调试:
(1) 与上述步骤一样,勾选"Verify Code Download"及"Download to FLASH"选项;
(2) 见图 4911,在"Options for Target->Debug"对话框中取消勾选"Load Application at startup"选项。点击"Initialization File"文本框右侧的文件浏览按钮,在弹出的对话框中新建一个名为"Debug_RAM.ini"的文件;
图 4911 新建一个ini文件
(3) 在Debug_RAM.ini文件中输入如代码清单 494中的内容。
代码清单 494 Debug_RAM.ini文件内容
1 /***********************************************************/
2 /* Debug_RAM.ini: Initialization File for Debugging from Internal RAM */
3 /******************************************************/
4 /* This file is part of the uVision/ARM development tools. */
5 /* Copyright (c) 2005-2014 Keil Software. All rights reserved. */
6 /* This software may only be used under the terms of a valid, current, */
7 /* end user licence from KEIL for a compatible version of KEIL software */
8 /*development tools. Nothing else gives you the right to use this software */
9 /***************************************************/
10
11 FUNC void Setup (void) {
12 SP = _RDWORD(0x20000000); // 设置栈指针SP,把0x20000000地址中的内容赋值到SP。
13 PC = _RDWORD(0x20000004); // 设置程序指针PC,把0x20000004地址中的内容赋值到PC。
14 XPSR = 0x01000000; // 设置状态寄存器指针xPSR
15 _WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
16 }
17
18 LOAD %L INCREMENTAL // 下载axf文件到RAM
19 Setup(); //调用上面定义的setup函数设置运行环境
20
21 //g, main //跳转到main函数,本示例调试时不需要从main函数执行,注释掉了,程序从启动代码开始执行
上述配置过程是控制MDK执行仿真器的脚本文件Debug_RAM.ini,而该脚本文件在下载了程序到SRAM后,初始化了SP指针(即MSP)和PC指针分别指向了0x20000000和0x20000004,这样的操作等效于从SRAM复位。
有了这样的配置,即使BOOT0和BOOT1引脚不设置为SRAM启动也能正常仿真了,但点击下载按钮把程序下载到SRAM然后按复位是不能全速运行的(这种运行方式脱离了仿真器的控制,SP和PC指针无法被初始化指向SRAM)。
上述Debug_RAM.ini文件是从STM32F4的MDK芯片包里复制过来的,若您感兴趣可到MDK安装目录搜索该文件名,该文件的语法可以从MDK的帮助手册的"µVision User's Guide->Debug Commands"章节学习。
49.5 每课一问
4. 在内部FLASH运行的程序与在SRAM运行的程序主要差异有哪些?