ucos原始碼閱讀1 任務1

2021-10-04 08:13:21 字數 2492 閱讀 7817

結語按照main函式的流程去閱讀原始碼。

1、哦,怎麼這麼大,首先是定義了個鉤子函式,在os_cpu_c.c由使用者實現。

2、initmisc雜七雜八的初始化,初始化變數是在ucos_ii.h定義或宣告的,巨集定義的是在os_cfg.h使用者配置檔案裡定義的。

補充:全域性變數定義前的os_ext

//os_core.c

#ifndef os_master_file

#define os_globals

#include "includes.h"

#endif

//ucos_ii.h

#ifdef os_globals

#define os_ext

#else

#define os_ext extern

#endif

3、initrdylist就緒值和就緒表,當前優先順序和最高優先順序,當前任務tcb指標和最高優先順序任務(就緒的嗎加上執行的)tcb指標統統清零。

4、inittcblist使任務塊鍊錶,任務塊指標陣列和空閒任務塊指標陣列統統清零。

5、直接蹦到初始化空閒任務和初始化統計任務,就堆疊方向和是否使用擴充套件的建立任務函式分為四種情況,堆疊首先要宣告成全域性變數,os_stk型別陣列,os_stk是堆疊入口寬度,和其他與處理器無關的型別都是在os_cpu.h裡typeof的。

空閒任務:

統計任務以及外加後面的其初始化函式,還沒看懂,涉及時鐘,不知道怎麼確保一秒鐘執行一次,os_ticks_per_sec使用者定義的。。。:

補充:1、關中斷函式,第三種方法,當前程式狀態暫存器的值儲存在區域性變數裡,最後再載入回來,防止本來是中斷關閉狀態反而最後開啟了中斷。是用彙編編寫的,在os_cpu.h裡巨集定義的。在呼叫系統函式前不要關中斷。任務至少要呼叫乙個任務掛起函式,讓出cpu使用權

//os_core.c

#ifos_critical_method==3

os_cpu_sr cpu_sr;

#endif

os_enter_critical()

;os_exit_critical()

;

2、任務控制塊型別定義,目前只能看懂部分

設定中斷模式和中斷的開禁,不懂。

init建立了兩個函式,在啟動前還要建立乙個類似於啟動程式的乙個任務(且唯一,跟統計任務有關,為了讓他一秒鐘執行一次?),因為osrunning初始化為false,任務建立並不引起任務排程,類似啟動程式的任務裡:時鐘初始化和啟動,其次是初始化統計任務,再者呼叫建立其他任務系統函式。時鐘啟動不能早於多工啟動(不懂),也就是osstart的osstarthighrdy彙編函式,osrunning也是在這兒要變成true以及跳到類似於啟動程式的任務並且永遠不會返回main。

就緒表中找到最高的優先順序,然後把當前優先順序和最高優先順序(就緒的?),當前任務指標和最高優先順序(就緒的?)都置為該任務的。

補充:1、排程,不在中斷巢狀子程式,以及排程器沒有上鎖才可以切換任務。如果當前任務就是就緒表裡的(執行任務一直在就緒表。。。)。反正要準備出最高就緒任務優先順序及對應tcb指標,然後呼叫彙編函式切換。

2、排程上鎖 啟動之後再上鎖

3、排程解鎖 如果不在中斷巢狀子程式以及排程器沒有上鎖,就要進行任務切換。

第一次用,亂七八糟的,寫來給自己複習用的,爭取五天之內把源**看完。

1、目前任務切換時機,建立任務的時候以及解鎖排程器的某一狀態下要進行排程。

2、開關中斷很暈。

3、還有一些坑要填。

UCOS學習(2)任務簡介

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

1606 例 1 任務安排 1

1606 例 1 任務安排 1 時間限制 1000 ms 記憶體限制 524288 kb 提交數 203 通過數 149 題目描述 有 n 個任務排成乙個序列在一台機器上等待執行,它們的順序不得改變。機器會把這 n 個任務分成若干批,每一批包含連續的若干個任務。從時刻 0 開始,任務被分批加工,執行...

第4周任務1

程式頭部注釋開始 程式的版權和版本宣告部分 檔名稱 sanjiaoxing.cpp 作 者 鄒議鵬 完成日期 2012 年 3 月 14 日 版 本 號 41.vc 對任務及求解方法的描述部分 輸入描述 問題描述 程式輸出 程式頭部的注釋結束 include include math.h using...