freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于ucos-ii的嵌入式應用程序開發(fā)(已修改)

2025-05-18 00:27 本頁面
 

【正文】 XUPT 嵌入式系統(tǒng) 原理與應用 第八章 基于 181。C/OSII的嵌入式應用程序開發(fā) 目 錄 ? 嵌入式應用程序開發(fā)的特點 ? 181。C/OSII應用程序結構分析 ? 181。C/OSII程序設計技術 ? 181。C/OSII在 ARM微處理器上的移植 ? 應用程序設計及實例 2 ? 開發(fā)調試環(huán)境的建立 在嵌入式系統(tǒng)開發(fā)中,典型的調試環(huán)境一般通常由三部分構成:一是通用計算機(用來運行調試軟件,稱為調試主機);二是協(xié)議轉換器(連接調試主機發(fā)出的高級命令與微處理器 JTAG接口的低級命令之間的接口);三是調試目標。硬件調試環(huán)境如下圖: 3 ? 基于嵌入式處理器的直接編程技術 如果針對硬件電路直接設計應用程序,那么應用程序的代碼必須包括以下幾個部分: ①啟動部分:硬件加電后首先運行(硬件檢測和資源分配) ②處理器管理部分:實現(xiàn)處理器狀態(tài)轉換和寄存器使用等 ③外圍設備訪問部分:外圍設備(如串口)的初始化等 ④程序功能部分:實現(xiàn)程序所要完成的具體功能 這樣設計程序對設計人員的能力要求是很高的。 4 ? 基于嵌入式操作系統(tǒng)的編程技術 隨著嵌入式微處理器和程序設計技術的發(fā)展,人們把一個大的程序從功能上可劃分為三個部分: ① 板級支持包( BSP):其目的是屏蔽下層硬件,主要由Boot Loader和 Drivers兩部分構成。 ② 嵌入式實時操作系統(tǒng)( RTOS)。 ③ 應用程序:基于相應操作系統(tǒng)、在相應開發(fā)環(huán)境下設計的并最終運行在相應目標機上的程序。 這里,可由掌握不同技術的人去設計不同的部分,并在三部分之間設計相應的接口以供三部分之間相互調用。 5 181。C/OSII應用程序結構分析 下面以一個簡單實例來說明基于 181。C/OSII操作系統(tǒng)設計的嵌入式應用程序的結構。 程序清單 兩個 LED交替閃爍 include “” (1) define LED1 (118) //定義 LED1, LED1 (2) define LED2 (119) //定義 LED2, LED2 (3) define TASK_STACK_SIZE 128 //定義用戶任務的堆棧長度 (4) OS_STK task1Stk[TASK_STACK_SIZE]。 //定義任務 LED1的堆棧 (5) OS_STK task2Stk[TASK_STACK_SIZE]。 //定義任務 LED2的堆棧 (6) void task1(void *pdata)。 //LED1任務函數(shù)聲明 (7) void task2(void *pdata)。 //LED2任務函數(shù)聲明 (8) 6 181。C/OSII應用程序結構分析 7 int main(void) //主函數(shù) (9) { OSInit()。 //初始化 181。C/OSII (10) OSTaskCreate(task1,(void *)0, //創(chuàng)建 LED1任務 amp。task1Stk[TASK_STACK_SIZE1],4)。 //優(yōu)先級為 4 (11) OSTaskCreate(task2,(void *)0, //創(chuàng)建 LED2任務 amp。task2Stk[TASK_STACK_SIZE1],5)。 //優(yōu)先級為 5 (12) OSStart()。 //啟動 181。C/OSII,任務開始執(zhí)行 (13) return(0)。 (14) } // main函數(shù)中所調用的 OSInit、 OSTaskCreate和 OSStart, 是 //181。C/OSII操作系統(tǒng)提供的 API函數(shù)。 // main函數(shù)并沒有直接調用 task1和 task2,只是在 main中調用 //OSTaskCreate創(chuàng)建兩個任務時分別把 task1和 task2作為參數(shù)。 181。C/OSII應用程序結構分析 8 void task1(void *pdata) //任務 LED1函數(shù)定義 (15) { pdata=pdata。 //防止出現(xiàn)編譯警告 (16) TargetInit()。 //目標板初始化,包括初始化中斷系統(tǒng) (17) PINSEL2 amp。= ~ 0x08。 //選擇管腳 ~ 25為 GPIO (18) IO1DIR |= 0x0318。 //設置 LED(、 )為輸出 (19) IO1SET = 0x0318。 //LED1和 LED2熄滅 (20) while(1) //超級循環(huán) (21) { IO1CLR=LED1。 //點亮 LED1 (22) OSTimeDly(OS_TICKS_PER_SEC/4)。 //延時 1/4秒 (23) IO1SET=LED1。 //熄滅 LED1 (24) OSTimeDly(OS_TICKS_PER_SEC/4)。 //延時 1/4秒 (25) } } 181。C/OSII應用程序結構分析 9 void task2(void *pdata) //任務 LED2函數(shù)定義 (26) { pdata=pdata。 (27) while(1) //超級循環(huán) (28) { IO1CLR=LED2。 //點亮 LED2 (29) OSTimeDly(OS_TICKS_PER_SEC/3)。 //延時 1/3秒 (30) IO1SET=LED2。 //熄滅 LED2 (31) OSTimeDly(OS_TICKS_PER_SEC/3)。 //延時 1/3秒 (32) } } //task1和 task2中的“ pdata=pdata?!?是防止在編譯時出現(xiàn)警告。 //task1和 task2中調用的 OSTimeDly,是 181。C/OSII提供的 API函數(shù)。 // PINSEL IO1DIR 等都是宏定義,代表寄存器地址, 給該寄 //存器賦值可以實現(xiàn)不同的功能,它們都在( *.h)文件中定義。 181。C/OSII應用程序結構分析 10 上述程序的功能是讓 2個 LED燈以不同的速度閃爍,其執(zhí)行流程如下圖: 181。C/OSII應用程序結構分析 11 關于該程序的執(zhí)行過程作以下說明: ①該程序首先從 main函數(shù)開始執(zhí)行,初始化 181。C/OSII,創(chuàng)建任務 task1和 task2,最后啟動 181。C/OSII中任務調度程序的執(zhí)行。 ②任務調度程序、任務 task1和 task空閑任務( 181。C/OSII中)等的交替執(zhí)行。當任務調度程序執(zhí)行后,任務調度程序會選擇當前處于就緒態(tài)的最高優(yōu)先級的任務來執(zhí)行;當正在執(zhí)行的任務調用延時函數(shù)延時時,就會掛起該任務,程序又會執(zhí)行調度程序來調度其它任務的執(zhí)行。 ③ main函數(shù)最后一條語句是 return(0),但程序一直在任務調度程序、任務 task1和 task2等之間交替執(zhí)行,永遠也不會返回到 main函數(shù),所以永遠也不會執(zhí)行 return(0)。 由以上分析可知,在使用 181。C/OSII操作系統(tǒng)的嵌入式應用程序中,程序的基本結構除 main函數(shù)外,還包括一個個任務函數(shù),當然也包括非任務函數(shù)。設計程序的任務主要是劃分和設計一個個任務函數(shù)。 181。C/OSII程序設計技術 ? 任務的劃分與設計 ⒈ 任務的特性 任務的基本特性有:動態(tài)性、獨立性和并發(fā)性 ① 任務的動態(tài)性是指:在程序的運行過程中,各個任務的狀態(tài)是動態(tài)變化的。這些狀態(tài)有就緒態(tài)、運行態(tài)和等待態(tài)等。 ② 任務的獨立性是指:程序中的所有任務在邏輯上都是平
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1