導航:首頁 > 編程語言 > c語言編程boot跳轉實現

c語言編程boot跳轉實現

發布時間:2025-04-09 00:08:23

① UC/OS-II在ARM7(LPC2294)上的移植

內核結構:臨界段、任務、任務狀態、任務控制塊(OS-TCB)、就緒表、任務調度、給調度器上鎖和開鎖、空閑任務(IDLE TASK)、統計任務、中斷處理、時鍾節拍、UCOS2初始化和啟動。
void task1(void)
{
INT32U count=0;
start_Tick();
while(1)
{
printf("count;",count++);
OSTIMEDLY(25);
}
}
void task2(void)
{
INT32U count=0;
Ticker_init(OS_TICKS_PER_SEC);
while(1)
{
printf("count;",count++);
OSTIMEDLY(50);
}
}
void main()
{
sysinit();
OSInit();
OSTASKCREAT(Task1,(void*)&Task1Data,
(void*)&Task1STK[TASK_STK_SIZE],TASK1prio);
OSTASKCREAT(TASK2)
OSSTART();
}

例子中的UCOS系統中有3個任務。TASK1和TASK2僅僅是進行延時、研時不同的時間片、代碼如圖示。另一個是空閑任務,是UCOS啟動時自動創建的。
UCOS運行開始於MAIN函數,代碼如圖。MAIN函數首先調用sysinit(),該函數不是操作系統本身具有的,是一個自行編寫的函數,用來做一些針對具體系統的初始化工作,這個函數不是必須的。
Osinit,這個函數是UCOS的系統函數,是UCOS啟動時必須調用的。它主要是用來對UCOS內核中的各種數據結構做初始化工作。(同樣是INT,在有的CPU體系結構中是16BIT,在有的CPU體系結構中是32BIT)此外它還會建立空閑任務IDLE TASK,這個任務總是處於就緒態,優先順序總是設為最低,這個任務從代碼角度講只是對一個全局變數OSIDLECTR做累加,它的作用是在系統空閑時消耗CPU時間。如果統計任務允許OS-TASK-STAT-EN和任務建立擴展允許都設為1,則OSinit()還得建立統計任務OSTaskstat()並且讓其進入就緒態,優先順序總是設為OS-LOWEST-PRIO-1。
接下來,2次調用OSTASKCREAT(),創建2個任務:TASK1和TASK2。從代碼中我們看到有2個變數:TASK1STK和TASK2STK,分別為2個任務的堆棧,這個在前面提到過,UCOS的堆棧大小是可以根據需要定製的,從代碼的角度講,任務的堆棧是以全局數組的形式來實現的。調用OSTASKCREAT()時還有2個參數:TASK1PRIO和TASK2PRIO,它們表示的是任務的優先順序,在例子中TASK2的任務優先順序高於TASK1。需要注意,在MAIN函數中至少要建立一個任務,否則UCOS無法正常進行。
最後MAIN()函數調用OSSTART(),這個函數做的工作是從任務就緒表中找到優先順序最高的任務的任務控制塊,之後,OSSTART()調用高優先順序就緒任務啟動函數OSSTARTHIGHRDY(),這個函數與選擇的微處理器有關,它是在針對具體平台進行移植時自行編寫的。OSSTARTHIGHRDY()使已經創建的任務中優先順序最高的任務開始運行,之後程序是不會返回OSSTART()的,本例子中TASK2首先開始執行。
再返回到程序清單,可以看到TASK2於TASK1相比唯一的不同就是TASK2執行的第一個語句是調用函數TICKER——INIT(),這是個自行編寫的函數,作用是設置定時器,從而為操作系統運行提供時鍾節拍。之所以這樣是由於UCOS的結構造成的,UCOS要求在OSSTART()運行後才能打開定時器中斷。如果不這樣做的話,時鍾節拍中斷有可能在UCOS啟動第一個任務之前發生,此時UCOS處於不確定狀態之中,程序有可能崩潰。
之後,UCOS就開始了運轉,對於例子來說就是TASK1和TASK2以及空閑任務輪番工作。

閱讀全文

與c語言編程boot跳轉實現相關的資料

熱點內容
程序員放棄後會怎樣 瀏覽:159
河北模具編程 瀏覽:177
adb查找命令 瀏覽:308
安卓手機視頻文件夾怎麼打開 瀏覽:302
平板加密手機後怎麼關閉 瀏覽:555
流媒體伺服器應該注意什麼 瀏覽:526
d8命令編譯 瀏覽:942
壓縮包解壓需要多少空間 瀏覽:138
如何查找app屬性 瀏覽:380
android人臉識別技術 瀏覽:304
pc104編程 瀏覽:328
二維碼反編譯破解推廣 瀏覽:673
修改伺服器的mac地址 瀏覽:520
好玩的編程軟體 瀏覽:891
編程語言創始人有錢嗎 瀏覽:796
短視頻app怎麼獲客 瀏覽:7
查看雲伺服器的應用 瀏覽:427
javadump工具 瀏覽:558
程序員16g 瀏覽:421
程序員沒有辦法成為top怎麼辦 瀏覽:196