創建任務, OSTaskCreateExt()
stk_size 用於指定堆棧成員數目的容量。也就是說,若是堆棧的入口寬度爲 4 字節寬,那麼 stk_size 爲 10000 是指堆棧有 40000 個字節,意思就是數據的寬度*長度=堆棧的大小。函數
μC/OS-Ⅱ支持的處理器的堆棧既能夠從上(高地址)往下(低地址)長也能夠從下往上長
。用戶在調用 OSTaskCreate()或 OSTaskCreateExt()的時候必須知道
堆棧是怎樣長的,
當 OS_CPU.H 文件中的 OS_STK_GROWTH 置爲 1 時,用戶須要將堆棧的最高內存地址傳遞
給任務建立函數 - 通常默認爲1,咱們須要改成0,才能從堆棧的最低內存開始傳遞參數。spa
堆棧檢驗, OSTaskStkChk()隊列
爲了適應系統之後的升級和擴展,用戶應該多分配 10%-100%的堆棧空間內存
由於 μC/OS-Ⅱ不容許多個任務具備相同的優先級,因此 OSTaskChangePrio()須要檢驗新優
先級是不是合法的(即不存在具備新優先級的任務)消息隊列
有時候將任務掛起是頗有用的。掛起任務可經過調用 OSTaskSuspend()函數來完成。被
掛起的任務只能經過調用 OSTaskResume()函數來恢復。io
OSMboxPend(MboxTimeDly, TIMEOUT, &err); 用郵箱能夠實現互斥鎖的功能,也能夠實現延時的功能變量
消息隊列是一個循環的緩衝區,圓形的。若是此時消息隊列已滿,那麼該消息將因爲不能插入到消息隊列中而丟失。擴展
OSSemPend()和 OSMboxPend()函數同樣,不能在中斷服務子程序中調用 OSQPend(),由於中斷服務子程序是不能等待的。循環
互斥鎖和信號量不能在中斷裏使用,否則會影想任務的運行。對於初始化時胡一些系統變量,若是越界,會致使第一個優先級的任務沒法運行,由於地址重疊了。程序
若是定義多個互斥鎖,須要分爲不一樣的優先級,有的優先級不能使用,會致使內存越界,好比優先級5.