日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
在51系列單片機(jī)上實(shí)現(xiàn)非搶先式消息驅(qū)動(dòng)機(jī)制的RTOS
在51系列單片機(jī)上實(shí)現(xiàn)非搶先式消息驅(qū)動(dòng)機(jī)制的RTOS
 更新時(shí)間:2008-8-18 10:02:18  點(diǎn)擊數(shù):21
【字體: 字體顏色
息區(qū)”MSGARA中。 ;************************* ;名稱: GET_MSG ;功能:操作系統(tǒng)從消息隊(duì)列中取消息(如果消息隊(duì)列不為空),然后把取出的消息放置當(dāng)前消息區(qū)中 ;入口參數(shù):無(wú) ;出口參數(shù):A(TASKID), MSGARA(COMMAND, PARA1, PARA2), ;CY:當(dāng)CY=1,表示消息隊(duì)列為空 ;寄存器使用:A, B, PSW, R0, DPH, DPL ;************************* GET_MSG: PUSH〖〗PSW〖1〗MOV〖〗A, MSGCNT〖1〗CLR〖〗C〖1〗SUBB〖〗A, #01H〖1〗JC〖〗GET_MSG99〖〗;消息隊(duì)列空〖1〗MOV〖〗A, RPTR〖〗;測(cè)試消息隊(duì)列的讀指針是 ;否越界〖1〗ADD〖〗A, #MSGSIZE〖1〗CLR〖〗C〖1〗SUBB〖〗A, #MSGSIZE*MSGTOTAL〖1〗JC〖〗GET_MSG10;讀指針越界 MOV〖〗A, #0〖1〗MOV〖〗RPTR, A〖〗;重新調(diào)整讀指針到隊(duì)列頭〖1〗POP〖〗PSWGET_MSG10:MOV〖〗A, R0〖1〗PUSH〖〗ACC〖1〗MOV〖〗A, #MSGBUFFER〖1〗ADD〖〗A, RPTR〖1〗MOV〖〗R0, A〖1〗MOV〖〗A, @R0〖〗;TASKID -> A〖1〗INC〖〗R0〖1〗MOV〖〗MSGARA, @R0〖〗;COMMAND->(MSGARA)〖1〗INC〖〗 R0〖1〗MOV〖〗MSGARA+1, @R0〖〗;PARA1->(MSGARA+1)〖1〗INC〖〗R0〖1〗MOV〖〗MSGARA+2, @R0〖〗;PARA2->(MSGARA+2)〖1〗DEC〖〗MSGCNT〖1〗CLR〖〗C〖1〗POP〖〗ACC〖1〗MOV〖〗R0, AGET_MSG99: RET 消息發(fā)送函數(shù)SND_MSG在RTOS中被聲明成1個(gè)PUBLIC的函數(shù),供外部模塊調(diào)用。消息發(fā)送函數(shù)只是負(fù)責(zé)向消息隊(duì)列發(fā)送消息,入口參數(shù)TASKID、COMMAND、DPH、DPL分別放在寄存器A、B、DPH、DPL中。需要特別注意的是,在消息發(fā)送過(guò)程中,必須禁止任何中斷的發(fā)生,以免在發(fā)送消息到消息隊(duì)列的過(guò)程被中斷,同時(shí)在中斷返回前,中斷服務(wù)子程序又可能向消息隊(duì)列發(fā)送新的消息。這樣就會(huì)破壞消息的完整性而帶來(lái)災(zāi)難性的后果。 ;************************* ;名稱: SND_MSG ;功能:發(fā)送消息到操作系統(tǒng)的消息隊(duì)列,該函數(shù)被外部模塊調(diào)用 ;入口參數(shù): A(TASKID), B(COMMAND), DPH(PARA1), DPL(PARA2) ;出口參數(shù):無(wú) ;寄存器使用: A, B, DPH, DPL, PSW, R0 ;************************* SND_MSG: CLR〖〗EA〖〗;禁止中斷〖1〗PUSH〖〗DPL〖1〗MOV〖〗DPL, R0〖1〗PUSH〖〗DPL〖1〗PUSH〖〗ACC〖1〗PUSH〖〗PSW〖1〗MOV〖〗A, WPTR〖〗;測(cè)試消息隊(duì)列的寫指針是否越 ;界〖1〗ADD〖〗A, #MSGSIZE〖1〗CLR〖〗C〖1〗SUBB〖〗A, #MSGSIZE*MSGTOTAL〖1〗JC〖〗SND_MSG10;寫指針已經(jīng)越界 MOV〖〗A, #0〖1〗MOV〖〗WPTR, A〖〗;重新調(diào)整寫指針到隊(duì)列頭〖1〗POP〖〗PSWSND_MSG10: MOV〖〗A, #MSGBUFFER〖〗;消息隊(duì)列的首地址〖1〗ADD〖〗A, WPTR〖1〗MOV〖〗R0, A〖1〗POP〖〗ACC〖1〗MOV〖〗@R0, A〖〗;TASKID->消息隊(duì)列〖1〗INC〖〗R0〖1〗MOV〖〗@R0, B〖〗;COMMAND ->消息隊(duì)列〖1〗INC〖〗 R0〖1〗MOV〖〗@R0, DPH〖〗; PARA1 ->消息隊(duì)列〖1〗INC〖〗R0〖1〗POP〖〗B〖1〗POP〖〗DPL〖1〗MOV〖〗@R0, DPL〖〗; PARA2 ->消息隊(duì)列〖1〗INC〖〗MSGCNT〖〗;消息總數(shù)加1〖1〗MOV〖〗R0, B〖〗;恢復(fù)R0的原始值〖1〗SETB〖〗EA〖〗;開(kāi)放中斷〖1〗RET4 RTOS的定時(shí)處理 RTOS的定時(shí)處理是整個(gè)RTOS中相當(dāng)重要的一個(gè)環(huán)節(jié)。我們選用T0作為RTOS的定時(shí)器,定時(shí)周期為1ms。定時(shí)處理不僅提供系統(tǒng)時(shí)鐘和各種不同的延時(shí)時(shí)間,而且對(duì)消息隊(duì)列的操作、任務(wù)間的同步和長(zhǎng)時(shí)任務(wù)(指執(zhí)行時(shí)間超過(guò)1ms的任務(wù))的分割都必須使用到定時(shí)處理。 RTOS的定時(shí)處理提供的延時(shí)時(shí)間間隔都是以1ms的定時(shí)周期作為基準(zhǔn),而提供給所需要的任務(wù)使用。舉例來(lái)說(shuō),按鍵常常需要進(jìn)行消除抖動(dòng)的處理,延時(shí)時(shí)間通常在10ms以上,在按鍵處理任務(wù)中,就有1個(gè)子函數(shù)KY_10ms專門負(fù)責(zé)消除抖動(dòng)的延時(shí)處理。 在RTOS中專門設(shè)置1個(gè)系統(tǒng)時(shí)鐘CLOCK,由2個(gè)字節(jié)組成。高位字節(jié)為CLKH;低位字節(jié)為CLKL,用BCD碼表示。每當(dāng)1ms定時(shí)時(shí)間到,CLOCK加1,這樣可以提供1~9999ms的延時(shí)時(shí)間間隔。系統(tǒng)時(shí)鐘CLOCK的結(jié)構(gòu)如圖2所示。 圖2系統(tǒng)時(shí)鐘CLOCK的結(jié)構(gòu)RTOS定周期處理子程序: ;************************* ;名稱: OS_CYCLE ;功能: OS定周期處理子程序 ;入口參數(shù):無(wú) ;出口參數(shù): A,DPTR ;寄存器使用: A, DPTR ;************************* OS_CYCLE: MOV〖〗A, CLKL〖1〗ADD〖〗A, #1〖1〗DA〖〗A〖〗;二~十進(jìn)制調(diào)整〖1〗MOV〖〗CLKL, A〖1〗MOV〖〗A, CLKH〖1〗ADDC〖〗A, #0〖1〗DA〖〗A〖〗;二~十進(jìn)制調(diào)整〖1〗MOV〖〗CLKH, A〖1〗MOV〖〗A, CLKL〖1〗ANL〖〗A, #0FH〖1〗MOV〖〗DPTR, #CYCLE_TBL〖1〗LCALL〖〗TBL_JMP〖〗;跳轉(zhuǎn)到相應(yīng)的延時(shí)處理〖1〗RET長(zhǎng)時(shí)任務(wù)的分割也常常使用到定時(shí)處理。如果RTOS的定時(shí)基準(zhǔn)設(shè)定為1ms,那么,1個(gè)任務(wù)的完成時(shí)間(實(shí)際上精確地說(shuō)應(yīng)該是RTOS的1次循環(huán)加上可能發(fā)生中斷處理的時(shí)間總和)不能超過(guò)2ms,否則會(huì)使系統(tǒng)定時(shí)周期少1ms。這樣就必須把1個(gè)長(zhǎng)時(shí)任務(wù)分割成一個(gè)個(gè)短時(shí)任務(wù),每個(gè)短時(shí)任務(wù)執(zhí)行時(shí)間不超過(guò)1ms。前一個(gè)短時(shí)任務(wù)返回之前向RTOS發(fā)送一條消息,TASKID仍為該任務(wù)的TASKID。但是COMMAND參數(shù)變?yōu)橄乱粋(gè)短時(shí)任務(wù)的COMMAND,PARA1和PARA2則存放下一個(gè)短時(shí)任務(wù)執(zhí)行時(shí)所需要的參數(shù)。當(dāng)RTOS從消息隊(duì)列中取出這條消息時(shí),就可以喚醒下一個(gè)短時(shí)任務(wù)繼續(xù)執(zhí)行,這樣直到該長(zhǎng)時(shí)任務(wù)執(zhí)行完畢。 五、核心管理模塊 核心管理模塊是基于RTOS上的一個(gè)重要任務(wù)模塊。主要功能是記錄當(dāng)前RTOS的一些關(guān)鍵參數(shù)和狀態(tài);提供一些公共功能函數(shù)供外部任務(wù)調(diào)用;協(xié)調(diào)各個(gè)任務(wù)的運(yùn)行。限于篇幅,這里不作詳細(xì)的介紹。 本文介紹的基于非搶先式消息驅(qū)動(dòng)機(jī)制的RTOS編譯后的二進(jìn)制代碼只有360個(gè)字節(jié)左右(注:不含核心管理模塊),占用內(nèi)部RAM大約60個(gè)字節(jié) 左右(消息隊(duì)列為10個(gè)消息,位于內(nèi)部RAM中)。該RTOS已經(jīng)應(yīng)用于實(shí)際系統(tǒng),在提高軟件的模塊化、增強(qiáng)軟件運(yùn)行的可靠性等方面有很大的優(yōu)越性。MES 參考資料 1屠祈,屠立德.操作系統(tǒng)基礎(chǔ).北京:清華大學(xué)出版社, 2馬忠梅,籍順心,張凱,馬巖.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì).北京:北京航空航天大學(xué)出版社 3余永權(quán).ATMEL 89系列(MCS\ 51兼容)Flash單片機(jī)原理及應(yīng)用.北京:電子工業(yè)出版社 4張國(guó)峰.Windows應(yīng)用程序設(shè)計(jì)——原理、方法和技巧.北京:電子工業(yè)出版社 5Franklin Software, Inc.RTX51 REFERENCE GUIDE.
  • 上一篇: 在單片機(jī)平臺(tái)上建立規(guī)范化的液晶顯示接口
  • 下一篇: VxWorks操作系統(tǒng)及實(shí)時(shí)多任務(wù)程序設(shè)計(jì)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1