cmake 版本 arm_nRF52832开发丶开发环境搭建(ubuntu 18.04+arm-none-eabi-gcc)
![](/assets/blank.gif)
一、SDK下载
下载页地址:
https://www.nordicsemi.com/Software-and-Tools/Software/nRF5-SDKwww.nordicsemi.com
![](/assets/blank.gif)
点击右边那个图标就可以下载了,不过这个链接有点慢,往下拉
![](/assets/blank.gif)
点击"Compatibale downloads"选项卡,再往下拉
![](/assets/blank.gif)
这里把其他三个softdevice勾掉只留下sdk,点击下载,这个下载是比较快的。
二、SDK目录结构
![](/assets/blank.gif)
解压后就是这个样子,关于目录说明,没有,因为我还没完全搞明白
三、创建工程目录
想要学会创建一个工程,最快速的方法就是找个例子复制过来
这里我们要找单片机编程的hello world——led闪烁
examples目录下有很多例子
![](/assets/blank.gif)
关于这些目录是啥意思,抱歉我还没搞明白,但是peripheral这个目录显然是外设相关的例子,我们要的led闪烁例程很有可能会在这里
![](/assets/blank.gif)
打开一看果然在这里,有四个blinky目录,选哪个呢,老规矩,三长选一短,就选blinky目录
先不管blinky目录里边有什么,先把它复制到我们喜欢的地方,比如说SDK根目录,因为以后命令行操作会很方便
复制完之后,SDK根目录就是这个样子
![](/assets/blank.gif)
以后呢SDK目录就可以作为我们的项目根目录来使用了
四、工程管理
工程目录创建完了,那么如何管理我们的工程呢
GNU/Linux系统中有很多项目管理工具,比如gnu make、cmake、qmake等等,那么NRF5_SDK用什么管理工程呢
打开blinky目录
![](/assets/blank.gif)
只有一堆目录、main.c源码文件,还有一个blinky.eww,这个一看就是IAR的工程文件,显然不是我们想要的,hex目录里边是一堆编译好的二进制文件,跟工程管理也没有什么关系,剩下的四个目录长得好像,这里我们打开第pca10040(不用想了,这个就是right one,四个目录代表不同的开发板,开发板MCU不同)
![](/assets/blank.gif)
又有三个目录(SDK目录这么深,不简化一下,命令行操作起来肯定会累死),mbr和s132目录还不清楚是什么东西,只剩下一个blank目录了,“空”没准就是干干净净的led闪烁程序了
![](/assets/blank.gif)
打开一看又是一堆目录,真是怕了你了,耐心分析一下,很明显每个目录代表不同的编译器,这里我们选择armgcc也就是arm-none-eabi-gcc
![](/assets/blank.gif)
翻了这么深的目录,差点忘记本节的目的什么了,提醒一下,我们要找NRF5_SDK用的是什么工程管理工具,好了看到Makefile了吧,很明显是用的gnu make,blinky_gcc_nrf52.ld是链接脚本文件,将来编译的时候链接用的,_build目录可以假装没看到
这么深的目录结构显然不是我们想要的,再简化一下吧
![](/assets/blank.gif)
这个就是blinky目录最终的样子了,等等,sdk_config.h是哪里来,跳到上上个图片(抱歉,没有图编号)有个config目录,sdk_config.h头文件就在里边,一看就跟SDK配置相关,暂时先不管它,它不是本文的关键。
五、倒数第二节
工程目录简化完了,我们也知道要用gnu make管理工程了
那么不如
make一下
虽然我们知道极有可能编译不过,但是我们还是要试试,因为一直改来改去太枯燥了,我们要让机器做点事情了。
![](/assets/blank.gif)
神奇的事情发生了,编译通过了,真的难以置信
难以置信就对了,编译成功是因为我的Makefile改过了
现实是这样的
![](/assets/blank.gif)
看到了吗,目录不对
我们打开Makefile一点一点分析
PROJECT_NAME := blinky_pca10040
TARGETS := nrf52832_xxaa
OUTPUT_DIRECTORY := _buildSDK_ROOT := ../../../../../..
PROJ_DIR := ../../..$(OUTPUT_DIRECTORY)/nrf52832_xxaa.out: LINKER_SCRIPT := blinky_gcc_nrf52.ld
前三行分别定义了工程名、目标文件名、输出文件目录
重点是下边两个变量,SDK_ROOT显然是../,PROJ_ROOT为./
最后指定了链接脚本文件
改完之后再编译一次
![](/assets/blank.gif)
失败,找不到编译器,显然是Makefile指定了编译器目录,然后找不到了
讲了半天的搭建开发环境,编译器都没装,失败
nRF52832是arm cortex-m4f内核的,所以我们要安装arm-none-eabi-gcc
下载地址:
GNU Toolchain | GNU-RM Downloads – Arm Developerdeveloper.arm.com
下载后解压到那里随便你
前面说道Makefile指定了编译器的,让我们看看到底是在哪里指定的
打开Makefile,好了不卖关子了,剧透一下,这个Makefile是找不到的,那怎么办
TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc
include $(TEMPLATE_PATH)/Makefile.common
在130行左右可以看到有个include,显然它包含了Makefile.common这个Makefile,当前Makefile找不到的当然去include的Makefile里边去找,顺着路径找到Makefile.common
# Toolchain commands
CC := $(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) -r
LD := $(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-2017-q2-update/bin/
GNU_VERSION ?= 6.3.1
GNU_PREFIX ?= arm-none-eabi
这里指定了编译器的目录以及版本,这个需要根据你自己的安装目录和编译器版本去修改
GNU_INSTALL_ROOT ?= /usr/gcc-arm-none-eabi/bin/
GNU_VERSION ?= 8.2.1
GNU_PREFIX ?= arm-none-eabi
我安装在了/usr/gcc-arm-none-eabi/目录,版本是8.2.1
![](/assets/blank.gif)
改完之后回到blinky目录,make一下,可以看到终于编译成功了,那么程序能不能用呢
六、最后一节
怎么烧写程序呢,总不能回到windows系统烧写吧,那岂不是太讽刺了
很简单Makefile里边就有烧写程序的target
# Flash the program
flash: 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 - Downloadswww.nordicsemi.com
![](/assets/blank.gif)
解压,然后设置环境变量
然后连接好硬件,执行make flash就可以把led闪烁程序下载到开发板了
![](/assets/blank.gif)
由于引脚选择的原因,可能你的开发板并不会看到led闪烁
![](/assets/blank.gif)
cmake 版本 arm_nRF52832开发丶开发环境搭建(ubuntu 18.04+arm-none-eabi-gcc)相关推荐
- 【Android RTMP】RTMP 直播推流服务器搭建 ( Ubuntu 18.04.4 虚拟机 )
文章目录 安卓直播推流专栏博客总结 一. Android RTMP 直播推流简介 二. Nginx.RTMP Module 编译环境源码准备 三. pcre.OpenSSL.zlib 函数库安装 四. ...
- Ubuntu LNMPR环境搭建(Ubuntu 20.04 + Nginx1.8 + PHP 7.3 + Mysql8.0 + Redis5.0)
本文环境 Windows10,Ubuntu 20.04,Nginx1.8,PHP 7.3,Mysql8.0,Redis5.0\ 不懂的可以评论或联系我邮箱:owen@owenzhang.com\ 著作 ...
- Linux:xinetd服务安装与配置(操作环境:Ubuntu 18.04)
xinetd服务简介: xinetd是一个守护进程,属于系统中的一个后台进程,周期性的执行某些任务,或者等待某个事件发生.不会随着用户的注销而退出. 支持对tcp.udp.RPC服务(但是当前对RPC ...
- Ubuntu 18.04.1 搭建Java环境和HelloWorld
一.搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technet... 选择相应的 ...
- Ubuntu 18.04.1 搭建Java环境和HelloWorld 1
一.搭建Java环境 系统环境 Ubuntu 18.04.1 JDK 8 IDEA 2018.2 1.下载JDK 官网地址:http://www.oracle.com/technetwork/java ...
- linux看测试环境版本,最新版 EOS 在 Ubuntu 18.04.1 LTS 环境上的安装测试教程
EOS主网上线后,本地的开发环境一直没有升级.最近要启动新项目了,所以借着这个计划,彻底重新安装一下环境. 环境安装和配置的文章,已经很多了,但基本都是针对前期版本的.这里我把新旧版本的不同之处,罗列 ...
- linux笔记本装载 戴尔,第七代戴尔XPS 13开发版笔记本电脑装载Ubuntu 18.04系统
据可靠消息称开发Ubuntu桌面工程总监Will Cooke表示旗下Ubuntu 18.04 LTS系统将被装载在第七代戴尔XPS 13开发版笔记本电脑中,该款笔记本电脑起步价为1049.99美元.同 ...
- Ubuntu 20.04安装Ros Noetic及Ubuntu 18.04安装ROS Melodic(两版本详细填坑)
Ubuntu 20.04安装Ros Noetic及18.04安装ROS Melodic 表1-1 ROS的历史版本 1. 设置安装源 2. 添加秘钥 3. 更新列表 4. 开始安装 5. 配置ROS环 ...
- Ubuntu 18.04 安装 nginx 并搭建一个简单的网站
目录 一.安装 nginx 二.设置 nginx 服务器模块 三.总结 四.参考资料 尽你所学(采用 html.或 CSS.或 Javascript 等)完成一个静态网页,比如制作一个简单的个人介绍网 ...
- Ubuntu 18.04 下搭建 C/C++编译开发环境及GCC多版本切换
关注公众号 风色年代(itfantasycc) 领 500G Java 微服务 开发资料 Ubuntu 18.04 下搭建 C/C++编译开发环境及GCC多版本切换_Linux教程_Linux公社-L ...
最新文章
- t6文件服务器怎么设置,t6 修改文件服务器地址
- python 插值_三次样条插值在Python中的实现
- 【运筹学】表上作业法 ( 闭回路示例 )
- bzoj4817: [Sdoi2017]树点涂色
- 字符设备驱动基础篇3——字符设备驱动工作原理
- mysql ddl log 源码_MySQL中ddl_log.log初步认识
- Leetcode每日一题:649.dota2-senate(Dota2参议院)
- [Android]Notification汇总
- CMU 15-213 Introduction to Computer Systems学习笔记(7) Machine-Level Programming-Data
- layui表格点击复制到剪切板
- 安装计算机的显卡出现问题,电脑显卡驱动安装失败如何解决
- java标签outer,java outer
- 【福大/计院】转专业
- Direct2D编程入门
- 我的物联网项目(三十一) 分销模式电商平台
- Vue - 本地上传 Excel 文件页面表格预览(配合 ElementUI / 带分页)
- Short-term load forecasting with an improved dynamic decomposition-reconstruction-ensemble approach
- 无法启动计算机打印机服务程序,安装驱动程序时电脑弹出错误窗口“无法启动Windows打印后台程序服务” (适用于Windows OS)...
- ip5108 c语言程序,IP5109,IP5108,IP5206,IP5105 移动电源5合一芯片介绍.pdf
- STM32Fx+cubeMX+硬件IIC+INA219(同一个I2C挂载两个芯片)