μC/OS-II 是一種基於優先權的搶占式多任務實時作業系統,包含了實時核心、任務管理、時間管理、任務間通信同步(信號量,信箱,訊息 佇列)和記憶體管理等功能。它可以使各個任務獨立工作,互不干涉,很容易實現準時而且無誤執行,使實時應用程式的設計和擴展變得容易,使應用程式的設計過程大為減化。
μC /OS-II是一個完整的、可移植、可固化、可裁剪的搶占式實時多任務核心。μC/OS-II絕大部分的代碼是用ANSII的C語言編寫的,包含一小部分彙編代碼,使之可供不同架構的微處理器使用。至今,從8位到64位,μC/OS-II已在超過40種不同架構上的微處理器上運行。μC/OS-II已經在世界範圍內得到廣泛套用,包括很多領域, 如手機、路由器、集線器、不間斷電源、飛行器、醫療設備及工業控制上。實際上,μC/OS-II已經通過了非常嚴格的測試,並且得到了美國航空管 理局(Federal Aviation Administration)的認證,可以用在飛行器上。這說明μC/OS-II是穩定可靠的,可用於與人性命攸關的安全緊要(safety critical)系統。除此以外,μC/OS-II 的鮮明特點就是源碼公開,便於移植和維護。
基本介紹
核心結構
特點
μC/OS-II API 介紹
實驗內容簡介
任務管理實驗
優先權反轉實驗
優先權繼承實驗
哲學家就餐實驗
記憶體管理實驗
時鐘中斷實驗
訊息佇列實驗
μC/OS-Ⅱ中的任務描述
配置手冊
本節介紹每個用#define constant定義的常量,介紹的順序和它們在OS_CFG.H中出現的順序是相同的。表12.1列出了常量控制的μC/OS-II函式。“類型”為函式所屬的類型,“置1”表示當定義常量為1時可以打開相應的函式,“其他常量”為與這個函式有關的其他控制常量。
注意編譯工程檔案時要包含OS_CFG.H,使定義的常量生效。
雜相
OSInit()無OS_MAX_EVENTS
OS_Q_EN and OS_MAX_QS
OS_MEM_EN
OS_TASK_IDLE_STK_SIZE
OS_TASK_STAT_EN
OS_TASK_STAT_STK_SIZE
OSSchedLock()無無
OSSchedUnlock()無無
OSStart()無無
OSStatInit()OS_TASK_STAT_EN &&
OS_TASK_CREATE_EXT_ENOS_TICKS_PER_SEC
OSVersion()無無
中斷處理
OSIntEnter()無無
OSIntExit()無無
訊息信箱
OSMboxAccept()OS_MBOX_EN無
OSMboxCreate()OS_MBOX_ENOS_MAX_EVENTS
OSMboxPend()OS_MBOX_EN無
OSMboxPost()OS_MBOX_EN無
OSMboxQuery()OS_MBOX_EN無
記憶體塊管理
OSMemCreate()OS_MEM_ENOS_MAX_MEM_PART
OSMemGet()OS_MEM_EN無
OSMemPut()OS_MEM_EN無
OSMemQuery()OS_MEM_EN無
訊息佇列
OSQAccept()OS_Q_EN無
OSQCreate()OS_Q_ENOS_MAX_EVENTS
OS_MAX_QS
OSQFlush()OS_Q_EN無
OSQPend()OS_Q_EN無
OSQPost()OS_Q_EN無
OSQPostFront()OS_Q_EN無
OSQQuery()OS_Q_EN無
信號量管理
OSSemAccept()OS_SEM_EN無
OSSemCreate()OS_SEM_ENOS_MAX_EVENTS
OSSemPend()OS_SEM_EN無
OSSemPost()OS_SEM_EN無
OSSemQuery()OS_SEM_EN無
任務管理
OSTaskChangePrio()OS_TASK_CHANGE_PRIO_ENOS_LOWEST_PRIO
OSTaskCreate()OS_TASK_CREATE_ENOS_MAX_TASKS
OS_LOWEST_PRIO
OSTaskCreateExt()OS_TASK_CREATE_EXT_ENOS_MAX_TASKS
OS_STK_GROWTH
OS_LOWEST_PRIO
OSTaskDel()OS_TASK_DEL_ENOS_LOWEST_PRIO
OSTaskDelReq()OS_TASK_DEL_ENOS_LOWEST_PRIO
OSTaskResume()OS_TASK_SUSPEND_ENOS_LOWEST_PRIO
OSTaskStkChk()OS_TASK_CREATE_EXT_ENOS_LOWEST_PRIO
OSTaskSuspend()OS_TASK_SUSPEND_ENOS_LOWEST_PRIO
OSTaskQuery()OS_LOWEST_PRIO
時鐘管理
OSTimeDly()無無
OSTimeDlyHMSM()無OS_TICKS_PER_SEC
OSTimeDlyResume()無OS_LOWEST_PRIO
OSTimeGet()無無
OSTimeSet()無無
OSTimeTick()無無
用戶定義函式
OSTaskCreateHook()OS_CPU_HOOKS_EN無
OSTaskDelHook()OS_CPU_HOOKS_EN無
OSTaskStatHook()OS_CPU_HOOKS_EN無
OSTaskSwHook()OS_CPU_HOOKS_EN無
OSTimeTickHook()OS_CPU_HOOKS_EN無
OS_MAX_EVENTS
OS_MAX_MEM_PARTS
OS_MAX_QS
OS_MAX_TASKS
OS_LOWEST_PRIO
OS_TASK_IDLE_STK_SIZE
OS_TASK_STAT_EN
當OS_TASK_STAT_EN設為0的時候,全局變數OSCPUUsage,OSIdleCtrMax,OSIdleCtrRun和OSStatRdy都不聲明,以節省記憶體空間。
OS_TASK_STAT_STK_SIZE
進行32位算術運算所需的堆疊空間。
調用OSTimeDly()所需的堆疊空間。
調用OSTaskStatHook()所需的堆疊空間。
預計最大的中斷嵌套數。
如果想在統計任務中進行堆疊檢查,判斷實際的堆疊使用,用戶需要設OS_TASK_CREATE_EXT_EN為1,並使用OSTaskCreateExt()函式建立任務。
OS_CPU_HOOKS_EN
OSTaskCreateHook()
OSTaskDelHook()
OSTaskStatHook()
OSTaskSwHook()
OSTimeTickHook()
OS_MBOX_EN
OS_MBOX_EN控制是否使用μC/OS-II中的訊息信箱函式及其相關數據結構,設為1為使用。如果不使用,則關閉此常量節省記憶體。
OS_MEM_EN
OS_MEM_EN控制是否使用μC/OS-II中的記憶體塊管理函式及其相關數據結構,設為1為使用。如果不使用,則關閉此常量節省記憶體。
OS_Q_EN
OS_Q_EN控制是否使用μC/OS-II中的訊息佇列函式及其相關數據結構,設為1為使用。如果不使用,則關閉此常量節省記憶體。如果OS_Q_EN設為0,則語句#define constant OS_MAX_QS無效。
OS_SEM_EN
OS_SEM_EN控制是否使用μC/OS-II中的信號量管理函式及其相關數據結構,設為1為使用。如果不使用,則關閉此常量節省記憶體。
OS_TASK_CHANGE_PRIO_EN
此常量控制是否使用μC/OS-II中的OSTaskChangePrio()函式,設為1為使用。如果在應用程式中不需要改變運行任務的優先權,則將此常量設為0節省記憶體。
OS_TASK_CREATE_EN
此常量控制是否使用μC/OS-II中的OSTaskCreate()函式,設為1為使用。在μC/OS-II中推薦用戶使用OSTaskCreateExt()函式建立任務。如果不使用OSTaskCreate()函式,將OS_TASK_CREATE_EN設為0可以節省記憶體。注意OS_TASK_CREATE_EN和OS_TASK_CREATE_EXT_EN至少有一個要為1,當然如果都使用也可以。
OS_TASK_CREATE_EXT_EN
此常量控制是否使用μC/OS-II中的OSTaskCreateExt()函式,設為1為使用。該函式為擴展的,功能更全的任務建立函式。如果不使用該函式,將OS_TASK_CREATE_EXT_EN設為0可以節省記憶體。注意,如果要使用堆疊檢查函式OSTaskStkChk(),則必須用OSTaskCreateExt()建立任務。
OS_TASK_DEL_EN
此常量控制是否使用μC/OS-II中的OSTaskDel()函式,設為1為使用。如果在應用程式中不使用刪除任務函式,將OS_TASK_DEL_EN設為0可以節省記憶體。
OS_TASK_SUSPEND_EN
此常量控制是否使用μC/OS-II中的OSTaskSuspend()和OSTaskResume()函式,設為1為使用。如果在應用程式中不使用任務掛起-喚醒函式,將OS_TASK_SUSPEND_EN設為0可以節省記憶體。