200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > cmake 版本 arm_nRF52832开发丶开发环境搭建(ubuntu 18.04+arm-none-eabi-gcc)

cmake 版本 arm_nRF52832开发丶开发环境搭建(ubuntu 18.04+arm-none-eabi-gcc)

时间:2022-09-25 23:26:54

相关推荐

cmake 版本 arm_nRF52832开发丶开发环境搭建(ubuntu 18.04+arm-none-eabi-gcc)

一、SDK下载

下载页地址:

/Software-and-Tools/Software/nRF5-SDK​

点击右边那个图标就可以下载了,不过这个链接有点慢,往下拉

点击"Compatibale downloads"选项卡,再往下拉

这里把其他三个softdevice勾掉只留下sdk,点击下载,这个下载是比较快的。

二、SDK目录结构

解压后就是这个样子,关于目录说明,没有,因为我还没完全搞明白

三、创建工程目录

想要学会创建一个工程,最快速的方法就是找个例子复制过来

这里我们要找单片机编程的hello world——led闪烁

examples目录下有很多例子

关于这些目录是啥意思,抱歉我还没搞明白,但是peripheral这个目录显然是外设相关的例子,我们要的led闪烁例程很有可能会在这里

打开一看果然在这里,有四个blinky目录,选哪个呢,老规矩,三长选一短,就选blinky目录

先不管blinky目录里边有什么,先把它复制到我们喜欢的地方,比如说SDK根目录,因为以后命令行操作会很方便

复制完之后,SDK根目录就是这个样子

以后呢SDK目录就可以作为我们的项目根目录来使用了

四、工程管理

工程目录创建完了,那么如何管理我们的工程呢

GNU/Linux系统中有很多项目管理工具,比如gnu make、cmake、qmake等等,那么NRF5_SDK用什么管理工程呢

打开blinky目录

只有一堆目录、main.c源码文件,还有一个blinky.eww,这个一看就是IAR的工程文件,显然不是我们想要的,hex目录里边是一堆编译好的二进制文件,跟工程管理也没有什么关系,剩下的四个目录长得好像,这里我们打开第pca10040(不用想了,这个就是right one,四个目录代表不同的开发板,开发板MCU不同)

又有三个目录(SDK目录这么深,不简化一下,命令行操作起来肯定会累死),mbr和s132目录还不清楚是什么东西,只剩下一个blank目录了,“空”没准就是干干净净的led闪烁程序了

打开一看又是一堆目录,真是怕了你了,耐心分析一下,很明显每个目录代表不同的编译器,这里我们选择armgcc也就是arm-none-eabi-gcc

翻了这么深的目录,差点忘记本节的目的什么了,提醒一下,我们要找NRF5_SDK用的是什么工程管理工具,好了看到Makefile了吧,很明显是用的gnu make,blinky_gcc_nrf52.ld是链接脚本文件,将来编译的时候链接用的,_build目录可以假装没看到

这么深的目录结构显然不是我们想要的,再简化一下吧

这个就是blinky目录最终的样子了,等等,sdk_config.h是哪里来,跳到上上个图片(抱歉,没有图编号)有个config目录,sdk_config.h头文件就在里边,一看就跟SDK配置相关,暂时先不管它,它不是本文的关键。

五、倒数第二节

工程目录简化完了,我们也知道要用gnu make管理工程了

那么不如

make一下

虽然我们知道极有可能编译不过,但是我们还是要试试,因为一直改来改去太枯燥了,我们要让机器做点事情了。

神奇的事情发生了,编译通过了,真的难以置信

难以置信就对了,编译成功是因为我的Makefile改过了

现实是这样的

看到了吗,目录不对

我们打开Makefile一点一点分析

PROJECT_NAME:= blinky_pca10040TARGETS:= nrf52832_xxaaOUTPUT_DIRECTORY := _buildSDK_ROOT := ../../../../../..PROJ_DIR := ../../..$(OUTPUT_DIRECTORY)/nrf52832_xxaa.out: LINKER_SCRIPT := blinky_gcc_nrf52.ld

前三行分别定义了工程名、目标文件名、输出文件目录

重点是下边两个变量,SDK_ROOT显然是../,PROJ_ROOT为./

最后指定了链接脚本文件

改完之后再编译一次

失败,找不到编译器,显然是Makefile指定了编译器目录,然后找不到了

讲了半天的搭建开发环境,编译器都没装,失败

nRF52832是arm cortex-m4f内核的,所以我们要安装arm-none-eabi-gcc

下载地址:

GNU Toolchain | GNU-RM Downloads – Arm Developer​

下载后解压到那里随便你

前面说道Makefile指定了编译器的,让我们看看到底是在哪里指定的

打开Makefile,好了不卖关子了,剧透一下,这个Makefile是找不到的,那怎么办

TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gccinclude $(TEMPLATE_PATH)/mon

在130行左右可以看到有个include,显然它包含了mon这个Makefile,当前Makefile找不到的当然去include的Makefile里边去找,顺着路径找到mon

# Toolchain commandsCC:= $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-gcc)CXX:= $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-c++)AS:= $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-as)AR:= $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-ar) -rLD:= $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-ld)NM:= $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-nm)OBJDUMP := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-objdump)OBJCOPY := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-objcopy)SIZE := $(call quote,$(GNU_INSTALL_ROOT)$(GNU_PREFIX)-size)

可以看到,在119行指定了编译器,但是GNU_INSTALL_ROOT,GNU_PREFIX这两个变量的值我们依然不知道,前面说过了,当前文件找不到的就去包含的(或者被包含的)Makefile找

PLATFORM_SUFFIX := $(if $(filter Windows%,$(OS)),windows,posix)TOOLCHAIN_CONFIG_FILE := $(TEMPLATE_PATH)/Makefile.$(PLATFORM_SUFFIX)include $(TOOLCHAIN_CONFIG_FILE)

在112行又包含了一个Makefile,这个文件叫做TOOLCHAIN_CONFIG_FILE,它的值是$(TEMPLATE_PATH)/Makefile.$(PLATFORM_SUFFIX)

上面我们已經知道TEMPLATE_PATH就是现在的目录,因为我们是顺着它找过来的,

那么我么再看PLATFORM_SUFFIX这个变量,什么意思呢,就是检测当前平台是windows还是posix,可以了解一下什么是posix,我使用的是ubuntu,所以这个文件就是本目录下的Makefile.posix

GNU_INSTALL_ROOT ?= /usr/local/gcc-arm-none-eabi-6--q2-update/bin/GNU_VERSION ?= 6.3.1GNU_PREFIX ?= arm-none-eabi

这里指定了编译器的目录以及版本,这个需要根据你自己的安装目录和编译器版本去修改

GNU_INSTALL_ROOT ?= /usr/gcc-arm-none-eabi/bin/GNU_VERSION ?= 8.2.1GNU_PREFIX ?= arm-none-eabi

我安装在了/usr/gcc-arm-none-eabi/目录,版本是8.2.1

改完之后回到blinky目录,make一下,可以看到终于编译成功了,那么程序能不能用呢

六、最后一节

怎么烧写程序呢,总不能回到windows系统烧写吧,那岂不是太讽刺了

很简单Makefile里边就有烧写程序的target

# Flash the programflash: default@echo Flashing: $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hexnrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52832_xxaa.hex --sectorerasenrfjprog -f nrf52 --reseterase:nrfjprog -f nrf52 --eraseall

有两个target,flash就是烧写程序,erase就是擦除flash,可以看到,这两个target都是调用nrfjprog实现的,所以一定要安装nrfjprog

下载页地址:

nRF5 Command Line Tools - Downloads​

解压,然后设置环境变量

然后连接好硬件,执行make flash就可以把led闪烁程序下载到开发板了

由于引脚选择的原因,可能你的开发板并不会看到led闪烁

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。