您的位置 首页 发布

在Mac上做嵌入式开发,真的如此简略

目前嵌入式开发平台按照性能可以分为两类,一种是CPU只有数十兆的单片机,一种是比较高级的可以跑Linux甚至Android的嵌入式平台(其实iPhone、Android手机都属于嵌入式产品)。

前语

现在嵌入式开发渠道依照功能能够分为两类,一种是CPU只要数十兆的单片机,一种是比较高档的能够跑Linux乃至Android的嵌入式渠道(其实iPhone、Android手机都归于嵌入式产品)。

后者一般根据Linux/unix操作体系做穿插编译,可是前者往往更多的是在Keil上做开发,但由于自己个人联系,比较不喜欢Keil界面,所以一般在做嵌入式开发的时分,都会优先考虑是否有Linux/unix类的SDK(指包含编译东西)。但好像Mac OSX上做嵌入式开发的人员较稀疏,hum…因而材料也会相对较少。

本文所举比如,是千千万万种嵌入式芯片的一种,并不具有普遍性,但读完本文应该也会让你略有收成。

体系环境

操作体系: OS X EI Capitan (10.11.5)

硬件渠道: nRF51822 (Nordic BLE 芯片)开发板

什么是嵌入式开发 ?

根据嵌入式渠道所进行的底层开发,咱们称之为“嵌入式开发”。

那么现在传说中的程序猿,哪些猿类是归于嵌入式开发的呢?

举个列子:尽管手机归于嵌入式设备,但现在人数很多的APP开发者不归于嵌入式开发,而是归于使用开发人员(由于他们都是根据手机操作体系进行编程的)。但手机厂家中那些开发手机底层驱动和底层使用的人员则归于嵌入式开发。

现在,因近几年移动互联网的大力发展,使得 Web猿 和 APP猿 族群最为巨大。

什么是穿插编译?

简略来说,在C言语(包含但不限于)编译进程中会分为四个阶段: 预处理 -> 编译 -> 汇编 -> 链接

可是在以上进程中,需求占用“很多资源”,在嵌入式设备(嵌入式设备的规划要诀之一便是能省则省)中并不具有该资源(如编译器、足够快的CPU、内存等),所以需求凭借咱们的PC渠道进行编译。这种在一种渠道编译,另一种渠道运转的编译,咱们称之为穿插编译。

程序是怎样被发明的?

在程序被发明到用户手上的进程中,除了体系供给的APIs,程序员需求三种必不可少东西:

输入东西:代码编辑器,如 Vim,Notepad++、Sublime

编译东西:编译器,能够将人类所写的代码转化为机器能懂的二进制文件,如 GCC、Clang、Javac

测验东西:程序所运转的环境,如iPhone、Android、PC(Linux、Mac、Windows)

集成了以上前两项东西的东西,咱们称之为IDE,如Xcode、Visual Studio 、Eclipse、Keil。

nRF51822开发东西

假如你想要跟从本文一同试验,首要,你需%&&&&&%入一块nRF51822开发板,像这样的:

本文首要介绍Mac上的软件开发东西,在nRF51822开发进程中,软件咱们需求SDK、编译器以及J-Link驱动软件:

nRF5-SDK:SDK由厂商供给,点击进入官方网站后,挑选现在最新的11.0.0版别进行下载:

编译器:下载好官方SDK后,翻开SDK中的Makefile.posix文件,能够看到该版别SDK所用的gcc编译器版别。

进入到gcc-arm官网后,挑选相对应版别的编译器下载(相对于Linux和Windows的下载量,Mac版别好惨白… =_=)

J-Link驱动:nRF51822选用 J-Link进行程序下载,所以咱们需求下载Mac版的J-Link驱动。

nRF51822环境建立及测验

装置编译器

将下载好的编译东西链解压到 /usr/local 目录下:

sudo tar -jxvf gcc-arm-none-eabi-4_9-2015q1-20150306-mac.tar.bz2 /usr/local/
履行后检查是否成功:

编译比如

进入到下载好的SDK中,找一个比如,如:

cd $(nRF_51SDK)/examples/ble_peripheral/ble_app_beacon/pca10028/s130/armgcc
make all

编译完结后,会生成相对应的bin文件:

下载固件至开发板

J-Link办法写入

在装置完J-Link_for_mac版东西后,咱们能够看到体系中已经有了以下指令行东西:

使用指令行进入J-Link供给的shell中:

JLinkExe -device nrf51822_xxaa -if swd -speed 4000

-device 指定了芯片类型,J-Link支撑的开发板类型可在jlink_supported_devices查询。

输入烧录指令:

J-Link >loadbin s130_nrf51_2.0.0_softdevice.hex 0
J-Link>loadbin nrf51422_xxac_s130.hex 0x1B000
J-Link>r
J-Link>go

loadbin是烧录的指令,*.hex是烧录的固件,0x1B000是烧录地址。r是reset,go是发动。

当flash呈现错误时,咱们需求擦除falsh,此刻咱们要用Magic办法,别离往两个地址中写入1和2:

J-Link>w4 4001e504 2
J-Link>w4 4001e50c 1

能够在Makefile.posix中增加如下指令,让编译完结后主动烧录:

GNU_INSTALL_ROOT := /usr/local/gcc-arm-none-eabi-4_8-2014q2
GNU_VERSION := 4.8.3
GNU_PREFIX := arm-none-eabi
GDB_PORT_NUMBER := 9992
FLASH_START_ADDR = $(shell $(OBJDUMP) -h \

$(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out -j .text | grep .text | awk {print $$4})

JLINK_OPTS = -device nrf51822 -if swd -speed 4000

JLINK_GDB_OPTS = -noir

JLINK = JLinkExe $(JLINK_OPTS)

JLINKD_GDB = JLinkGDBServer $(JLINK_GDB_OPTS)

flash-jlink: flash.jlink

$(JLINK) flash.jlink

flash.jlink:

printf loadbin $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin $(FLASH_START_ADDR)\nr\ng\nexit\n > flash.jlink

erase-all: erase-all.jlink

$(JLINK) erase-all.jlink

erase-all.jlink:

# Write to NVMC to enable erase, do erase all, wait for completion. reset

printf w4 4001e504 2\nw4 4001e50c 1\nsleep 100\nr\nexit\n > erase-all.jlink

run-debug:

$(JLINKD_GDB) $(JLINK_OPTS) $(JLINK_GDB_OPTS) -port $(GDB_PORT_NUMBER)

.PHONY: flash-jlink flash.jlink erase-all erase-all.jlink run-debug

使用官方供给的指令行东西

在 官方固件下载列表中供给了指令行东西:nrfjprog and mergehex。

其间nrfjprog用于烧录程序,mergehex用于兼并hex文件。装置好nrfjprog和mergehex东西后,咱们只需求在上述的工程目录下,输入:

make flash #烧录使用程序

make flash_softdevice #烧录体系内核

即可完结固件的烧写。

至此,nRF51822 在Mac中的开发环境建立结束。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/199910.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部