UCOS學習(2)任務簡介

2021-09-29 06:03:59 字數 2319 閱讀 2428

本來想著第二篇記一下ucosiii的移植內容,中間學完ucosii的移植後,ucosiii斷檔了,所以沒跟上,因此就把移植這部分跳過了。雖然學習檔案下有現成好的移植環境,但總覺的還是少學了什麼東西,心裡不太舒服,廢話少說,開始吧!

1.delay.c檔案

條件編譯:一般情況下,源程式中所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是「條件編譯」

#ifdef..

....

#endif

這種條件編譯可以提高c源程式的通用性。如果乙個c源程式在不同計算機系統上執行,而不同的計算機又有一定的差異。例如,我們有乙個資料型別,在windows平台中,應該使用long型別表示,而在其他平台應該使用float表示,這樣往往需要對源程式作必要的修改,這就降低了程式的通用性

在以前,作業系統以及所有使用了時基的系統,都必須由硬體定時器來產生「滴答」中斷來作為系統時基。在stm32中systick就是用於產生系統時基的,systick有4個控制暫存器。

1.systick控制暫存器:開關

2.systick重灌在數值暫存器:暫存器的最大值

3.systick當前數值暫存器:暫存器當前值

4.systick校準數值暫存器。

delay_ms()函式和delay_us()函式:

在ucosiii中,delay_ms函式是用ucosiii作業系統中自帶的乙個函式,如果在你的**中用到了delay_ms函式會發起任務排程。但是delay_ms函式有最小延時的時間,如果你的延時比最小延時還小則不會發生任務排程。使用delay_us函式則不會引起任務排程。

2.usart.c

和不用ucosiii最大的區別是串列埠1的中斷服務函式不同

3.sys.c一模一樣

在ucosiii中任務就是程式實體,ucosiii能夠管理和排程這些小任務(程式)。

由三部分組成:任務堆疊任務控制任務函式

最主要的乙個特點它是「分而治之」,如何理解這個分而治之呢?在ucosiii中,如果你想執行乙個問題,ucosiii可以將這個任務劃分為幾個不同的小任務,小任務乙個乙個不斷解決,大任務也就解決了。

那麼問題來了?用ucosiii和我們一般編寫的32程式有什麼不同呢?我覺得最大的不同就是任務的執行方式。比如32的程式,眾所周知,它是在乙個while(1)死迴圈中進行任務,也就是說完成乙個任務,你得先這樣在那樣,一步一步完成。而ucosiii呢?就像上面說的,分而治之。ucosiii會將任務細化為小任務,然後去同時執行這些小任務,最終解決這個問題。所以,兩者的最大區別應該是任務的執行效率。一步一步走當然沒有同時進行的效率高。

那麼還有乙個問題?ucosiii憑什麼可以分而治之,而我們一般的32程式不能呢。這裡就牽扯到cpu的執行狀態,排程。這時候如果有兩個main函式,我作業系統首先讓第乙個main函式執行一段時間,比如10毫秒以後,接下來,我會把你停掉,讓下乙個main函式執行,比如你執行一段時間,比如還是10毫秒以後,然後再讓下乙個任務執行,依次類推。這樣的話,我們的作業系統就在不同的時間段來執行了不同的函式功能。當這個時間比較小的時候,我們人類覺得這個作業系統不是在一會兒執行這個,一會兒執行那個,我們會感覺作業系統是在同乙個時刻,執行了所有的任務,這就是多工系統執行的方法。通過這個我們也可以發現,多工系統執行的方法其實是非常簡單的。就是給每個任務分配一定的時間,時間到了以後,或者你自動讓出cpu以後,我就去執行下乙個任務,這個就是多工作業系統的排程方法

先讓乙個任務執行一段時間(比如10ms),然後再讓乙個任務執行一段時間,接下來執行下乙個任務。依次執行,當乙個任務執行的時間足夠短的話,我們就不覺得cpu是在多個任務之間切換的了,我們會覺得cpu是在同一時間執行了多個任務。

ucosiii預設有5個系統任務:

1、空閒任務:ucosiii建立的第乙個任務,ucosiii必須建立的任務,此任務有ucosiii自動建立,不需要使用者手動建立。

2、時鐘節拍任務:此任務也是必須建立的任務。

3、統計任務:可選任務,用來統計cpu使用率和各個任務的堆疊使用量。此任務是可選任務,由巨集os_cfg_stat_task_en控制是否使用此任務。

4、定時任務:用來向使用者提供定時服務,也是可選任務,由巨集os_cfg_tmr_en控制是否使用此任務。

5、中斷服務管理任務:可選任務,由巨集os_cfg_isr_post_deferred_en控制是否使用此任務。

ucos2學習筆記 4任務管理

任務管理 在任務管理中,uc os2雖然可以管理多達64的任務,但建議保留幾個最高和最低的優先順序的任務,以備不時之需。任務管理 建立任務 刪除任務 改變任務優先順序 掛起任務 恢復任務以及獲取任務資訊。1.建立任務 uc os中提供了兩種,建立方式,ostaskcreate和ostaskcreat...

ucos原始碼閱讀1 任務1

結語按照main函式的流程去閱讀原始碼。1 哦,怎麼這麼大,首先是定義了個鉤子函式,在os cpu c.c由使用者實現。2 initmisc雜七雜八的初始化,初始化變數是在ucos ii.h定義或宣告的,巨集定義的是在os cfg.h使用者配置檔案裡定義的。補充 全域性變數定義前的os ext os...

ucosii 學習 2 任務就緒表

任務就緒表 任務就緒表的任務就是高效的找出當前優先順序最高的就緒任務.由任務就緒表osrdytbl和任務就緒組osrdygrb組成,osrdytbl每乙個位都記錄著乙個任務的就緒狀態,0非就緒1就緒,osrdygrb是為了快速的找出當前的最高就緒任務而設定的,把就緒表中的八個任務狀態分為一組,當這個...