uC OS II的應用程式的基本結構以及注意事項

2021-04-18 01:16:37 字數 749 閱讀 2515

應用uc/os-ii,自然要為它開發應用程式,下面論述基於uc/os-ii的應用程式的基本結構以及注意事項。

void task ( void* pdata ) }

以上就是基本結構,至於為什麼要寫成無限迴圈的形式呢?那是因為系統會為每乙個任務保留乙個堆疊空間,由系統在任務切換的時候換恢復上下文,並執行一條reti 指令返回。如果允許任務執行到最後乙個花括號(那一般都意味著一條ret指令)的話,很可能會破壞系統堆疊空間從而使應用程式的執行不確定。換句話說,就是「跑飛」了。所以,每乙個任務必須被寫成無限迴圈的形式。程式設計師一定要相信,自己的任務是會放棄cpu使用權的,而不管是系統強制(通過isr)還是主動放棄(通過呼叫os api)。

現在來談論上面程式中的inittimer()函式,這個函式應該由系統提供,程式設計師有義務在優先順序最高的任務內呼叫它而且不能在for迴圈內呼叫。注意,這個函式是和所使用的cpu相關的,每種系統都有自己的timer初始化程式。在uc/os-ii的幫助手冊內,作者特地強調絕對不能在osinit()或者osstart()內呼叫timer初始化程式,那會破壞系統的可移植性同時帶來效能上的損失。所以,乙個折中的辦法就是象上面這樣,在優先順序最高的程式內呼叫,這樣可以保證當osstart()呼叫系統內部函式osstarthighrdy()開始多工後,首先執行的就是timer初始化程式。或者專門開乙個優先順序最高的任務,只做一件事情,那就是執行timer初始化,之後通過呼叫ostasksuspend()將自己掛起來,永遠不再執行。不過這樣會浪費乙個tcb空間。對於那些ram吃緊的系統來說,還是不用為好。

uc os ii應用程式中函式的呼叫關係

應用程式中函式的呼叫關係 include includes.h define task stk size 512 定義堆疊長度 1024位元組 os stk taskstk task stk size 定義乙個陣列來作為任務堆疊 檔案中的 osinit 函式 2全域性變數的說明 uc os ii 初...

在UC OS II上開發應用程式的起步資訊

1 可以直接使用 ucos lib.a uc os ii 在ads 上的函式庫 來進行各種函式操作,比如 lcd printf hello world n 等,詳情見桌面 基於 ucos 作業系統的 api函式 chm 2 發現在 uc os 核心中有 taskchangeprio 函式,可以改變優...

rails應用程式的基本操作(一)

建立rails應用程式 rails new depot生成腳手架 rails g scaffold product title string資料遷移 rake db migrate測試 rake test回滾遷移 rake db rollback檢視檔案內容 建立新的控制器 rails g cont...