ucosii系統初始化函式

2021-07-09 05:39:12 字數 2520 閱讀 6403

osinithookbegin(); /* call port specific initialization code */

// 初始化系統鉤子函式:不懂

os_initmisc(); /* initialize miscellaneous variables */

//初始化一些重要的全域性變數

1. ostime = 0ul; //系統時鐘

2. osintnesting = 0u; //中斷巢狀層數

3. oslocknesting = 0u; //排程鎖計數

4. ostaskctr = 0u; //任務計數

5. osrunning = os_false; //多工,沒有開始

6. osctxswctr = 0u; //任務排程計數

7. osidlectr = 0ul; //空閒計數

8. osidlectrrun = 0ul; //1s內的空閒計數

osidlectrmax = 0ul; //最大的空閒計數值

osstatrdy = os_false; //統計任務未開始

os_initrdylist(); /* initialize the ready list */

//初始化就緒組和就緒表

osrdygrp = 0u; //任務就緒組

for (i = 0u; i < os_rdy_tbl_size; i++)

ospriocur     = 0u;             //當前任務優先順序

ospriohighrdy = 0u; //當前就緒任務的最高優先順序

ostcbhighrdy = (os_tcb *)0; //當前就緒最高優先順序任 務控制塊指標

ostcbcur = (os_tcb *)0; //當前任務控制塊指標

os_inittcblist(); /* initialize the free list of os_tcbs */

//任務控制塊初始化:比較重要

os_memclr((int8u *)&ostcbtbl[0], sizeof(ostcbtbl));

os_memclr((int8u *)&ostcbpriotbl[0], sizeof(ostcbpriotbl)); //任務控制塊表和任務優先順序表清零

for (ix = 0u; ix < (os_max_tasks + os_n_sys_tasks - 1u); ix++) {

ix_next = ix + 1u;

ptcb1 = &ostcbtbl[ix];

ptcb2 = &ostcbtbl[ix_next]; //任務控制塊鏈結成單向鍊錶,其實就是空閒鍊錶

ptcb1->ostcbnext = ptcb2;

ostcblist = (os_tcb *)0;

ostcbfreelist = &ostcbtbl[0];

//空閒鍊錶和就緒鍊錶

//兩清一連兩鏈

os_initeventlist(); /* initialize the free list of os_events */先不管

。。。。。。。。。。。。。 //事件標誌,記憶體,佇列初始化

os_inittaskidle(); /* create the idle task */

//重點:空閒任務初始化

ostaskcreateext(os_taskidle,

(void )0, / no arguments passed to os_taskidle() */

&ostaskidlestk[os_task_idle_stk_size - 1u],/* set top-of-stack */

os_task_idle_prio, /* lowest priority level */

os_task_idle_id,

&ostaskidlestk[0], /* set bottom-of-stack */

os_task_idle_stk_size,

(void )0, / no tcb extension */

os_task_opt_stk_chk | os_task_opt_stk_clr)

os_taskidle:空閒任務函式指標,空閒任務其實就是在計數????,怎麼沒有延時來釋放cpu

傳遞給任務的引數

空閒任務棧頂指標:空閒任務有專門的棧

優先順序和id

棧底指標

/* enable stack checking + clear stack */

現在來觀察一下,空閒任務的堆疊和任務控制塊的的變化

入棧內容包括:任務引數,函式指標,棧底應該是不存放資料的,最後返回當前的棧頂指標

任務控制塊的初始化:從空閒鍊錶中獲取乙個可用的任務控制塊,將空閒任務鍊錶指標指向下乙個控制塊,初始化任務控制塊,並更新任務優先順序指標表,將任務控制塊新增到就緒鍊錶中,更新任務就緒鍊錶指標,就緒表,就緒組,任務統計數

uC OS ii系統核心理解 三 初始化呼叫函式

osinit所呼叫的函式 必須類五個 非必須類通過選通開關選擇。五個必須類 1.os initmisc 必須類 這個函式會被osinit 呼叫來初始化各項變數。static void os initmisc void 沒有選通開關的部分為引數初始數值,這些引數是系統必須的變數,類似於我們定義乙個全域...

SystemInit時鐘系統初始化函式

void systeminit void static void setsysclock void 下面主要講解該函式 static void setsysclockto72 void while hsestatus 0 startupcounter hse startup timeout if r...

建構函式初始化列表和初始化函式

其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...