uc os學習之路 一 初識uc os

2021-08-18 19:23:01 字數 3455 閱讀 9103

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

現廣泛使用的實時作業系統有很多種,它們具體的比較可以參考 。

從其**檔案的布局就能大致地了解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...