找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3674|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

nRF51822 SDK初體驗(yàn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51024 發(fā)表于 2014-8-16 23:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
作為兩家BLE芯片大廠之一,nordic不像TI那么開放,nordic的開發(fā)資料是很難找的。
今天有幸得到nordic的BLE芯片nRF51822的SDK,看了一下。

首先,nordic號(hào)稱協(xié)議棧(稱為SoftDevice)和應(yīng)用完全分開,是怎么實(shí)現(xiàn)的呢?
TI的協(xié)議棧以庫的形式提供,用戶應(yīng)用在鏈接時(shí)和庫鏈在一起形成最終的機(jī)器代碼,TI提供庫和頭文件供用戶使用。
nordic用了不同的方式:SoftDevice,這樣協(xié)議棧和用戶應(yīng)用可以單獨(dú)編譯和鏈接。實(shí)現(xiàn)BLE的SoftDevice似乎叫S110,由nordic提供。我猜nordic應(yīng)該只提供S110的機(jī)器碼,應(yīng)該不會(huì)提供源代碼。
看了nRF51 SDK,里面確實(shí)沒有BLE的庫,所有sd_打頭的函數(shù)都是SoftDevice相關(guān)的。比如:sd_ble_gap_adv_data_set
這個(gè)函數(shù)是這么定義的:
SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen));
這個(gè)SVCALL在使用MDK時(shí)是這么定義的:
#define SVCALL(number, return_type, signature) return_type __svc(number) signature
似乎是使用了Cortex-M0的SVC機(jī)制實(shí)現(xiàn)Softdevice。
(題外話,我在想Nordic會(huì)把自己的協(xié)議棧綁在一種CPU架構(gòu)上嗎?不是的,代碼里有一個(gè)開關(guān)SVCALL_AS_NORMAL_FUNCTION
可以讓上面的SVCALL宏定義變成普通的函數(shù)聲明。當(dāng)然在沒有
源代碼和庫的情況下打開這個(gè)開關(guān)會(huì)出現(xiàn)找不到函數(shù)實(shí)現(xiàn)的鏈接錯(cuò)誤)

總體來說我覺得softdevice就是nordic一種封閉協(xié)議棧核心代碼的方式,和TI提供庫文件的方式?jīng)]有區(qū)別。
nordic號(hào)稱自己的協(xié)議?梢耘浜掀渌腞TOS,但是如果RTOS也用了相同的SVC呢?
我不關(guān)心nordic或者TI的協(xié)議棧核心代碼實(shí)現(xiàn),就算給我源代碼我也懶得看,但是我覺得TI用庫提供協(xié)議棧的方式更直接和通用;nordic這種方式太取巧了,某些時(shí)候會(huì)給用戶帶來一些限制。
當(dāng)然51822還是有一些優(yōu)勢(shì)的,至少封裝比較小。

至于怎么在nRF51822上開發(fā)應(yīng)用我還沒來得及看,沒辦法和TI的架構(gòu)比較

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表