写在前面 正式开始前,我想说一下为何要抛弃Windows一些优秀的IDE,而使用复杂的make来开发。一开始拿到这块开发板的时候,我是用TI官方的CCS(Code Composer Studio)来点灯的。但是我发现这款IDE做的并不是很优秀,体验感并不是很好,具体就是代码补全不如其他的IDE,工程的创建也不如RTT的IDE(RT-Thread Studio)。在网上搜索开发环境后,发现大家有的用MDK,有的用IAR,还有用eclipse的(文末细嗦)。无一例外,都是IDE,然而我想折腾一下,想要了解IDE“一键编译”的背后,熟悉底层的原理,所以我选择了makefile,同时搭配VScode的编辑功能来开发。 目录简介 Makefile GNU tools for arm Openocd
开发环境搭建 GNU tools for arm 工具的安装 make 工具的安装 Openocd 的安装 VScode 的安装 Simplelink库下载 新建点灯工程 makefile的编写 链接脚本文件的修改 编写点灯代码
结语
一、简介- Makefile
简单来说,Makefile就是一个辅助工具,它可以根据设定来执行一些指令,这些指令是在命令行窗口或是shell里执行的。它就像一个脚本,一旦编写完,只需要在一个make命令,就可以完成整个工程的编译。具体语法请大家自行百度,或者参照我文末给出的文档--跟我一起写Makefile。在大家了解学习makefile之前,我想一些基础的C语言编译链接的知识是需要的。
- GNU tools for arm
对于GCC,大家可能并不陌生,它是编译源代码的工具,全称叫GNU Compiler Collection,而这个GNU的全称是GNU's Not UNIX,是GNU的递归缩写。对GNU计划感兴趣的同学可以百度一下GNU,很有意思。回归正题,这个tools for arm也叫交叉编译链,交叉是因为windows/linux的架构和arm不一样,要在x86架构上的主机编译能够在arm架构的机子运行的可执行文件,就要用到交叉编译链。而如果在本机编译出本机的可执行文件,就用不着”交叉“了。有了这个tools,我们才能将写出来的源文件编译成可在msp432上运行的可执行文件。
- Openocd
Openocd 是一个功能强大的软件调试器,并不仅仅可以实现单片机程序的烧录。使用时需配备仿真器如STlink、Jlink或者DAPlink等。Openocd配合cross tools的gdb工具就可以实现对单片机的调试。
二、开发环境搭建- GNU tools for arm 工具的安装
在官网获取安装包后,双击。根据提示,可以安装在自己指定的文件夹中并记下安装路径,建议在一个总文件夹下存放交叉工具链和make工具的安装。 安装后将安装路径下的bin文件夹添加到环境变量中。
- make 工具的安装
在官网获取安装包后,双击打开。选择安装路径后一路next,直到选择packages选项。
在make 的new 一栏选择最新版本,之后一路next,并记下安装路径。将安装路径下的bin文件夹添加到环境变量中。
- Openocd 的安装
Openocd可以在github上获取。 选择一个路径直接解压,无需安装,并记下解压路径。将解压路径下的bin文件夹添加到环境变量中。 找到安装路径,进入scripts,进入interface,根据你所选的仿真器打开对应的.cfg文件,在其中添加adapter speed 5000。时钟也可以根据你的需求来配置。如:
- VScode 的安装
这个比较简单,官网获取安装包后傻瓜式安装就可以。(全称Visual Studio Code)
- Simplelink库下载
simplelink是ti官方推出的SDK,有对应不同开发板的版本,我们可以到官网(www.ti.com)搜索simplelink msp432的版本。下载完后解压得到一个simplelink_msp432p4_sdk_3_40_01_02的文件夹,里面存放的就是一些官方的例程和所需的头文件和链接脚本文件,还有全部的配置外设的库。例程在examples目录下,头文件在source\ti\devices\msp432p4xx\inc目录下,库文件在\source\ti\devices\msp432p4xx\driverlib目录下,还有必需的启动文件和系统初始化文件在\source\ti\devices\msp432p4xx\startup_system_files目录下。
- 新建点灯工程
[backcolor=var(--blockquote-bg-color)]我们开始建立一个新工程。先建立一个总的工程文件夹,以后开发的别的工程文件夹可放在这个总文件夹里,也可称为工作区。在工作区内新建工程文件夹make_test,工程文件夹下新建四个文件夹Bsp,User,Core和Doc,其中Bsp用来存放板级支持包(也就是simplelink里配置外设的库文件);User用来存放用户(也就是我们自己)写的代码,例如点灯的代码;Core用来存放与cortex内核有关的文件和官方给的关于msp432的一些文件;Doc用来存放文档;最外层可以放链接文件,makefile等与编译链接有关的文件。 [backcolor=var(--blockquote-bg-color)]具体如下: [backcolor=var(--blockquote-bg-color)]工程文件夹make_test [color=var(--blockquote-text-color)][backcolor=var(--blockquote-bg-color)]
[backcolor=var(--blockquote-bg-color)]Bsp文件夹 将simple的\source\ti\devices\msp432p4xx\driverlib文件夹下的.c和.h文件复制进来,并分为头文件和源文件。
Core文件夹分为Include和Src两个文件夹,其中Inc:在simplelink里的source\ti\devices\msp432p4xx\inc目录下复制进来所需文件。
Src:在source\ti\devices\msp432p4xx\startup_system_files下找到所需源文件并复制进来。
User暂时不需要存放文件,点灯代码直接写在main.c里。 Doc也暂时不需要。 最后在simplelink的source\ti\devices\msp432p4xx\linker_files\gcc下找到p401r的.lds文件,复制到工程文件夹下,同时新建main.c文件和makefile文件。 编写点灯代码 这一部分用到了simplelink库。 #include "msp.h"
#include "gpio.h"
/**
* main.c
*/
int main(void)
{
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD; // stop watchdog timer
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);
while(1)
{
}
return 0;
}
做完上面的工作后,整个工程的建立就结束了。要生成可执行文件只需在makefile所在路径打开命令行窗口(或者在makefile所在文件夹右键在VScode中打开,新建终端),输入"make",就会编译生成.elf 和 .bin文件,再"make connect",可以看到仿真器和开发板已经connect上了。再打开另一个终端,进入build文件夹,输入arm-none-eabi-gdb ./make_test.elf即可通过gdb调试目标开发板。进入gdb模式后load ./make_test.elf可将elf文件烧录进flash,target extended-remote localhost:3333将gdb连接至仿真器,run即可看到开发板灯亮起,说明烧录成功,文件的编译也没有出错。
三、结语makefile文件我会再出一篇详解,敬请期待!感谢读到这里的人!
2022/08/03 By Budali11
|