UCOS-II移植ARM的讀書筆記_第1頁
UCOS-II移植ARM的讀書筆記_第2頁
UCOS-II移植ARM的讀書筆記_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、UCOS-II移植ARM的讀書筆記(12.15) UCOS-II移植ARM的讀書筆記(12.15) 移植的工作難以分析下去,先來幾個(gè)UCOS的使用范例看看吧 第一個(gè)范例:void main (void) PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* PC的清屏函數(shù),PC_DispClrScr(INT8U color),這里調(diào)用時(shí)是前景色為白色,背景色為黑色*/ OSInit(); /* Initialize uC/OS-II ,初始化UCOS-II,在使用任何功能之前必須調(diào)用OSInit函數(shù),建立兩個(gè)任務(wù):空閑任務(wù)所有其他任務(wù)均未就緒

2、時(shí)運(yùn)行,統(tǒng)計(jì)任務(wù)計(jì)算CPU的利用率*/ PC_DOSSaveReturn(); /* Save environment to return to DOS 允許程序在正式開始多任務(wù)前,保存重要的寄存器的值,以保證UCOS能夠正常地返回DOS */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector ,用于設(shè)定中斷向量表的內(nèi)容。*/ RandomSem = OSSemCreate(1); /* Random number semaphore,建立一個(gè)信號(hào)量,并制定信號(hào)量的初值為1,OSSemCreat

3、e(1)返回一個(gè)指向信號(hào)量的指針,那么之后對(duì)該信號(hào)量的操作全部通過這個(gè)指針來實(shí)現(xiàn) */ OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 0); /*至少建立一個(gè)任務(wù),TaskStart為指向該任務(wù)運(yùn)行代碼的指針,第二個(gè)參數(shù)是一個(gè)指向任務(wù)初始化數(shù)據(jù)的指針,第三個(gè)是任務(wù)的堆棧棧頂,當(dāng)堆棧是從上到下,必須把堆棧高地址傳給該函數(shù),最后一個(gè)參數(shù)指定建立的任務(wù)的優(yōu)先級(jí),數(shù)值越小優(yōu)先級(jí)越高,每個(gè)任務(wù)的優(yōu)先級(jí)都是介于062之間獨(dú)一無二的。*/ OSStart(); /* Start multitasking,調(diào)用該函

4、數(shù)將控制權(quán)交給內(nèi)核,開始運(yùn)行多任務(wù) */ OSStart函數(shù)會(huì)讓優(yōu)先級(jí)最高的就緒任務(wù)開始運(yùn)行,即TaskStartvoid TaskStart (void *pdata)#if OS_CRITICAL_METHOD = 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr;#endif char s100; INT16S key; pdata = pdata; /* Prevent compiler warning,這是這個(gè)參數(shù)是當(dāng)任務(wù)建立時(shí)傳遞過來的一個(gè)指針 */ TaskStartDispInit(); /* I

5、nitialize the display 初始化屏幕顯示 */ OS_ENTER_CRITICAL(); /*關(guān)中斷*/ PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */ PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL(); /*開中斷*/ OSStatInit(); /* Initialize uC/OS-II's statistics測(cè)試所使用的處理器的速度,得知處理器在運(yùn)行所有應(yīng)

6、用任務(wù)時(shí)實(shí)際的CPU使用率 */ TaskStartCreateTasks(); /* Create all the application tasks建立更多任務(wù),10個(gè)顯示不同字符的任務(wù),在每次建立一個(gè)新任務(wù)的時(shí)候,UCOS都會(huì)判斷新建立的任務(wù)是否比建立它們的任務(wù)優(yōu)先級(jí)更高,如果更高,這個(gè)新建立的任務(wù)將立刻開始運(yùn)行。 */ for (;) TaskStartDisp(); /* Update the display */ if (PC_GetKey(&key) = TRUE) /* See if key has been pressed */ if (key = 0x1B) /*

7、Yes, see if it's the ESCAPE key */ PC_DOSReturn(); /* Return to DOS */ OSCtxSwCtr = 0; /* Clear context switch counter 每秒都將記錄任務(wù)切換次數(shù)的清零 */ OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second 將自身掛起1s,1s是通過四個(gè)參數(shù)傳送的,小時(shí),分鐘,秒,毫秒 */ static void TaskStartCreateTasks (void) INT8U i; for (i = 0; i < N_TASKS;

8、i+) /* Create N_TASKS identical tasks */ TaskDatai = '0' + i; /* Each task will display its own letter */ OSTaskCreate(Task, (void *)&TaskDatai, &TaskStkiTASK_STK_SIZE - 1, i + 1); 上面的函數(shù)循環(huán)建立了十個(gè)Task任務(wù),下面是Task任務(wù)的代碼void Task (void *pdata) INT8U x; INT8U y; INT8U err; for (;) OSSemPend(RandomSem, 0, &err); /* 獲取信號(hào)量*/ x = random(80); /* 獲得隨機(jī)數(shù)x*/ y = random(16); /*獲得隨機(jī)數(shù)y*/ OSSemPost(RandomSem); /* 釋放信號(hào)量*/ /* Display the task number on the screen */ PC_DispChar(x, y + 5, *(char *)pdata, DISP_FGND_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論