說一下剛學習uCOS的心得1)首先強調一下實時操作系統(RTOS)的特點,最明顯的是提供及時響應和高可靠性2)基於實施操作系統的應用程式設計中,其中很重要的一個概念是"任務",任務設計也就是任務函數的設計是整個整 個應用程式的基礎,其他軟體設計工作都是圍繞來展開的3)用戶任務函數中,必須包含至少一次 ...
說一下剛學習uCOS的心得
1)首先強調一下實時操作系統(RTOS)的特點,最明顯的是提供及時響應和高可靠性
2)基於實施操作系統的應用程式設計中,其中很重要的一個概念是"任務",任務設計也就是任務函數的設計是整個整
個應用程式的基礎,其他軟體設計工作都是圍繞來展開的
3)用戶任務函數中,必須包含至少一次的系統服務函數(一般是等待類的函數以便其他函數有機會得以運行),否則優
先級更低的任務將無法得到運行的機會,中斷服務程式不能調用該類函數即一些等待函數,防止中斷服務程式被打斷
4)任務函數分為三類:
單次執行,即執行一次就退出的任務。
周期性執行,即到一定時間就執行的任務,當沒到時間時該任務休眠,以便CPU去執行其他的任務。
事件觸發執行,即當特定的事件發生時就執行任務,當沒有對應的事件發生時,該任務會休眠,CPU可以去執行其他任
務。
5)使用ucos-II時,要註意在Main函數中,加入兩個初始化函數:OSInit(),OSStart()。OSInit()初始化ucosII中內部
變數,OSStart()函數啟動多任務環境
6)OSTaskCreateExt,創建一個任務,第一個參數為函數指針,即創建好後,就執行該函數指針指向的函數體:
INT8U OSTaskCreateExt (void (*task)(void *pd), //建立擴展任務(任務代碼指針,函數指針)
void *pdata, //傳遞參數指針
OS_STK *ptos, //分配任務堆棧棧頂指針
INT8U prio, //分配任務優先順序
INT16U id, //(未來的)優先順序標識(與優先順序相同)
OS_STK *pbos, //分配任務堆棧棧底指針
INT32U stk_size, //指定堆棧的容量(檢驗用)
void *pext, //指向用戶附加的數據域的指針
INT16U opt) //建立任務設定選項
例:OSTaskCreateExt(TaskRxProc,
NULL,
&TaskStkRxProc[128 - 1],
3,
3,
TaskStkRxProc,
TASK_STK_LEN_RX_PROC,
NULL,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);//Enable stack checking for the task|Clearthe stack when the task is create
其他相關的系統函數後續再講訴
7)操作系統中的共用區也就是臨界區,各個任務訪問必須互斥,保證互斥的常見方法主要有:
第一,進入然後就退出臨界區,第二,使用信號量與互斥信號量
另外,註意處理臨界段代碼需要禁止中斷,處理完畢再允許中斷,避免其他任務或者中斷服務同時進入臨界區
uCOS提供了兩個巨集來實現,其中
OS_ENTER_CRITICAL()進入臨界區,禁止中斷
OS_EXIT_CRITICAL() 退出臨界區,允許中斷
8)除了互斥外,資源同步也就是任務間的通信,主要的(同步)方式有:
信號量,事件標誌組,消息郵箱,消息隊列這幾種方法
具體後續再介紹