1. 程式人生 > >uc/os學習之路(一) —— 初識uc/os

uc/os學習之路(一) —— 初識uc/os

初識實時作業系統

       實時作業系統是指當外界事件或資料產生時,能在規定的時間內進行處理並作出相應。實時作業系統有一下基本特徵:

  • 多工作業系統
  • 多級中斷機制
  • 優先排程機制

目錄樹

從其程式碼檔案的佈局就能大致地瞭解uC/OS-III系統的各個功能,及使用方法。

uC/OS-III

uC/OS-III是uc/os中與處理器無關的檔案,其中

  • Cfg\Template

該目錄存放配置檔案的模板。可以把這些檔案複製到應用工程目錄中,並根據需要修改它們。
os_app_hooks.c
說明如何編寫被uCOS-III呼叫的hook函式。該檔案包含8個空函式。
os_cfg.h
定義工程中用到的uCOS-III功能。詳情見附錄os_cfg.h


os_cfg_app.h
這也是一個配置檔案,複製進工程目錄,根據應用需要進行設定。這個檔案使使用者可以決定諸如idle任務的堆疊大小、時鐘頻率和訊息緩衝池中可存放的訊息數目之類的東西。詳情見附錄os_cfg_app.h

  • \source

       該目錄包含uC/OS-III中獨立於CPU硬體的原始碼。這個目錄中的所有檔案都應該被包含進工程目錄中。根據需求,可以通過配置os_cfg、os_cfg_app.h中#define的常量來進行裁剪核心。

       os_cfg_app.c

              根據os_cfg_app.h中的巨集定義宣告變數和陣列。

os_core.c

              包含uC/OS-III核心的功能模組。例如用來初始化uC/OS-III的OSInit(),用來完成任務級排程的OSSched(),用來完成中斷級排程的OSIntExit(),任務等待表的管理以及任務就緒表的管理等。

       os_dbg.c

              包含核心偵錯程式或uC/Probe使用的常量的宣告。

       os_flag.c

包含事件標誌的管理程式碼。

       os_int.c

包含中斷處理任務的程式碼。只有當OS_CFG_ISR_POST_DEFERRED_EN(位於os_cfg.h中)設定為1時才能使用該任務。

       os_mem.c

包含uC/OS-III固定大小的儲存分割槽的管理程式碼。

       os_msg.c

包含訊息管理的程式碼。uC/OS-III提供訊息佇列和任務專用的訊息佇列,os_msg.c包含這兩個服務的通用程式碼。

       os_mutex.c

              包含互斥訊號量的管理程式碼。

       os_pend_multi.c

              包含允許任務同時等待多個訊號量或多個訊息佇列的程式碼。

       os_prio.c

              包含位對映表的管理程式碼,用於追逐那些已經就緒的任務。如果使用的CPU提供置位、清零、測試位和計算前導零的指令,可以使用等效的組合語言程式來代替該程式以提高效能。

       os_q.c

              包含訊息佇列的管理程式碼。

       os_sem.c

              包含管理用於資源管理和同步的訊號量的程式碼。

       os_stat.c

              包含用於計算CPU總使用率及各個任務的CPU使用率的統計任務的程式碼。

       os_task.c

              包含任務的管理程式碼。任務管理的函式有諸如OSTaskCreate()、OSTaskDel()和OSTaskChangePrio()等。

       os_tick.c

              包含可管理正在延時和超時等待的任務的程式碼。

       os_time.c

              包含可使任務延遲一段時間的程式碼。

       os_tmr.c

              包含軟體定時器的管理程式碼。

       os_var.c

              包含uC/OS-III的全域性變數。這些變數由uC/OS-III管理,不應被應用程式訪問。

       os.h

              包含uC/OS-III主要的標頭檔案,其中聲明瞭常量、巨集、uC/OS-III全域性變數、函式原型等。

       os_type.h

              包含uC/OS-III資料型別的宣告。可以通過改變這些資料型別以更好地配合所使用的CPU。

  • Ports

存放所使用的CPU架構的移植檔案。其子目錄ARM-Cortex-M3及IAR分別表示CPU架構的名字和編譯移植程式碼的編譯器廠商的名字。

       os_cpu.h

包含OS_TASK_SW()的巨集定義,以及函式原型OSCtxSw()、OSIntCtxSw()和OSStartHighdy()等的宣告。

       os_cpu.a.asm

              包含彙編函式OSCtxSw()、OSIntCtxSw()和OSStartHighdy()等

       os_cpu.h

              包含移植專用hook函式的C程式碼,以及在建立任務時用來初始化任務堆疊的程式碼。

uC-CPU

       cpu_core.c

              包含適用於所有CPU架構的C程式碼。該檔案包含了用來測量中斷關閉時間的函式(中斷關閉和開啟分別由CPU_CRITICAL_ENTER()CPU_CRITICAL_EXIT()兩個巨集實現),還包含一個可模仿前導零計算指令的函式(以防CPU不提供這樣的指令),以及一些其他的函式。

       cpu_core.h

              包含cpu_core.c中的函式的原型宣告。

       cpu_def.h

              包含uC/CPU模組使用的各種#define常量。

  • ARM-Cortex-M3

該目錄的檔案包含了uC/CPU的移植程式碼。

       cpu.h

              包含了一些型別的定義,使uC/OS-III和其他模組可以和CPU架構和編譯器字寬度無關。在該檔案中可以找到CPU_INT16U、CPU_INT32U、CPU_FP32等資料型別定義,同時在該檔案指定了CPU使用的是大端模式還是小端模式,定義了巨集CPU_CRITICAL_ENTER()CPU_CRITICAL_EXIT(),還包含了一些與CPU架構有關的函式宣告。

       cpu_a.asm

              包含了一些用匯編語言編寫的函式,可用來開中斷和關中斷、計算前導零(如果CPU支援這條指令)。該檔案可能還包括使能快取、建立MPU和MMU等的函式。這個檔案中的函式可以從C程式碼中呼叫

       cpu_c.c

              包含了一些基於特定CPU架構但為了可移植而用C語言編寫的函式,作為一個普遍原則,除非組合語言能顯著提高效能,否則儘量使用C語言編寫函式。

  • Cfg\Template

該目錄包含了一個配置模板檔案(cpu_cfg.h)。使用者必須把這個檔案複製到工程目錄中,並根據需求修改其內容。

cpu_cfg.h

定義是否開啟中斷關閉時間的測量功能,是用匯編語言實現前導零計算指令,還是用C語言模仿實現前導零計算指令等。

uC/LIB


uC/LIB由一些高度可移植並且與編譯器無關的函式組成。這有助於產品的第三方認證。uC/OS-III不使用任何uC/LIB中的函式,但是uC/OS-III和uC/CPU假定lib_def.h是存在的,並定義了DEF_YES、DEF_NO、DEF_TRUE、DEF_FLASE、DEF_ON、DEF_OFF等巨集。

BSP

板級支援包(BSP)的原始檔,所有的檔名都以BSP開頭,可以在該目錄找到bsp.h和bsp.c。BSP程式碼應包含如LED控制、定時器初始化、乙太網控制器介面等函式。

參考資料:

《Micrium-uCOS-III-UserManual》

知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 3.0 中國大陸許可協議進行許可。