如何在Mac上做嵌入式開發(fā)?

Mr.C/文

生于憂患眉反,死于安樂。

前言


目前嵌入式開發(fā)平臺按照性能可以分為兩類穆役,一種是CPU只有數(shù)十兆的單片機寸五,一種是比較高級的可以跑Linux甚至Android的嵌入式平臺(其實iPhone、Android手機都屬于嵌入式產(chǎn)品)耿币。
后者一般基于Linux/unix操作系統(tǒng)做交叉編譯,但是前者往往更多的是在Keil上做開發(fā)梳杏,但由于本人個人關系,比較不喜歡Keil界面,所以一般在做嵌入式開發(fā)的時候十性,都會優(yōu)先考慮是否有Linux/unix類的SDK(指包含編譯工具)叛溢。但似乎Mac OSX上做嵌入式開發(fā)的人員較稀少,hum...因此資料也會相對較少劲适。
本文所舉例子楷掉,是千千萬萬種嵌入式芯片的一種,并不具備普遍性减响,但讀完本文應該也會讓你略有收獲靖诗。

系統(tǒng)環(huán)境

  • 操作系統(tǒng): OS X EI Capitan (10.11.5)
  • 硬件平臺: nRF51822 (Nordic BLE 芯片)開發(fā)板

什么是嵌入式開發(fā) 郭怪?

基于嵌入式平臺所進行的底層開發(fā)支示,我們稱之為“嵌入式開發(fā)”

那么現(xiàn)在傳說中的程序猿鄙才,哪些猿類是屬于嵌入式開發(fā)的呢颂鸿?

舉個列子:雖然手機屬于嵌入式設備,但目前人數(shù)眾多的APP開發(fā)者不屬于嵌入式開發(fā)攒庵,而是屬于應用開發(fā)人員(因為他們都是基于手機操作系統(tǒng)進行編程的)嘴纺。但手機廠家中那些開發(fā)手機底層驅動和底層應用的人員則屬于嵌入式開發(fā)。
目前浓冒,因近幾年移動互聯(lián)網(wǎng)的大力發(fā)展栽渴,使得 Web猿 和 APP猿 族群最為龐大。

什么是交叉編譯稳懒?

簡單來說闲擦,在C語言(包括但不限于)編譯過程中會分為四個階段:** 預處理 -> 編譯 -> 匯編 -> 鏈接 **

但是在以上過程中,需要占用“大量資源”场梆,在嵌入式設備(嵌入式設備的設計要訣之一就是能省則适洹)中并不具備該資源(如編譯器、足夠快的CPU或油、內存等)寞忿,所以需要借助我們的PC平臺進行編譯。這種在一種平臺編譯顶岸,另一種平臺運行的編譯腔彰,我們稱之為交叉編譯

程序是怎樣被創(chuàng)造的辖佣?

在程序被創(chuàng)造到用戶手上的過程中霹抛,除了系統(tǒng)提供的APIs,程序員需要三種必不可少工具:

  • 輸入工具:代碼編輯器凌简,如 Vim上炎,Notepad++、Sublime
  • 編譯工具:編譯器,可以將人類所寫的代碼轉化為機器能懂的二進制文件藕施,如 GCC寇损、Clang、Javac
  • 測試工具:程序所運行的環(huán)境裳食,如iPhone矛市、Android、PC(Linux诲祸、Mac浊吏、Windows)

集成了以上前兩項工具的工具,我們稱之為IDE救氯,如Xcode找田、Visual Studio 、Eclipse着憨、Keil墩衙。


nRF51822開發(fā)工具

如果你想要跟隨本文一起實驗,首先甲抖,你需要購入一塊nRF51822開發(fā)板漆改,像這樣的:


本文主要介紹Mac上的軟件開發(fā)工具,在nRF51822開發(fā)過程中准谚,軟件我們需要SDK挫剑、編譯器以及J-Link驅動軟件:

  • nRF5-SDK:SDK由廠商提供,點擊進入官方網(wǎng)站后柱衔,選擇目前最新的11.0.0版本進行下載:
  • 編譯器:下載好官方SDK后樊破,打開SDK中的Makefile.posix文件,可以看到該版本SDK所用的gcc編譯器版本秀存。

    進入到gcc-arm官網(wǎng)后捶码,選擇相對應版本的編譯器下載(相對于Linux和Windows的下載量,Mac版本好慘淡... =_=)

    J-Link驅動:nRF51822采用 J-Link進行程序下載或链,所以我們需要下載Mac版的J-Link驅動惫恼。

nRF51822環(huán)境搭建及測試

** 安裝編譯器**
將下載好的編譯工具鏈解壓到 /usr/local 目錄下:

  sudo tar -jxvf gcc-arm-none-eabi-4_9-2015q1-20150306-mac.tar.bz2 /usr/local/

執(zhí)行后查看是否成功:


編譯例子
進入到下載好的SDK中,找一個例子澳盐,如:

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

編譯完成后祈纯,會生成相對應的bin文件:

下載固件至開發(fā)板

  • J-Link方式寫入

在安裝完J-Link_for_mac版工具后,我們可以看到系統(tǒng)中已經(jīng)有了以下命令行工具:


利用命令行進入J-Link提供的shell中:

JLinkExe -device nrf51822_xxaa -if swd -speed 4000

-device 指定了芯片類型叼耙,J-Link支持的開發(fā)板類型可在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出現(xiàn)錯誤時入蛆,我們需要擦除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 #燒錄系統(tǒng)內核

即可完成固件的燒寫话浇。

至此脏毯,nRF51822 在Mac中的開發(fā)環(huán)境搭建完畢。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末凳枝,一起剝皮案震驚了整個濱河市抄沮,隨后出現(xiàn)的幾起案子跋核,更是在濱河造成了極大的恐慌岖瑰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂代,死亡現(xiàn)場離奇詭異蹋订,居然都是意外死亡,警方通過查閱死者的電腦和手機刻伊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門露戒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捶箱,你說我怎么就攤上這事智什。” “怎么了丁屎?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵荠锭,是天一觀的道長。 經(jīng)常有香客問我晨川,道長证九,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任共虑,我火速辦了婚禮愧怜,結果婚禮上,老公的妹妹穿的比我還像新娘妈拌。我一直安慰自己拥坛,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猜惋,像睡著了一般疾党。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惨奕,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天雪位,我揣著相機與錄音,去河邊找鬼梨撞。 笑死雹洗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的卧波。 我是一名探鬼主播时肿,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼港粱!你這毒婦竟也來了螃成?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤查坪,失蹤者是張志新(化名)和其女友劉穎寸宏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偿曙,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡氮凝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了望忆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罩阵。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖启摄,靈堂內的尸體忽然破棺而出稿壁,到底是詐尸還是另有隱情,我是刑警寧澤歉备,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布傅是,位于F島的核電站,受9級特大地震影響威创,放射性物質發(fā)生泄漏落午。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一肚豺、第九天 我趴在偏房一處隱蔽的房頂上張望溃斋。 院中可真熱鬧,春花似錦吸申、人聲如沸梗劫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梳侨。三九已至蛉威,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間走哺,已是汗流浹背蚯嫌。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丙躏,地道東北人择示。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像晒旅,于是被迫代替她去往敵國和親栅盲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內容