<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > μC/OS-Ⅱ在MC9S12A64上的移植及應(yīng)用

          μC/OS-Ⅱ在MC9S12A64上的移植及應(yīng)用

          作者: 時(shí)間:2012-05-17 來(lái)源:網(wǎng)絡(luò) 收藏

          當(dāng)時(shí)鐘節(jié)拍中斷發(fā)生時(shí),CPU12會(huì)自動(dòng)把CPU寄存器推入堆棧,但并不包括存儲(chǔ)頁(yè)面寄存器PPAGE,如果單片機(jī)系統(tǒng)的尋址范圍超過(guò)64KB,需要通過(guò)給PPAGE賦值來(lái)區(qū)分不同的16KB地址,則需要把PPAGE也推入堆棧。OSTimtick()當(dāng)某任務(wù)的任務(wù)控制塊中的時(shí)間延時(shí)項(xiàng) OSTCBDly減到了零,這個(gè)任務(wù)就進(jìn)入了就緒態(tài)。OSIntExit()會(huì)調(diào)用中斷級(jí)的任務(wù)切換函數(shù)OSIntCtxSw()做任務(wù)切換,而不再執(zhí)行后面的指令。如果沒(méi)有更高優(yōu)先級(jí)的任務(wù)進(jìn)入就緒態(tài),則CPU會(huì)返回中斷前狀態(tài)。

          2.2.2 任務(wù)級(jí)任務(wù)切換

          OSCtxSW()實(shí)際上就是軟中斷服務(wù)子程序,軟中斷服務(wù)子程序向量地址必須指向OSCtxSW(),在連接文件中設(shè)置。如果當(dāng)前任務(wù)調(diào)用μC/OS-Ⅱ提供的系統(tǒng)服務(wù),并使得更高優(yōu)先級(jí)任務(wù)處于就緒狀態(tài),μC/OS-Ⅱ就會(huì)借助上面提到的向量地址找到OSCtxSw()。

          void OSCtxSw(void)

          {

          asm{

          ldaa ppage //將任務(wù)的存儲(chǔ)頁(yè)面寄存器推入堆棧

          psha

          ldx OSTCBCur // 保存被掛起任務(wù)的堆棧指針到任務(wù)控制塊

          sts 0,x

          }

          OSTaskSwHook(); // 如果有時(shí)間要求苛刻的任務(wù),可以通過(guò)用戶接口函數(shù)調(diào)用

          OSTCBCur = OSTCBHighRdy; // 將優(yōu)先級(jí)最高的就緒態(tài)任務(wù)的任務(wù)控制塊指針復(fù)制給當(dāng)前運(yùn)行的任務(wù)控制塊中

          OSPrioCur = OSPrioHighRdy;

          asm{

          ldx OSTCBCur // 找出新任務(wù)的堆棧指針

          lds 0,x // 裝入CPU的SP寄存器中

          pula

          staa ppage //恢復(fù)頁(yè)面寄存器

          nop

          rti

          }

          }

          2.3 信號(hào)量的建立與使用

          (1)首先到μC/OS-II配置文件OS_CFG.C中將OS_SEM_EN設(shè)置為1這樣μC/OS-II才能支持信號(hào)量。接著要調(diào)用OSSemCreate()函數(shù)建立該信號(hào)量,如果信號(hào)量是用于對(duì)共享資源的訪問(wèn),那么該信號(hào)量的初始值應(yīng)設(shè)為1。

          (2)等待信號(hào)量OSSemPend()函數(shù),它首先檢查指針pevent所指的任務(wù)控制塊是否是由OSSemCreate()。如果信號(hào)量當(dāng)前是可用的,將信號(hào)量的計(jì)數(shù)值減1,然后函數(shù)將“無(wú)錯(cuò)”錯(cuò)誤代碼返回給它的調(diào)用函數(shù)。如果信號(hào)量的計(jì)數(shù)值為0,則調(diào)用OSSemPend()函數(shù)的任務(wù)要進(jìn)入睡眠狀態(tài),等待另一個(gè)任務(wù)發(fā)出該信號(hào)量。OSSemPend()允許用戶定義一個(gè)最長(zhǎng)等待時(shí)間作為它的參數(shù),這樣可以避免該任務(wù)無(wú)休止地等待下去。如果該參數(shù)值為0,則該任務(wù)將一直等待下去。



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();