TI 系列的藍(lán)牙芯片在協(xié)議棧支持上比較完善,最近使用CC254x系列BLE芯片,發(fā)現(xiàn)其協(xié)議棧的實(shí)現(xiàn)挺有意思,這里做點(diǎn)簡(jiǎn)單分析。 1.協(xié)議棧結(jié)構(gòu) CC2540 集成了增強(qiáng)型的 8051 內(nèi)核, TI 為 BLE 協(xié)議棧搭建了一個(gè)簡(jiǎn)單的操作系統(tǒng)OSAL,即一種任務(wù)輪詢機(jī)制。幫你做好了底層和藍(lán)牙協(xié)議深層的內(nèi)容,將復(fù)雜部分屏蔽掉。讓用戶通過(guò) API 函數(shù)就可以輕易用藍(lán)牙 4.0,是開發(fā)起來(lái)更加方便,開發(fā)周期也可以相應(yīng)縮短。 安裝完 BLE 協(xié)議棧之后,會(huì)在安裝目錄下看到以下文件結(jié)構(gòu): 其中,Accessories存放附件,如:USB驅(qū)動(dòng)和hex文件。Components即為OSAL操作系統(tǒng)的底層實(shí)現(xiàn),里面包括OSAL的各層具體實(shí)現(xiàn)。 Documents為協(xié)議棧相關(guān)說(shuō)明文檔,Projects為官方提供的demos,很多demo都是可以直接修改使用的,其中重點(diǎn)關(guān)心四個(gè)demo: SimpleBLEBroadcaster、SimpleBLECentral、SimpleBLEObserver、SimpleBLEPeripheral。 2.協(xié)議棧OSAL原理分析 協(xié)議棧中所謂的OSAL就是一個(gè)小型的操作系統(tǒng),實(shí)現(xiàn)了最基本的任務(wù)輪詢。 直接從main函數(shù)開始解剖: 主函數(shù)一進(jìn)去就是各種系統(tǒng)初始化:包括硬件、GATT、 GAP 層、任務(wù)等的初始化。然后執(zhí)行 osal_start_system();操作系統(tǒng)。我們重點(diǎn)關(guān)心2 個(gè)函數(shù):初始化操作系統(tǒng) osal_init_system(); 運(yùn)行操作系統(tǒng) osal_start_system(); 我們先來(lái)看 osal_init_system();系統(tǒng)初始化函數(shù),進(jìn)入函數(shù)。發(fā)現(xiàn)里面有 6個(gè)初始化函數(shù),這里我們只關(guān)心osalInitTasks();任務(wù)初始化函數(shù)。繼續(xù)由該函數(shù)進(jìn)入,進(jìn)入后發(fā)現(xiàn)終于看到各層任務(wù)的添加,taskID 依次遞增表示優(yōu)先級(jí)降低,即越底層優(yōu)先級(jí)越高(LL、HAL、HCI、L2CAP、GAP、GATT、SM、Profiles、Application) 最高層即應(yīng)用層優(yōu)先級(jí)最低,最后執(zhí)行應(yīng)用層的任務(wù)初始化。
我們?cè)賮?lái)看第二個(gè)函數(shù) osal_start_system();運(yùn)行操作系統(tǒng)。同樣用 go to definition 的方法進(jìn)入該函數(shù)。再進(jìn)入 osal_run_system() ,我們欣喜地發(fā)現(xiàn)這里就是任務(wù)輪詢的基本輪廓,源碼和分析如下: 可見協(xié)議棧就是一個(gè)被稱為OSAL的小型操作系統(tǒng),基本流程如下:
各種初始化---運(yùn)行操作系統(tǒng)---有任務(wù)觸發(fā)---執(zhí)行任務(wù) 以上只是對(duì)協(xié)議棧OSAL系統(tǒng)的簡(jiǎn)單分析,關(guān)于藍(lán)牙通信的API 部分后文再續(xù)。 |
|
來(lái)自: iamlijin > 《TI CC2540》