亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于LPC1343的UCOS-II移植

        2013-04-29 00:00:00朱東亮
        中國新通信 2013年17期

        【摘要】本文首先介紹了LPC1343的硬件架構(gòu)和UCOS-II實(shí)時(shí)操作系統(tǒng)的特點(diǎn),最后介紹了UCOS-II在LPC1343上移植的方法和注意事項(xiàng)。

        【關(guān)鍵詞】LPC1343UCOS-II實(shí)時(shí)操作系統(tǒng)

        [Abstract]The document introduced the hardware structure of LPC1343 and character of real-time Operating system、UCOS-II,then discussed the measures and matters needing attention to transplanting ucos-II.

        [Key word]LPC1343, UCOS-II, real-time OS

        本文以實(shí)時(shí)多任務(wù)操作系統(tǒng)UCOS-II為例,介紹了UCOS-II在LPC1343上的移植和應(yīng)用,本文首先介紹了LPC1343的體系機(jī)構(gòu),然后對(duì)UCOS-II的架構(gòu)進(jìn)行了簡單的描述,最后介紹了UCOS-II在LPC1343上的移植和使用方法。

        一、系統(tǒng)的硬件架構(gòu)

        LPC1343是飛利浦公司生產(chǎn)的基于第二代ARM Cortex-M3內(nèi)核的微控制器。最高運(yùn)行頻率達(dá)到72M. LPC1343配置有32KB的Flash存儲(chǔ)器、8KB的數(shù)據(jù)存儲(chǔ)器、集成了USB設(shè)備、1個(gè)快速模式I2 C接口、1個(gè)UART、4個(gè)通用定時(shí)器。

        內(nèi)嵌NVIC控制器,該中斷控制器可對(duì)低優(yōu)先級(jí)中斷進(jìn)行延時(shí),對(duì)外部中斷進(jìn)行有效控制。中斷向量表可重定位,具有軟中斷向量,適合于在使用操作系統(tǒng)時(shí)進(jìn)行模式切換。

        System Tick定時(shí)器,可產(chǎn)生固定的10ms中斷,適合于作為操作系統(tǒng)的時(shí)鐘信號(hào)。

        二、UCOS-II簡介

        UCOS-II是一個(gè)可裁減的、搶占式、實(shí)時(shí)多任務(wù)內(nèi)核,具有高度可移植性,特別適合于微處理器和控制器。UCOS-II絕大多數(shù)代碼使用ANSI C語言進(jìn)行開發(fā)。僅與CPU硬件相關(guān)部分是用匯編語言編寫的,總量約200行,目的是便于移植到任何一種CPU上。UCOS-II僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理,內(nèi)存管理和任務(wù)間的通信和同步等基本功能。不提供輸入輸出管理,文件系統(tǒng),網(wǎng)絡(luò)等額外的服務(wù)。用可戶根據(jù)需要自行實(shí)現(xiàn)。

        UCOS-II的架構(gòu)可以分為三層,底層為物理層,主要是嵌入式系統(tǒng)硬件的驅(qū)動(dòng)包括系統(tǒng)的時(shí)鐘信號(hào)。中間層為系統(tǒng)層,用于對(duì)任務(wù)的管理,它提供了郵箱,信號(hào)量,消息隊(duì)列同步信號(hào)。可以根據(jù)需要通過配置os_cfg_r.h里定義的宏對(duì)UCOS-II進(jìn)行裁剪。最高層為應(yīng)用層,使用者可根據(jù)系統(tǒng)提供的API函數(shù)創(chuàng)建任務(wù)完成應(yīng)用工作。

        三、移植的主要工作

        移植UCOS-II時(shí)主要解決以下幾個(gè)問題:第一.系統(tǒng)時(shí)鐘信號(hào)怎么產(chǎn)生;第二.初始的任務(wù)堆棧是什么結(jié)構(gòu),任務(wù)堆棧是遞增堆棧還是遞減堆棧;第三.哪些變量需要保存到堆棧;第四.怎么處理臨界段代碼;第五.任務(wù)之間如何切換。

        我們使用System Tick定時(shí)器作為系統(tǒng)的時(shí)鐘,時(shí)鐘頻率為100Hz,當(dāng)系統(tǒng)的任務(wù)已知時(shí),可以對(duì)該值進(jìn)行調(diào)節(jié)使系統(tǒng)的負(fù)荷和響應(yīng)速度達(dá)到一個(gè)平衡。發(fā)生中斷時(shí),系統(tǒng)對(duì)當(dāng)前的任務(wù)狀態(tài)進(jìn)行裁決,以決定是否要進(jìn)行任務(wù)切換。時(shí)鐘的初始化代碼可用C語言編寫。

        任務(wù)堆棧有兩種結(jié)構(gòu),遞減堆棧和遞增堆棧,遞減堆棧就是堆棧從高地址向低地址方向增長,遞增堆棧就是堆棧從低地址向高地址方向增長。LPC1343的堆棧為遞減堆棧。

        LPC1343在發(fā)生中斷時(shí),需要保存的寄存器依次有堆棧指針,xPSR狀態(tài)寄存器,鏈接寄存器R14,R12,R3-R0, R11-R4。當(dāng)然這些寄存器是否保存到堆棧里在實(shí)際中與中斷程序的內(nèi)容有關(guān),但我們?cè)谝浦睻COS時(shí)。必須假設(shè)新的任務(wù)將會(huì)使用到這些寄存器,因?yàn)椴僮飨到y(tǒng)要處理的任務(wù)對(duì)于我們來說是未知的。這個(gè)將在OSTaskStkInit函數(shù)中用到。

        UCOS-II的任務(wù)有5種狀態(tài),分別為睡眠態(tài),掛起態(tài),就緒態(tài),運(yùn)行態(tài),中斷態(tài)。任務(wù)一旦創(chuàng)建即進(jìn)入就緒態(tài),如果處于就緒態(tài)的任務(wù)優(yōu)先級(jí)比正在運(yùn)行的任務(wù)優(yōu)先級(jí)高,則發(fā)生中斷,優(yōu)先級(jí)高的任務(wù)得以運(yùn)行,而被中斷的任務(wù)則處于中斷態(tài),當(dāng)該高優(yōu)先級(jí)的任務(wù)執(zhí)行完畢且就緒任務(wù)的優(yōu)先級(jí)沒有中斷態(tài)任務(wù)的優(yōu)先級(jí)高時(shí),中斷態(tài)的任務(wù)重新進(jìn)入運(yùn)行態(tài)。當(dāng)運(yùn)行態(tài)的任務(wù)等待某事件發(fā)生時(shí)則進(jìn)入掛起態(tài)。處于掛起態(tài)的任務(wù)當(dāng)某事件發(fā)生時(shí)進(jìn)入就緒態(tài)。當(dāng)任務(wù)被刪除時(shí),進(jìn)入休眠態(tài)。處于中斷態(tài)的任務(wù)不能被刪除,否則將引起系統(tǒng)崩潰。

        任務(wù)的切換有兩種情況,第一種是高優(yōu)先級(jí)的任務(wù)因等待某事件的發(fā)生而請(qǐng)求掛起,使低優(yōu)先級(jí)的任務(wù)得以運(yùn)行,這種情況下通過調(diào)用OSCtxSw函數(shù)進(jìn)行任務(wù)切換。這種任務(wù)稱為任務(wù)級(jí)任務(wù);第二種情況是高優(yōu)先級(jí)的任務(wù)出現(xiàn),在System Tick中斷服務(wù)程序中直接切換到高優(yōu)先級(jí)的任務(wù),這種任務(wù)稱為中斷級(jí)任務(wù)。中斷級(jí)任務(wù)的切換通過OSIntCtxSw函數(shù)實(shí)現(xiàn)。OSCtxSw的示例代碼如下:

        OSCtxSw

        PUSH {R4, R5}

        LDR R4, =NVIC_INT_CTRL

        LDR R5, =NVIC_PENDSVSET;觸發(fā)軟件中斷

        STR R5, [R4]

        POP {R4, R5}

        BX LR

        OSIntCtxSw函數(shù)也由匯編語言實(shí)現(xiàn),由于代碼同OSCtxSw類似,這里不再列出。

        臨界段代碼指的是系統(tǒng)執(zhí)行的不可分割的代碼,這些代碼一旦執(zhí)行就不允許從中打斷,所以在執(zhí)行臨界段代碼前必須關(guān)中斷,在臨界段代碼執(zhí)行結(jié)束后必須立即開中斷,所以臨界段代碼必須精簡,以確保系統(tǒng)的運(yùn)行效率。進(jìn)入和退出臨界段代碼的例程如下:

        OS_ENTER_CRITICAL;進(jìn)入臨界段的示例代碼

        CPSID I;禁止所有中斷

        PUSH {R1,R2}

        LDR R1, =OsEnterSum;OsEnterSum++

        LDRB R2, [R1]

        ADD R2, R2, #1

        STRB R2, [R1]

        POP {R1,R2}

        BXLR

        OS_EXIT_CRITICAL;退出臨界段的示例代碼

        PUSH {R1, R2}

        LDR R1, =OsEnterSum;OsEnterSum--

        LDRB R2, [R1]

        SUB R2, R2, #1

        STRB R2, [R1]

        MOV R1, #0

        CMP R2, #0;如果OsEnterSum=0,使能中斷

        MSREQ PRIMASK, R1;恢復(fù)PRIMASK寄存器的值

        POP {R1, R2}

        BX LR

        任務(wù)切換時(shí)首先將當(dāng)前正在執(zhí)行的任務(wù)的狀態(tài)保存到當(dāng)前任務(wù)的任務(wù)堆棧中,從待運(yùn)行的新任務(wù)的任務(wù)堆棧中獲取該任務(wù)的運(yùn)行狀態(tài),執(zhí)行新任務(wù)。CPU的內(nèi)部寄存器越多,需要保存和獲取任務(wù)狀態(tài)時(shí)消耗的時(shí)間也越多,因此System Tick的最短時(shí)間不得小于這個(gè)切換所要消耗的時(shí)間。

        本文定義了3個(gè)任務(wù),分別為USB接收幀處理任務(wù),應(yīng)用處理任務(wù),USB發(fā)送幀任務(wù)處理。當(dāng)USB接收到應(yīng)用層的命令時(shí),進(jìn)行接收幀處理;提取有效命令,進(jìn)行應(yīng)用命令處理;回送響應(yīng)數(shù)據(jù)。任務(wù)之間通過郵箱進(jìn)行同步。

        OSTaskCreate (TaskUSBRecvFrameProcess, (void *)0,UsbRecvBuf[TASK_STK_SIZE-1], TASK_PRIO+5);

        OSTaskCreate (TaskFrameProcess,(void *)0,CmdProcessBuf[TASK_STK_SIZE×2],TASK_PRIO+7);

        OSTaskCreate(TaskUsbSendFrameProcess, (void *)0,UsbSendBuf[TASK_STK_SIZE-1], TASK_PRIO+4);

        經(jīng)過整體測(cè)試和壓力測(cè)試,系統(tǒng)運(yùn)行穩(wěn)定,達(dá)到預(yù)期功能。

        久久免费精品日本久久中文字幕 | 色欲色欲天天天www亚洲伊| 欧美成人精品一区二区综合| 欧美精品一区二区精品久久| 淫秽在线中国国产视频| 综合国产婷婷精品久久99之一 | 男女啪啪视频高清视频| 18黑白丝水手服自慰喷水网站| 国产人妻黑人一区二区三区| 国产aⅴ丝袜旗袍无码麻豆 | 无遮挡18禁啪啪羞羞漫画| 亚洲中文有码字幕青青| 国产精品久久久久久久y| 自拍偷区亚洲综合第一页| 免费无码又爽又刺激网站直播| 成人欧美一区二区三区a片| 爆乳日韩尤物无码一区| 国产成人精品一区二区三区av| 亚洲av无码乱码在线观看富二代| 中日av乱码一区二区三区乱码| 国产做床爱无遮挡免费视频| 亚洲福利二区三区四区| 在线观看视频播放| 911国产精品| 好爽要高潮了在线观看| 日韩人妻中文字幕高清在线| 亚洲av午夜福利精品一区二区| 最新亚洲人成网站在线| 精品少妇一区二区三区四区| 国产一区二区三区日韩精品 | 在线亚洲+欧美+日本专区| 麻豆精品国产免费av影片| 在线亚洲高清揄拍自拍一品区| 久久久久麻豆v国产精华液好用吗| av无码电影一区二区三区| 国产一区二区三区视频地址| 亚洲人精品亚洲人成在线| 国产女高清在线看免费观看| 国产三级c片在线观看| (无码视频)在线观看| 久久综合给合久久狠狠狠97色69|