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

正文內(nèi)容

基于stm32的嵌入式操作系統(tǒng)程序設(shè)計(jì)及實(shí)現(xiàn)畢業(yè)論文(編輯修改稿)

2025-07-23 09:30 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 OS_CPU_SR_Restore()。 OSStartHighRdy()。 OSCtxSw()。 OSIntCtxSw()。 函數(shù)實(shí)現(xiàn) 武昌工學(xué)院畢業(yè)論文(設(shè)計(jì))專用稿紙9(1)關(guān)中斷函數(shù)(OS_CPU_SR_Save()) 即先保存當(dāng)前的狀態(tài)寄存器然后關(guān)中斷。故關(guān)中斷實(shí)現(xiàn)代碼如下 OS_CPU_SR_Save MRS R0, PRIMASK; CPSID I BX LR 這也是宏OS_ENTER_CRITICAL() 的最終實(shí)現(xiàn)。 (2)恢復(fù)中斷函數(shù)(OS_CPU_SR_Restore() ) 這是宏OS_EXIT_CRITICAL() 的最終實(shí)現(xiàn)。也就是將狀態(tài)寄存器的內(nèi)容從R0中恢復(fù),然后跳轉(zhuǎn)回去。此函數(shù)完成的將中斷狀態(tài)恢復(fù)到關(guān)中斷前的狀態(tài)。其代碼如下: OS_CPU_SR_Restore MSR PRIMASK, R0 BX LR CortexM3處理器有單獨(dú)的指令來(lái)打開(kāi)或者關(guān)閉中斷,所以這兩個(gè)函數(shù)實(shí)現(xiàn)起來(lái)很簡(jiǎn)單。 (3)啟動(dòng)最高優(yōu)先級(jí)任務(wù)運(yùn)行(OSStartHighRdy()) OSStart()調(diào)用OSStartHighRdy()來(lái)啟動(dòng)最高優(yōu)先級(jí)任務(wù)的運(yùn)行,從而啟動(dòng)整個(gè)系統(tǒng)。OSStartHighRdy()主要完成以下幾項(xiàng)工作: ① 為任務(wù)切換設(shè)置PendSV的優(yōu)先級(jí);② 為第一次任務(wù)切換設(shè)置棧指針為0;③ 設(shè)置OSRunning = TRUE,以表明系統(tǒng)正在運(yùn)行;④ 觸發(fā)一次 PendSV,打開(kāi)中斷等待第一次任務(wù)的切換。 (4)任務(wù)級(jí)和中斷級(jí)任務(wù)切換 因?yàn)镃ortexM3 進(jìn)入異常自動(dòng)保存寄存器 R3R0,R12,LR ,PC和xPSR這種的特殊機(jī)制,這兩個(gè)函數(shù)都是觸發(fā)一次PendSV來(lái)實(shí)現(xiàn)任務(wù)的切換。首先是微處理器自動(dòng)保存上面提到的寄存器,然后把當(dāng)前的堆棧指針保存到任務(wù)的棧中,將要切換的任務(wù)的優(yōu)先級(jí)和任務(wù)控制塊的指針賦值給運(yùn)行時(shí)的最高優(yōu)先級(jí)指針和運(yùn)行時(shí)的任務(wù)控制塊指針,最后再把要運(yùn)行的任務(wù)的堆棧指針賦值給微處理器的堆棧指針,這樣就可以退出中斷服務(wù)程序了。中斷服務(wù)程序退出的時(shí)候?qū)⒆詣?dòng)出棧R3R0 ,R12 ,LR ,PC 和xPSR 。具體的PendSV服務(wù)程序的偽代碼如下: OS_CPU_PendSVHandler : // 進(jìn)入異常,處理器自動(dòng)保存R3R0,R12,LR,PC 和xPSR if (PSP != NULL) //判斷不是開(kāi)始第一次任務(wù) { 武昌工學(xué)院畢業(yè)論文(設(shè)計(jì))專用稿紙10保存R4R11到任務(wù)的堆棧; OSTCBCurOSTCBStkPtr = SP。 //保存堆棧的指針到任務(wù)控制塊 } OSTakSwHook()。 //實(shí)現(xiàn)用戶擴(kuò)展功能而定義的鉤子 OSPrioCur = OSPrioHighRdy。 //設(shè)置運(yùn)行任務(wù)為最高優(yōu)先級(jí)就緒任務(wù) OSTCBCur = OSTCBHighRdy。 // 設(shè)置運(yùn)行的任務(wù)控制塊為最高 //就緒任控制塊務(wù) PSP = OSTCBHighRdyOSTCBStkPtr。//將要切換的任務(wù)堆棧指 // 針賦給微處理器的堆棧指 // 針從而實(shí)現(xiàn)切換 從堆棧中恢復(fù) R4R11。 從異常中返回; // 退出異常,處理器自動(dòng)恢復(fù)R3R0,R12,LR,PC 和xPSR 這樣很容易寫(xiě)出PendSV中斷服務(wù)程序的代碼了。 (5)與CPU 相關(guān)的C 函數(shù)和鉤子函數(shù)( ) 這個(gè)文件中包含10個(gè)函數(shù),具體如下: OSInitHookBegin ()。 OSInitHookEnd ()。 OSTaskCreateHook ()。 OSTaskDelHook ()。 OSTaskIdleHook ()。 OSTaskStatHook ()。 OSTaskStkInit ()。 OSTaskSwHook ()。 OSTCBInitHook ()。 OSTimeTickHook ()。 這10個(gè)函數(shù)有9個(gè)是為了擴(kuò)展用戶功能而定義的鉤子函數(shù),這些鉤子函數(shù)可以都為空函數(shù),也可以加上一些用戶需要的擴(kuò)展功能。另外一個(gè)不是鉤子函數(shù),它是OSTaskStkInit()。這個(gè)函數(shù)的功能是當(dāng)一個(gè)任務(wù)被創(chuàng)建時(shí),它完成這個(gè)任務(wù)堆棧的初始化。這個(gè)函數(shù)首先將用戶為任務(wù)分配的堆棧頂?shù)刂焚x值給一個(gè)棧指針變量,然后再通過(guò)這個(gè)棧指針向任務(wù)的棧空間寫(xiě)入初值。這個(gè)初值無(wú)關(guān)緊要,為0就可以了。這個(gè)函數(shù)的代碼時(shí)下如下: OS_STK *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT16U opt) { OS_STK *stk。 (void)opt。 //防止編譯器報(bào)錯(cuò) stk = ptos。 // 將棧頂?shù)刂焚x值給棧指針變量 武昌工學(xué)院畢業(yè)論文(設(shè)計(jì))專用稿紙11 // 以進(jìn)入異常的順序來(lái)給棧賦初值 *(stk) = (INT32U)0x00000000L。 //xPSR *(stk) = (INT32U)task。 //Entry Point *(stk) = (INT32U)0x00000000L。 // R14 (LR) *(stk) = (INT32U)0x00000000L。 //R12 *(stk) = (INT32U)0x00000000L。 //R3 *(stk) = (INT32U)0x00000000L。 // R2 *(stk) = (INT32U)0x00000000L。 // R1 *(stk) = (INT32U)p_arg。 //R0 : 傳遞的參數(shù) // 剩下的寄存器初始化 *(stk) = (INT32U)0x00000000L。 // R11 *(stk) = (INT32U)0x00000000L。 //R10 *(stk) = (INT32U)0x00000000L。 // R9 *(stk) = (INT32U)0x00000000L。 //R8 *(stk) = (INT32U)0x00000000L。 //R7 *(stk) = (INT32U)0x00000000L。 // R6 *(stk) = (INT32U)0x00000000L。 // R5 *(stk) = (INT32U)0x00000000L。 // R4 return (stk)。 } 其他的鉤子函數(shù)都為空函數(shù)。這樣,整個(gè)移植的代碼就介紹完了。整個(gè)移植的過(guò)程非常容易。剩下的工作就是編寫(xiě)用戶任務(wù),并在開(kāi)發(fā)板上驗(yàn)證,以此來(lái)驗(yàn)證該移植方案是可行的和成功的。武昌工學(xué)院畢業(yè)論文(設(shè)計(jì))專用稿紙123 LCD 屏程序設(shè)計(jì)及調(diào)試 工具概述RVMDK 源自德國(guó)的 KEIL 公司,是 RealView MDK 的簡(jiǎn)稱。RealView MDK 集成了業(yè)內(nèi)最領(lǐng)先的技術(shù),支持 ARMARM9 和 CortexM3 核處理器,自動(dòng)配置啟動(dòng)代碼,集成 Flash 燒寫(xiě)模塊,強(qiáng)大的 Simulation 設(shè)備模塊,性能分析等功能。 keil4 工程建立以及仿真方法(1)新建工程。打開(kāi) MDK 軟件,選擇 Project→New uVision Project 菜單項(xiàng),新建一個(gè)文件夾名為“畢業(yè)設(shè)計(jì) ”,保存,則彈出器件選擇對(duì)話框,這里選擇 STM32F103RB。單擊“OK” 按鈕,則彈出一個(gè)對(duì)話框加載啟動(dòng)文件到工程中。打開(kāi)“畢業(yè)設(shè)計(jì) ”文件夾,在里面添加子文件夾(2)添加系統(tǒng)文件與工程管理?;氐健爱厴I(yè)設(shè)計(jì) ”文件夾中,把系統(tǒng) SYSTEM 文件夾(delay,sys,usart 文件夾)復(fù)制過(guò)來(lái),再建立 main 和 hardware 文件夾用于主函數(shù)和各外設(shè)資源函數(shù)?;氐焦こ讨校c(diǎn)擊 manage ponents,添加工程中的文件,進(jìn)行分類管理工程。(3)最后新建 main 文件,在編輯區(qū)寫(xiě)代碼。 硬件平臺(tái)紹ALIENTEK MiniSTM32 選擇的是 STM32F103RBT6 作為MCU,STM32F103 的型號(hào)眾多,作為一款低端開(kāi)發(fā)板,選擇 STM32F103RBT6 是最佳的選擇。128K FLASH、20K SRAM、2 個(gè) SPI、3 個(gè)串口、1 個(gè) USB 、1 個(gè) CAN、2 個(gè) 12 位的 ADC、RTC 、51 個(gè)可用 IO腳,這樣的配置無(wú)論放到那里都是很不錯(cuò)的了,更重要的是其價(jià)格,18元左右的零售價(jià),相對(duì)其他芯片配置及價(jià)格,所以我們選擇了它作為我們的主芯片。BOOT1 用于設(shè)置 STM32 的啟動(dòng)方式,其對(duì)應(yīng)啟動(dòng)模式如表 所示:表 BOOT0、BOOT1 啟動(dòng)模式表BOOT0 BOOT1 啟動(dòng)模式 說(shuō)明0 X 用戶閃存存儲(chǔ)器 用戶閃存存儲(chǔ)器,也就是 FLASH 啟動(dòng)1 0 系統(tǒng)存儲(chǔ)器 系統(tǒng)存儲(chǔ)器啟動(dòng),用于串口下載1 1 SRAM 啟動(dòng) SRAM 啟動(dòng),用于在 SRAM 中調(diào)試代碼按照表 ,一般情況下如果我們想用用串口下載代碼,則必須配置BOOT0 為 1,BOOT1 為 0,而如果想讓 STM32 一按復(fù)位鍵就開(kāi)始跑代碼,則需要配置 BOOT0 為 0,BOOT1 隨便設(shè)置都可以。ALIENTEK 這款開(kāi)發(fā)板專門(mén)設(shè)計(jì)了一鍵下載電路,通過(guò)串口的 DTR 和 RTS 信號(hào),來(lái)自動(dòng)配置 BOOT0 和 武昌工學(xué)院畢業(yè)論文(設(shè)計(jì))專用稿紙13BOOT1,因此不需要用戶來(lái)手動(dòng)切換他們的狀態(tài),直接串口下載和軟件自動(dòng)控制,可以非常方便的下載代碼。 P3 和 P1 分別用于 PORTA 和 PORTB 的 IO 口引出,其中 P2 還有部分用于 PORTC 口的引出。PORTA 和 PORTB 都是按順序排列的,這樣設(shè)計(jì)的目的是為了讓大家更方便地與外部設(shè)備連接。P2 連接了 DS18B20 的數(shù)據(jù)口以及紅外傳感器的數(shù)據(jù)線,它們分別對(duì)應(yīng)著 PA0 和 PA1,只需要 19 通過(guò)跳線帽將 P2和 P3 連接起來(lái)就可以使用了。這里不直接連在一起的原因有二:1,防止紅外傳感器和 DS18B20 對(duì)這兩個(gè) IO 口作為其他功能使用的時(shí)候的影響;2,DS18B20 和紅外傳感器還可以用來(lái)給其他板子提供輸入,等于我們的板子為別的板子提供了紅外接口和溫度傳感器,在調(diào)試的時(shí)候,還是蠻有用的。P4口連接了 PL2303 的串口輸出,對(duì)應(yīng)著 S
點(diǎn)擊復(fù)制文檔內(nèi)容
外語(yǔ)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1