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

正文內(nèi)容

基于arm的智能控制最小系統(tǒng)機(jī)電專(zhuān)業(yè)畢業(yè)論文-資料下載頁(yè)

2025-06-22 12:57本頁(yè)面
  

【正文】 數(shù)據(jù)類(lèi)型定義,因?yàn)樗鼈兣c處理器類(lèi)型有關(guān),隱含著不可移植性,代之以移植性強(qiáng)的整數(shù)數(shù)據(jù)類(lèi)型,這樣,即直觀又可移植: typedef unsigned char BOOLEAN; /*布爾變量*/ 38typedef unsigned char INT8U; /*無(wú)符號(hào)8位整型變量*/ typedef signed char INT8S; /*有符號(hào)8位整型變量*/ typedef unsigned short INT16U; /*無(wú)符號(hào)16位整型變量*/ typedef signed short INT16S; /*有符號(hào)16位整型變量*/ typedef unsigned int INT32U; /*無(wú)符號(hào)32位整型變量*/ typedef signed int INT32S; /*有符號(hào)32位整型變量*/ typedef float FP32; /*單精度浮點(diǎn)數(shù)(32位長(zhǎng)度)*/ typedef double FP64; /*雙精度浮點(diǎn)數(shù)(64位長(zhǎng)度)*/ typedef INT32U OS_STK; /*堆棧是32位寬度*/ (2)宏定義為保護(hù)臨界段代碼免受多任務(wù)或中斷服務(wù)子程序破壞,必須先關(guān)中斷,再處置臨界段代碼,并且在處置完畢后重新開(kāi)中斷。為增加可移植性,uC/OSII定義了與處理器無(wú)關(guān)的兩個(gè)宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來(lái)關(guān)/開(kāi)中斷。我們選擇方法2來(lái)實(shí)現(xiàn),執(zhí)行OS_ENTER_CRITICAL()時(shí),先將中斷狀態(tài)保存到堆棧中,然后關(guān)中斷;而當(dāng)執(zhí)行OS_EXIT_CRITICAL()時(shí),再?gòu)亩褩V谢謴?fù)原來(lái)的中斷開(kāi)/關(guān)狀態(tài)。ARM處理核中關(guān)中斷和開(kāi)中斷是通過(guò)改變程序狀態(tài)寄存器CPSR中相應(yīng)控制位實(shí)現(xiàn)的。使用軟中斷指令SWI作為底層接口,使用不同的功能號(hào)區(qū)分不同的函數(shù)。在ADS中有一個(gè)關(guān)鍵字_swi,用它可以聲明一個(gè)不存在的函數(shù),調(diào)用這個(gè)函數(shù)就在調(diào)用這個(gè)函數(shù)的地方插入一條SWI指令,并且可以指定功能號(hào)。程序如下所示:/*SWI服務(wù)函數(shù),*/__swi(0x02)void OS_ENTER_CRITICAL(void); /*關(guān)中斷*/__swi(0x03)void OS_EXIT_CRITICAL(void); /*開(kāi)中斷*//**/ case 0x02: /*關(guān)中斷函數(shù)OS_ENTER_CRITICAL()*/ __asm { MRS R0,SPSR ORR R0,R0,NoInt MSR SPSR_c,R0 } OsEnterSum++; Break; case 0x03: /*開(kāi)中斷函數(shù)OS_EXIT_CRITICAL()*/ If(OsEnterSum==0) { __asm { MRS R0,SPSR BIC R0,R0,NoInt MSR SPSR_c,R0 } } Break; (3)堆棧增長(zhǎng)方向因?yàn)椴煌幚砥鞫褩5脑鲩L(zhǎng)方向不同,為消除不可移植性,uC/OSII配置常數(shù)OS_STK_GROWTH指定堆棧的生長(zhǎng)方式。雖然ARM處理器核對(duì)于兩種方式均支持,但ADS的C語(yǔ)言編譯器僅支持從上往下生長(zhǎng),且必須是滿遞減堆棧,所以O(shè)S_STK_GROWTH的值為1,代碼如下:define OS_STK_GROWTH 1 /*堆棧是從上往下生長(zhǎng)*/ (4)任務(wù)級(jí)切換OS_TASK_SW()是一個(gè)宏,是在uC/OSII從低優(yōu)先級(jí)任務(wù)到高優(yōu)先級(jí)任務(wù)時(shí)須用到的。在uC/OSII中,處于就緒態(tài)任務(wù)的堆棧結(jié)構(gòu)看就像剛剛發(fā)生過(guò)中斷一樣,也就是說(shuō)uC/OSII運(yùn)行處于就緒態(tài)的任務(wù)要做的就是從任務(wù)堆棧中恢復(fù)處理器所有的寄存器并執(zhí)行中斷返回。因而為了進(jìn)行任務(wù)調(diào)度可以通過(guò)執(zhí)行OS_TASK_SW()模仿中斷的產(chǎn)生,所以這個(gè)宏實(shí)際上是用軟中斷完成的。/*SWI服務(wù)函數(shù),*/__swi(0x00)void OS_TASK_SW(void); /*任務(wù)級(jí)任務(wù)切換函數(shù)*/uC/OSII要求用戶(hù)編寫(xiě)10個(gè)C函數(shù),10個(gè)C函數(shù)具體如下:OSTaskStkInit() 初始化任務(wù)堆棧結(jié)構(gòu)OSTaskCreateHook() 任務(wù)建立鉤子函數(shù)OSTaskDelHook() 任務(wù)刪除鉤子函數(shù)OSTaskSwHook() 任務(wù)切換鉤子函數(shù)OSTaskIdleHook() 空閑任務(wù)鉤子函數(shù)OSTaskStatHook() 任務(wù)統(tǒng)計(jì)鉤子函數(shù)OSTimeTickHook() 時(shí)鐘節(jié)拍鉤子函數(shù)40OSInitHookBegin() 系統(tǒng)初始化起始鉤子函數(shù)OSInitHoodEnd() 系統(tǒng)初始化返回鉤子函數(shù)OSTCBInitHook() 任務(wù)控制塊初始化鉤子函數(shù)唯一必要的函數(shù)是OSTaskStkInit(),其它9個(gè)函數(shù)必須聲明,但并不一定要包含任何代碼。建立任務(wù)時(shí)通過(guò)調(diào)用OSTaskStkInit(),初始化任務(wù)的棧結(jié)構(gòu),堆??雌饋?lái)就像中斷剛發(fā)生過(guò)一樣,所有的寄存器都保存在堆棧中。任務(wù)的堆棧結(jié)構(gòu)是與CPU的體系結(jié)構(gòu)和編譯器相關(guān)的,對(duì)于ARM7而言,堆棧由高到低依次保存著PC、LR、R12~R0、CPSR,其堆棧結(jié)構(gòu)如圖43所示。 圖43 任務(wù)的堆棧結(jié)構(gòu)根據(jù)圖43,可以寫(xiě)出函數(shù)OSTaskStkInit()的代碼,具體如下:OS_STK*OSTaskStkInit(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT16U opt){ OS_STK*stk; Opt=opt; /*避免編譯器警告*/ Stk=ptos; /*獲取堆棧指針*/ /*建立任務(wù)環(huán)境,*/ *stk=(OS_STK)task; /*pc*/ *stk=(OS_STK)task; /*lr*/ *stk=0; /*r12*/ *stk=0; /*r11*/ *stk=0; /*r10*/ *stk=0; /*r9*/ *stk=0; /*r8*/ *stk=0; /*r7*/ *stk=0; /*r6*/ *stk=0; /*r5*/ *stk=0; /*r4*/ *stk=0; /*r3*/ *stk=0; /*r2*/ *stk=0; /*r1*/ *stk=(unsigned int)pdata; /*R0用作參數(shù)傳遞*/ *stk=(USER_USING_MODE|0x00); /*CPSR,允許IRQ,FIQ中斷*/ *stk=0; /*關(guān)中斷計(jì)數(shù)器OsEnterSum*/ Return(stk); } 由于任務(wù)和操作系統(tǒng)均運(yùn)行在SVC模式,中斷后返回仍回到SVC模式,故SPSR沒(méi)有用到,不必在堆棧里保存。OsEnterSum并不是CPU的寄存器,只是個(gè)人定義的一個(gè)全局變量,用來(lái)保存關(guān)中斷的次數(shù),這樣就可以進(jìn)行中斷嵌套了[30]。3. : (1) OSStartHighRdy()OSStart()函數(shù)調(diào)用此函數(shù)來(lái)使就緒任務(wù)中優(yōu)先級(jí)最高的任務(wù)開(kāi)始運(yùn)行。這個(gè)函數(shù)也用軟中斷功能完成,:__OSStartHighRdy MSR CPSR_c;(NoInt|SYS32Mode));告訴uC/OSII自身已經(jīng)運(yùn)行 LDR R4,=OSRunning MOV R5,1 STRB R5,[R4] BL OSTaskSwHook ;調(diào)用鉤子函數(shù) LDR R6,=OSTCBHighRdy LDR R6,[R6] B OSIntCtxSw_1 AREA SWIStacks,DATA,NOINIT,ALIGN=2 SvcStackSpace SPACE SVC_STACK_LEGTH*4;管理模式堆??臻g END (2)OSCtxSw() 任務(wù)級(jí)的切換OSCtxSw()是在任務(wù)調(diào)度器的最后調(diào)用的,內(nèi)核通過(guò)調(diào)用OS_TASK_SW()執(zhí)行軟中斷指令。其示意性代碼如下: Void OSCtxSw(void) { 保存處理器寄存器; 在當(dāng)前任務(wù)的任務(wù)控制塊中保存當(dāng)前任務(wù)的堆棧指針; OSTaskSwHook(); OSTCBCur=OSTCBHighRdy; OSPrioCur=OSPrioHighRdy; 得到將要重新開(kāi)始運(yùn)行的任務(wù)的堆棧指針; 從新任務(wù)的任務(wù)堆棧中恢復(fù)處理器所有寄存器的值; 執(zhí)行中斷返回指令; } (3)OSTickISR() uC/OSII要求用戶(hù)提供一個(gè)周期性的時(shí)鐘源來(lái)實(shí)現(xiàn)時(shí)間的延時(shí)和超時(shí)功能。ARM的定時(shí)器可以完成這一功能,其時(shí)鐘節(jié)拍ISR示意性代碼如下: Void OSTickISR(void) { 保存處理器寄存器; 中斷層次加1; 如果為第一層中斷則在當(dāng)前任務(wù)的任務(wù)控制塊中保存堆棧指針; 清中斷; 重新允許中斷(可選擇); 調(diào)用OSTimeTick()來(lái)維持內(nèi)部定時(shí); 中斷退出; 恢復(fù)處理器寄存器; 執(zhí)行中斷返回; } (4)OSIntCtxSw() 中斷退出函數(shù)通過(guò)調(diào)用OSIntCtxSw()在ISR中執(zhí)行任務(wù)切換功能。它與OSCtxSw()的區(qū)別只是由于ISR已保存了CPU的寄存器,而不再需要再在OSIntCtxSw()中再保存CPU寄存器。其示意性代碼如下:Void OSIntCtxSw(void) { 調(diào)用用戶(hù)定義的任務(wù)切換鉤子函數(shù); 當(dāng)前任務(wù)控制塊指針指向最高就緒優(yōu)先級(jí)任務(wù)控制塊; 當(dāng)前優(yōu)先級(jí)指針指向最高就緒優(yōu)先級(jí); 得到將要重新執(zhí)行的任務(wù)的堆棧指針; 從新任務(wù)堆棧中恢復(fù)所有處理器寄存器; 執(zhí)行中斷返回; }第五章 總結(jié)與展望 隨著嵌入式相關(guān)技術(shù)的迅速發(fā)展,根據(jù)實(shí)際應(yīng)用的需要設(shè)計(jì)出特定的嵌入式最小系統(tǒng)和應(yīng)用系統(tǒng),是嵌入式系統(tǒng)設(shè)計(jì)的關(guān)鍵。目前在嵌入式系統(tǒng)開(kāi)發(fā)的過(guò)程中,開(kāi)發(fā)者往往把大量精力投入到嵌入式微處理器MPU(Micro Processing Unit)與眾多外設(shè)的連接方式以及應(yīng)用代碼的開(kāi)發(fā)之中,而忽視了對(duì)嵌入式系統(tǒng)最基本、最核心部分的研究。 當(dāng)前在嵌入式領(lǐng)域中,ARM(Advanced RISC Machines)處理器被廣泛應(yīng)用于各種嵌入式設(shè)備中。由于ARM嵌入式體系結(jié)構(gòu)類(lèi)似并且具有通用的外圍電路,同時(shí)ARM內(nèi)核的嵌入式最小系統(tǒng)的設(shè)計(jì)原則及方法基本相同,這使得對(duì)嵌入式最小系統(tǒng)的研究在整個(gè)系統(tǒng)的開(kāi)發(fā)中具有著至關(guān)重要的意義。本文以基于ARM的嵌入式最小系統(tǒng)為平臺(tái),從硬件和軟件兩方面對(duì)嵌入式最小系統(tǒng)的架構(gòu)進(jìn)行了研究,硬件方面主要介紹了基于ARM的最小系統(tǒng)設(shè)計(jì)的構(gòu)建,軟件方面重點(diǎn)就嵌入式最小系統(tǒng)的uC/OSII做了簡(jiǎn)單的分析。最小系統(tǒng)的硬件結(jié)構(gòu)主要是設(shè)計(jì)了最小系統(tǒng)的硬件模塊:電源、時(shí)鐘模塊、JTAG調(diào)試模塊、存儲(chǔ)模塊、復(fù)位模塊。此外還對(duì)鍵盤(pán)及顯示器進(jìn)行了簡(jiǎn)單的介紹。并對(duì)以上的系統(tǒng)硬件進(jìn)行了選型。其次,還對(duì)于系統(tǒng)
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1