久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

詳解基于51單片機(jī)的small rtos(2)

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年01月15日   【字體:

    我們繼續(xù)上篇。上篇我漏了個(gè)開總中斷忘說了。
  開中斷。  對(duì)了調(diào)試的時(shí)候吧任務(wù)A的睡眠給隱掉。因?yàn)橐徊揭徊絹韺W(xué)習(xí)嘛!  當(dāng)開了中斷,于是開始執(zhí)行定時(shí)器0中斷,定時(shí)器中的代碼一個(gè)是OSTimeTick();  執(zhí)行任務(wù)時(shí)間片的分配。這里注意了,我自個(gè)寫的時(shí)候調(diào)試出現(xiàn)問題才發(fā)現(xiàn)的。他是先判斷是否有時(shí)間片,有則--,然后再判斷是否為0為0則 OSIntSendSignal(TaskId)。  OSIntSendSignal就是把任務(wù)置為就緒的沒什么,有必要提的就是關(guān)中斷和開中斷。這個(gè)為了避免產(chǎn)生中斷導(dǎo)致不可預(yù)知的錯(cuò)誤。 然后回到定時(shí)器0的中斷服務(wù)程序中,執(zhí)行OSIntExit()。然后轉(zhuǎn)到==》OSIntCtxSw ==》  C_OSCtxSw  ==》LoadCtx    然后就切換到任務(wù)B 。現(xiàn)在我開始慢慢的分析這幾個(gè)函數(shù),因?yàn)檫@里是需要慢慢講解的。首先從原理上講下。定時(shí)器中斷時(shí)依次把
PC+ACC+B+DPTR+PWD+r0-r7  共15個(gè)字節(jié) ,然后OSIntCtxSw 這個(gè)函數(shù)會(huì)判斷當(dāng)前任務(wù)是空閑任務(wù)的還是任務(wù)ABC中一個(gè),如果是任務(wù)函數(shù)則棧頂指針  sp=sp-4; 如果是空閑的就sp=sp-17 置相應(yīng)的中斷方式標(biāo)志位     OSCtxSw  內(nèi)存塊的重新布局。 LoadCtx    加載任務(wù)環(huán)境 。 
 現(xiàn)在開始從代碼調(diào)試中看下。 
定時(shí)器0中斷前                                                                               

        
 

 中斷后    然后查看  內(nèi)存 按推斷應(yīng)該是sp-15 個(gè)字節(jié)  =i:0x16     如圖   你可以看出 中斷服務(wù)程序保存環(huán)境是按什么次序入棧的。帥吧~~~

然后執(zhí)行OSIntExit()壓入    0x0256  

     

 

   15+2 =17個(gè)字節(jié)然后  再跳轉(zhuǎn)到 OSIntCtxSw  

  17+2 個(gè)字節(jié) =2+13+4

 

 這里開始用51

匯編寫的,這里是經(jīng)常執(zhí)行的代碼必須有效率。 在OSIntCtxSw    判斷當(dāng)前任務(wù)是什么性質(zhì)的,現(xiàn)在這個(gè)是任務(wù)A隨意是sp=sp-4 并置中斷類型標(biāo)志位,清任務(wù)運(yùn)行標(biāo)志位,LMJP  OSCtxSw  首先壓入一個(gè)中斷計(jì)數(shù),然后開始吧 【前任務(wù)+1的存放地址 ----下個(gè)任務(wù)+1的地址】 這里有個(gè)第優(yōu)先級(jí)上還存放了個(gè)任務(wù)就是為符合這個(gè)處理方式。吧括號(hào)中的數(shù)據(jù)整個(gè)搬到上圖sp后面,然后吧修改后的函數(shù)首地址重新分配 OSTsakStackBotton存放   然后把下個(gè)任務(wù)切換成當(dāng)前任務(wù),他的內(nèi)存空間就是現(xiàn)在SP ---任務(wù)+1之間的空間。  這里的堆棧是從低到高分配的和PC里不一樣。然后還做了個(gè)清中斷標(biāo)志的操作  壓入  LoadCtx    的函數(shù)地址的棧然后RETI 這個(gè)主要是清掉中斷標(biāo)志,然后跳轉(zhuǎn)到環(huán)境加載函數(shù) 。然后LoadCtx    就把堆棧中下個(gè)任務(wù)的地址直接RET返回給$P于是就切換到下個(gè)任務(wù)了。 優(yōu)先級(jí)低的也差不對(duì)這樣處理的。

 

為了模擬跳轉(zhuǎn)到任務(wù)B   在中斷前加  extern uint8 OSTaskRuning;  在 OSIntExit(); 前+OSTaskRuning &=~OSMapTbl[0];  這樣就模擬跳轉(zhuǎn)到任務(wù)B

  嘿嘿,不好意思 +了那么入棧的數(shù)據(jù)就有變化了。但是數(shù)目應(yīng)該沒變,我就不重新截圖了。

sp 0x28  ,

OSIntCtxSw 執(zhí)行后SP-4


 

放B的地址可以通過

 


 

看到i:0xF7是存儲(chǔ)的B的首地址,


 

 

數(shù)據(jù)塊應(yīng)該是 【A+1】-    【B+1】之間的數(shù)據(jù)整個(gè)搬到當(dāng)前sp+1后面 搬移后的內(nèi)存分布 


 

 

后面  中斷計(jì)數(shù) 00  +搬過來的B-C間的2個(gè)字節(jié) C7  03這個(gè)正好是B任務(wù)的首地重新修改存放函數(shù)首地址的數(shù)組

 

 
 

這里可以跳轉(zhuǎn)到LoadCtx     吧任務(wù)切到任務(wù)B中。 

至此通過中斷任務(wù)切換已經(jīng)完畢,此時(shí)可以向下如果任務(wù)中有數(shù)據(jù)在其中,那么這樣做會(huì)不會(huì)丟失數(shù)據(jù),其實(shí)仔細(xì)想想就可以了解,不會(huì)的。
本例源代碼下載:http://www.zg4o1577.cn/f/small_rtos1.12.1.zip


接下篇:

    這篇就講解信號(hào)來模擬軟中斷,切換任務(wù)。
     吧上篇的操作權(quán)清掉,然后程序到任務(wù)A后會(huì)通過睡眠信號(hào),進(jìn)入OSWait()處理。這里程序主動(dòng)放棄任務(wù)的使用CPU的權(quán)利 OSClearSignal (),OSSched()來進(jìn)入到OSCtxSw  這個(gè)函數(shù)中,然后他來設(shè)置中斷的性質(zhì)標(biāo)志位。==》C_OSCtxSw  ==》LoadCtx  加載環(huán)境來達(dá)到切換任務(wù)的目的。
     這個(gè)沒上面的那個(gè)復(fù)雜,就是在LoadCtx  的時(shí)候會(huì)根據(jù)中斷的標(biāo)志位來跳過寄存器的恢復(fù)。因?yàn)檐浿卸问遣粫?huì)吧寄存器的數(shù)據(jù)保存到堆棧中這是為什么呢?嘿嘿,這個(gè)讓我糾結(jié)了半小時(shí),其實(shí)很簡單。他這個(gè)事主動(dòng)放棄的,如果再次執(zhí)行就是重新運(yùn)行這個(gè)任務(wù),那么這個(gè)任務(wù)中用到得數(shù)據(jù)部就全初始化了嗎。嘿嘿,所以沒必要保存寄存器中的數(shù)據(jù)。
     呵呵這個(gè)我就不截圖也不具體說了,有了上篇這個(gè)應(yīng)該很快就能看明白。信號(hào)量可能更新慢了點(diǎn),因?yàn)楸救俗约簩懙拇a才寫到這里而已,就在出差前才調(diào)試好的。當(dāng)然我寫的有點(diǎn)亂很多變量都是自起的名字,而且還加了自己想到得一些奇怪的想法的代碼,這代碼我不提供,所以我按RTOS代碼解析每步的。

 

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 国产精品视频在线免费观看 | 岛国av一区二区三区 | 国产视频日韩 | 欧美色综合一区二区三区 | 成人免费视频观看 | 欧美国产精品久久久 | 免费福利视频一区二区三区 | 日韩在线一区二区 | 天天夜碰日日摸日日澡 | 女人毛片a毛片久久人人 | 黑人巨大精品欧美一区二区免费 | 在线天堂免费中文字幕视频 | 91大神在线资源观看无广告 | 亚洲欧美综合精品久久成人 | 精品99久久久久久 | 日韩三区 | 亚洲高清在线观看 | 在线观看视频h | 久久久久久毛片免费观看 | 国产精品综合视频 | 午夜小电影 | 免费观看a级毛片在线播放 黄网站免费入口 | 琪琪午夜伦伦电影福利片 | 国产精品123区 | 亚洲午夜精品 | 99久久成人| 天天天久久久 | 先锋av资源网 | www.v888av.com| 97av视频在线 | 国产精品视频一区二区三区, | 亚洲九九 | 狠狠操狠狠搞 | 一区二区三区四区不卡 | 亚洲欧美日韩久久久 | 95国产精品 | 久久午夜精品 | 91在线成人| 欧美激情综合 | 99久久久久 | 亚洲精品一区二区网址 |