2024年4月20日发(作者:)
Eclipse+GNU ARM环境搭建说明
文档介绍
本文介绍了Eclipse+GNU ARM的编译、调试的环境搭建方法。
版本说明
版本号 修改日期
V1.0 2018-12-13
说明
根据最新版本Eclipse 2018 09版本编写说明。
根据GNU MCU ARM 最新版本进行版本编写说明。
修订人
1. J-link程序及驱动安装
1.1. 安装方式
安装文件及补丁包位于“0. J-link驱动”文件夹下。
1、 安装“Setup_JLinkARM_”文件。
2、 将“”文件解压,然后替换安装目录下的文件。
1.2. 安装验证
1、 安装完毕后,插上J-Link仿真器,在系统的“设备管理器”中可以看到:
2、 在系统开始菜单可以看到SEGGER程序组。
3、 将仿真器通过USB线接入计算机,另一端接到目标板。
4、 给目标板上电。
5、 打开“J-Link Commander”命令,可以看到
选择对应的USB口。
6、 弹出CMD命令行后可以观察到J-Link状态:
说明链接成功、设备正常。
以上,J-Link驱动及应用程序安装结束。
2. Eclipse IDE编译环境的安装
2.1. 版本选择
当前Eclipse版本:eclipse MARS.1(可以参考GNU ARM官网,选择配套的Eclipse)
2.2. 安装方式
安装文件及补丁包位于“1. Eclipse IDE for CC++ Developers”文件夹下。
1、 根据本地计算机的位数,选择32位()或64位
(eclipse-cpp-mars-1-win32-x86_)安装文件。
2、
将压缩文件解压后的“eclipse”文件夹拷贝到自记选择的安装目录。
(鉴于
Eclipse
为绿色文件,安装目录最好不要选择系统盘
C
盘。)
(安装目录最好为目标分区的根目录。某些
Eclipse
插件对空格敏感。)
2.3. 工作空间设置
打开Eclipse后,选择工作目录,此目录为程序空间目录的上一级目录。
打开后如下图:
3. CDT插件安装
1
、
保证本地计算机可以上网。
2、 打开Eclipse。
3、 选择菜单“Help->Install New Software…”
4、 点击“Add”,选择“Archive…”,选择“2. CDT_Eclipse_Plugin”目录下的“”。
(可以在Eclipse官方网站进行下载)
5、 选择要安装的项目,然后一路点击“Next”。
6、 直至“Review Licenses”页面选择“同意”再点击结束。
7、 安装完成后重新启动Eclipse。
4. GNU ARM eclipse插件安装
1. 打开Eclipse。
2. 选择菜单“Help->Install New Software…”
3. 点击“Add”,选择“Archive…”,选择“3. GNU ARM Eclipse Plug-ins”目录下的
“”。(可以在GNU ARM Eclipse官网
下载)
4. 选择要安装的项目,然后一路点击“Next”。
5. 直至“Review Licenses”页面选择“同意”再点击结束。
6. 在“Security Warning”页面选择“OK”。
7. 安装完成后重新启动Eclipse。
5. GNU ARM 编译器及工具安装
1、 打开文件夹“4. GNU ARM tools chain”。
2、 双击“gcc-arm-none-eabi-4_”进行安装。
3、 选择安装语言。
4、 在下一个页面,点击“下一步”,选择“我接受”。
5、 选择安装文件夹,安装文件夹最好不要选择系统盘,否则重装系统后,需要重新配置编
译环境。
6、 安装结束后,在“完成页面”,不要选择任何复选框,然后点击“完成”。安装结束。
6. GNU windows 编译工具安装
1、 在“5. GNU Windows Build Tools”目录下,选择本地计算机的操作系统位数,32位安装
“”,64位安装
“”。
2、 安装时,需要点击“next”,然后点击“I Agree”。
3、 然后,在复选页面选择“Start Menu Shortcuts”,点击“Next”。
4、 选择安装文件夹,安装文件夹最好不要选择系统盘,否则重装系统后,需要重新配置编
译环境。
5、 等待安装,完毕后点击“Finish”安装完成。
7. eclipse工作环境设置
7.1. Pack包更新
1. 打开eclipse。点击“WorkBench”,进入工作空间。
2. 点击命令栏Pack图标(下图最右侧)。
3. 点击“Refresh”,然后可以看到已经安装好的Package(ARM-CMSIS)。
4. 关闭Packages管理页面。在透视视图的Packs标签点击鼠标右键,选择Close。
7.2. 程序移植
1、 将程序工作目录整体拷贝至“工作空间目录”。
2、 选择“Files->Import…”。
3、 选择导入类型。
4、 选择目标文件
7.3. 编译器路径设置
1、 选择命令栏“Project->Properties”。
2、 展开“C/C++ Build->Tools Paths”。
3、 在“Build tools folder”栏填入“GNU ARM Eclipse”的“”命令路径。
4、 在“Toolchain folder”栏填入“GNU Tools ARM Embedded”的“”
命令路径。
7.4. 项目符号索引重建
在“Project Explorer”视图中,项目文件夹点击右键,然后选择“Index->Rebuild”。
7.5. 项目清理
1、 选择命令栏“Project->Clean…”。
7.6. 项目编译
选择命令栏“Project->Build All”。
8. J-Link调试环境设置
8.1. 建立调试项
1、 选择命令栏“Run->Debug Configurations…”,双击“GDB Hardware Debugging”,自动建
立项目名的调试项。
2、 在窗口左侧“Project”栏选择当前待调试项目。
3、 在窗口左侧“C/C++ Applications”栏,填写需要调试的*.elf文件。该文件在编译时会自
动建立。
8.2. 设置调试命令位置
1、 设置“Debugger”标签。
2、 在“GDB Command:”栏填入“GNU
”的位置。
3、 在“JTAG Device:”选择“GNU ARM J-Link”。
4、 在“Port number”填入“2331”。
Tools ARM Embedded4.9
8.3. 设置GDB启动代码
1、 设置“Startup”标签。
2、 在“Initialization Commands”命令栏填入如下代码:
monitor flash device = STM32F407VE
monitor flash download = 1
monitor flash breakpoints = 1
monitor clrbp
monitor endian little
monitor speed 5
monitor reset
monitor sleep 100
monitor speed auto
monitor writeu32 0xE000ED08 = 0x00000000
monitor semihosting enable
monitor semihosting breakOnError
monitor semihosting IOclient 3
注意:针对STM32F103RC芯片,STM32F407VE应该改为STM32F103RC。
3、 向下拉动最右侧滚动条,在“Run Commands”命令栏填入如下代码:
monitor reg r13 = (0x00000000)
monitor reg pc = (0x00000004)
break main
4、 点击“Apply”,设置完成。
8.4. J-Link调试步骤
1、 将仿真器通过USB线接入计算机,另一端接到目标板。
2、 给目标板上电。
3、 打开J-Link安装目录下的“”文件。选择自动搜索到的,目标板对
应的USB接口。系统自动打开如下调试界面。
4、 在eclipse环境中选择配置好的调试项。点击“Debug”。
5、 在窗口可以看到GDB命令行。
6、 然后在eclipse环境中可以进行调试。
7、 常用的调试命令如下:
(1) 单步调试。
(2) 跳过调试。
(3) 暂停。
(4) 启动。
(5) 重新载入。
8、 可以使用命令栏的“Windows->Perspective”和“Windows->Show view”配置调试窗口。
9. 另一种J-Link调试方法
10. 常见问题处理
10.1. 程序发生硬件错误
现象:
第一次调试,程序不在Main函数停止,直接跳入一个死循环。
处理方法:
在“Debug”窗口的调试项目点击右键,进行停止并移出处理。然后再次进行调试错误
将会恢复。
10.2. 程序发生硬件错误
在编译的时候会出现这样的提示
Error: registers may not be the same -- `strexb r0,r0,[r1]' 这个其实是一个BUG
他的解决方法是
找到cm3.c文件的736行改为:
__ASM volatile ( "strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
753行改为:
__ASM volatile ( "strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
这样就不会有错误了
10.3. 无法找到库文件
在c/c++属性设置页面中,在“GNU ARM c++ linker -> miscellaneous”中,“Other objects”框
中,增加包含路径的库文件即可。
10.4. 汇编文件无法进行编译
汇编文件的后缀使用大写的S。
10.5. .a库文件无法找到
编译器提示“: cannot find xxxx.a”。
GCC编译器使用库文件必须以lib开头,例如: libSTemWin522_CM3_GCC.a。
在引用库文件时,无需lib开头和.a尾缀。只需要引用STemWin522_CM3_GCC。
编译命令使用:-lSTemWin522_CM3_GCC即可。
10.6. 编译不出错但是在控制台显示找不到_write等内置函
数
原因为在嵌入式系统,引入了非重新定义的printf等标准库函数,屏蔽printf或重新定义printf
即可解决。
10.7. 编译空间不够
1、 项目属性的ARM C++ LINK ->Miscellaneous页面,勾选Use newlib-nano项,实测Flash空
间从107416->102610。
10.8. 部分函数定义无法找到
1、 如果源代码为灰色,需要重新进行项目PATH的filter定义。在属性->C/C++->Path and
symbol菜单下设置。
2、 可能需要重新定义项目源代码的包含文件夹。在属性->C/C++->Path and symbol菜单下设
置。
3、 可能需要重新定义库文件夹。在属性->C/C++->Path and symbol菜单下设置。
10.9. GDB调试问题
GDB调试时出现
在Control窗口出现:
“
Program received signal SIGTRAP, Trace/breakpoint trap.
0xb083b500 in ?? () ”
提示
原因:
1、 中断向量表缺失“vectors_stm32fxxx.c”
10.10. 任务无法启动
Ucos-ii内部的OSPendSV中断处理,无法和STM32FXXX的PendSV_Handler中断处理兼容。
1、 Gcc编译器,使用*.S汇编文件。
2、 将Ucos-ii中的OSPendSV替换为PendSV_Handler 。


发布评论