實時作業系統是指當外界事件或資料產生時,能在規定的時間內進行處理並作出相應。實時作業系統有一下基本特徵:
現廣泛使用的實時作業系統有很多種,它們具體的比較可以參考 。
從其**檔案的布局就能大致地了解uc/os-iii系統的各個功能,及使用方法。
uc/os-iii是uc/os中與處理器無關的檔案,其中
該目錄存放配置檔案的模板。可以把這些檔案複製到應用工程目錄中,並根據需要修改它們。
說明如何編寫被ucos-iii呼叫的hook函式。該檔案包含8個空函式。
os_cfg.h
定義工程中用到的ucos-iii功能。詳情見附錄os_cfg.h。
這也是乙個配置檔案,複製進工程目錄,根據應用需要進行設定。這個檔案使使用者可以決定諸如idle任務的堆疊大小、時鐘頻率和訊息緩衝池中可存放的訊息數目之類的東西。
詳情見附錄
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。
存放所使用的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**,以及在建立任務時用來初始化任務堆疊的**。
包含適用於所有cpu架構的
c**。該檔案包含了用來測量中斷關閉時間的函式(中斷關閉和開啟分別由cpu_critical_enter()
和cpu_critical_exit()兩個巨集實現
),還包含乙個可模仿前導零計算指令的函式(以防cpu不提供這樣的指令),以及一些其他的函式。
cpu_core.h
包含cpu_core.c
中的函式的原型宣告。
cpu_def.h
包含uc/cpu
模組使用的各種#define常量。
該目錄的檔案包含了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語言編寫函式。
該目錄包含了乙個配置模板檔案(cpu_cfg.h)。使用者必須把這個檔案複製到工程目錄中,並根據需求修改其內容。
cpu_cfg.h
定義是否開啟中斷關閉時間的測量功能,是用組合語言實現前導零計算指令,還是用c語言模仿實現前導零計算指令等。
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.h和bsp.c。bsp**應包含如led控制、定時器初始化、乙太網控制器介面等函式。
uC OS 的中斷 uC OS學習筆記(三)
1.常見名詞 a 中斷服務子程式 應中斷請求而執行的程式 b 中斷向量 中斷服務子程式的入口位址 2.uc os的中斷過程 系統接收到中斷請求後,如果這時cpu處於中斷允許狀態,系統就會立刻終止正在執行的任務,而按照中斷向量的指向執行中斷服務子程式。對於可剝奪型核心uc os而言,中斷服務子程式執行...
uC OS 的訊息佇列 uC OS學習筆記(七)
1.訊息佇列的介紹 使用訊息佇列可在任務之間傳遞多條訊息。訊息佇列相當於訊息郵箱集合,乙個郵箱只能在任務間傳遞一條訊息,而訊息佇列則可以傳遞多條訊息。訊息佇列由三部分組成 事件控制塊 訊息佇列和訊息。2.訊息佇列的操作 a 建立訊息佇列 qsqcreate void start,int16u siz...
ucos 學習之二
os initmisc void os ext volatile int32u ostime 使用volatile的關鍵字,是為了 volatile的作用 作為指令 關鍵字,確保本條指令不會因 編譯器的優化而省略,且要求每次直接讀值.簡單地說就是防止 編譯器對 進行優化.比如如下程式 xbyte 2...