OSAL


1. CC254x的軟件基於OSAL架構

2. OSAL並非一個真的操作系統, 而只是讓軟件設立一個事件的執行方法(setup excution of events)

3. 每一個子系統都在OSAL的一個任務(task)執行並由一個獨立的task id.

4. task id越小, 優先級別越高

5. SimpleBLEPeripheral項目有12個任務: Link Layer, HAL, OSAL Callback Timer, L2CAP, GATT, GAP, SM, Peripheral Role Profile, GAP Bond Manager, GATT server, SimpleBLEPeripheral.

6. 每個任務由兩個函數(function): 初始化, 比如SimpleBLEPeripheral_Init(), 跟事件處理, 比如SimpleBLEPeripheral_ProcessEvent();

7. 每個應用程序都要包含一個void osalInitTask(void)函數

8. 這個函數會調用每個任務的初始化函數來初始化任務.

9. 每個應用程序都要使用一個叫tasksArr的數組, 包含每個任務處理函數的指針.

10. 數組的順序必須跟task ID的順序一致.

11. 應用程序還應該產生一個名為tasksEvents的全局變量, 用uint16來對應每一個發生的task event, 對應的位置1標示發生了特定的event

12. 一個OSAL event事件是一個將來執行的task的標志

13. 每一個OSAL任務可以定義多達15個event

14. 兩個方法設置event:

a: osal_set_event(), 立即設置一個event

b: osal_start_timeEX(), 安排若干時間(以ms為單位)后發生一個event, 可通過osal_stop_timeEX來取消.

15.看下面的圖就明白了, 每個task有15個標志位去標志每一個event是否發生.

 

主循環:

1. 當osal_system_start被執行后, OSAL會進入主循環

2. 在循環中, 會不斷檢查taskEvents數組是否有位被置1, 如果有不同的task被發現有event需要處理, 則先處理task id優先級高的.

3. OSAL會用event處理指針的方法去處理對應的event

4. 當event處理方法執行完, 應該講對應的event標示位置0, 不然這個方法會被重復執行.

5. 如果沒有任務需要執行, OSAL會進入省電模式(power saving mode), 但是內存依然有電, 而且計時器也在持續運行.

6. 當中斷發生時, 或者OSAL計數器定義的倒數時間到了, 處理器會被喚醒.

 

消息處理:

1. OSAL提供了消息處理機制來讓不同的子系統之間傳遞數據.

2. 消息可以是任意類型數據, 任意長度.

3. 發送消息的程序是:

a: 用osal_msg_allocate()分配內存

b: 將數據拷貝進內存

c: 使用osal_msg_send()指定目標任務

4. 任務利用SYS_EVENT_MSG標示來發現待處理的消息

5. simpleBLEPeripheral_ProcessOSALMsg()函數來處理消息.

6. 收到消息后要用osal_msg_deallocate()來釋放內存.

 

內存管理

1. OSAL API使用內存管理的函數是: osal_mem_alloc與osal_mem_free

2. 堆的尺寸在IAR的compiler里面設置

3. 如果堆尺寸設置得太高, CC2540可能會內存泄露.

4. 確認編譯完成后, map文件不能超過8KB限制.

 

 

文件與關鍵的API

1. 關鍵文件包括: osal.c, osal.h

2. 關鍵api是:

osal_init_system();

osal_start_system();

osal_set_event();

osal_start_timeEX();

osal_stop_timeEX();

osal_msg_allocate();

osal_msg_send();

osal_msg_deallocate();

osal_mem_alloc();

osal_mem_free)();

3. OsalInitTask()是用來設置任務ID的.

 

硬件抽象層(HAL)

硬件抽象層包括對ADC, UART, SPI, Flash, Timer, Key, LCD驅動的接口

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM