Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
这是一段C++ 11代码的示例:
auto text = std::unique_ptr<char[]>(new char[len]);
Run Code Online (Sandbox Code Playgroud)
Eclipse编辑器抱怨:
Function 'unique_ptr' could not be resolved
Run Code Online (Sandbox Code Playgroud)
Makefile编译工作正常.如何让Eclipse停止抱怨这些错误?
编程ARM微控制器的标准(低成本)方法是使用Eclipse,并在其中插入复杂的工具链.Eclipse肯定有它的优点,但我想要独立于这个IDE.我想发现当我构建(编译 - 链接 - 闪存)我的软件以及运行调试会话时幕后发生的事情.为了更深入地理解,从命令行运行整个过程会很棒.
注意:我使用的是64位Windows 10.但这里解释的大部分内容也适用于Linux系统.请使用管理员权限打开所有命令终端.这可以为您节省很多问题.
1.构建软件
第一个"使命"完成了.我现在能够通过命令行编译和链接我的软件到二进制文件.bin和.elf图像.成功的关键是找出Eclipse为特定项目提供make文件的位置.一旦你知道它们在哪里,你所要做的就是打开一个命令终端,然后输入GNU make命令.
你不再需要Eclipse了!特别是如果您可以阅读(并理解)makefile并在项目进展时根据您的需要进行调整.
请注意,在安装SW4STM32(System Workbench for STM32)之后,我在以下文件夹中找到了GNU工具(编译器,链接器,make实用程序,GDB,...):
C:\Ac6\SystemWorkbench\plugins\fr.ac6.mcu.externaltools.arm-none.win32_1.7.0.201602121829\tools\compiler\
Run Code Online (Sandbox Code Playgroud)
接下来,我在硬盘上创建了一个新文件夹,并将所有这些GNU工具复制到其中:
C:\Apps\AC6GCC
|-> arm-none-eabi
|-> bin
'-> lib
Run Code Online (Sandbox Code Playgroud)
我将这些条目添加到"环境路径变量":
- C:\Apps\AC6GCC\bin
- C:\Apps\AC6GCC\lib\gcc\arm-none-eabi\5.2.1
Run Code Online (Sandbox Code Playgroud)
Huray,现在我已经在我的系统上启动并运行了所有GNU工具!我将以下build.bat文件放在与以下文件夹相同的文件夹中makefile:
@echo off
echo.
echo."--------------------------------"
echo."- BUILD -"
echo."--------------------------------"
echo.
make -j8 -f makefile all
echo.
Run Code Online (Sandbox Code Playgroud)
运行这个bat文件应该可以胜任!如果一切顺利,您将获得一个.bin和一个.elf二进制文件作为编译的结果.
2.闪烁和调试固件
自然的后续步骤是将固件刷新到芯片并启动调试会话.在Eclipse中,只需"点击一个按钮" - 至少如果为您的微控制器正确配置了Eclipse.但是幕后会发生什么?我从Dominic Rath(OpenOCD的开发者)那里阅读(部分)硕士论文.你可以在这里找到它:http://openocd.net/.这是我学到的:
单击"调试"图标时,Eclipse将启动OpenOCD软件.Eclipse还为OpenOCD提供了一些配置文件 - 这样OpenOCD就知道如何连接到微控制器."如何连接"并非易事.OpenOCD需要找到合适的USB驱动程序来连接JTAG适配器(例如STLink).JTAG适配器及其USB驱动器通常由您的芯片制造商提供(例如STMicroelectronics).Eclipse还将配置文件移交给OpenOCD,该文件描述了微控制器的规格.一旦OpenOCD知道所有这些事情,它就可以与目标设备建立可靠的JTAG连接.
OpenOCD启动两个服务器.第一个是TCP端口4444上的Telnet服务器.它可以访问OpenOCD CLI(命令行界面).Telnet客户端可以连接并向OpenOCD发送命令.这些命令可以是简单的"停止","运行","设置断点",......
这些命令可能足以调试你的微控制器,但很多人已经熟悉Gnu调试器(GDB).这就是为什么OpenOCD还在TCP端口3333上启动GDB服务器.GDB客户端可以连接到该端口,并开始调试微控制器!
Gnu调试器是一个命令行软件.很多人更喜欢可视化界面.这正是Eclipse所做的.Eclipse启动了一个连接到OpenOCD的GDB客户端 - 但这对用户来说都是隐藏的.Eclipse提供了一个图形界面,可以在幕后与GDB客户端进行交互.
我已经做了一个数字来解释所有这些事情:
>>启动OpenOCD …