1.Segger Embedded Studio 简介
Segger Embedded Stadio 是segger公司新开发的嵌入式编译器环境(IDE),可以用于管理,构建,测试和部署嵌入式应用程序,Nordic 的SDK往后的只更新项目工程到SES开发环境,Keil和IAR不再支持。 主要特征: 1.适用于嵌入式C/C ++编程的专业IDE解决方案 2.跨平台:可在Windows,macOS和Linux上运行 3.包含Clang/LLVM和GCC C/C++编译器 4.高度优化的运行时库,可实现最佳性能和最小代码量 5.具有无缝J-Link集成的功能丰富的调试器 6.强大的项目管理器和源代码编辑器 7.基于软件包的项目生成器,适用于所有常见的微控制器 8.多线程构建可最大程度地减少构建时间 9.免费用于任何非商业用途,例如教育和评估目的,没有任何限制
2.开发环境
- STM32CUBEMX
- Embedded Studio(V5.40)
- STM32H743IITX小系统开发板
3.开始(以及会出现的问题)
1.使用STM32CubeMX配置一个点灯小Demo工程,我的开发板上配置的是PB1。 2.按照下图所示配置生成Keil工程 3.打开Segger Embedded Studio 按照下图所示导入刚才生成的Keil工程 4.选择使用外部编译链(下方选择KEIL的编译器位置) 5.编写一个简单的LED闪烁程序
uint8_t count_num = 0;
int main(void)
{
SCB_EnableICache();
SCB_EnableDCache();
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
HAL_Delay(100);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
HAL_Delay(100);
count_num++;
if(count_num == 5)
{
count_num = 0;
}
}
}
6.点击DEBUG中的GO即可打开调试 在这里我们发现虽然我们的LED工程已经跑起来了,LED灯已经开始闪烁了。但是当我们查看右上角的变量窗体里面提示(Restricted memory range)意味着我们并没有追踪到这一个变量,在调试中是不可以接受的。那么我们应该怎么去解决这个问题呢,下面将继续介绍。
4.解决办法
经过我的高强度的网上冲浪,我在Segger官方的文档里找到了这个答案!其实导入到上面一步并没有完全完成所有的工作,我们还需要导入设备的内存映射,Flash配置等文件。(官方文档的连接会附在文后,有兴趣的兄弟可以自己阅读一下)。下面我将简单的演示一下如何完成全部工作。 1.在下图所示的位置下载相关芯片的支持包。 2.按照下图所示的位置,打开支持包的路径建立相关的芯片支持文件夹 3.建立芯片支持文件夹 将以下特定于设备的文件从包文件夹复制到一个新文件夹中。 启动代码 /Source/_Startup.s. 矢量表 /Source/_Vectors.s. 链接器脚本 /Scripts/_Flash.icf. 内存映射 /XML/<设备名称>_MemoryMap.xml。 寄存器文件 /XML/<设备名称>_Registers.xml。 均在文件内,仔细寻找便是 5.完成对相关内容的设置 打开项目设置切换至Comon设置
在 Code -> Linker -> Linker Script File 中添加 .icf 文件. 在 Code -> Linker -> Memory Map File 中添加 the *_MemoryMap-.xml 文件. 在 Debug -> Debugger -> Register Definition File 中添加 *_Registers.xml 文件. 重新构建后开启仿真 可以看见右上角的变量已经可以成功显示了,实验完成!!!
参考链接
Segger官方参考文档 Embedded Studio 下载地址
|