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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ucOS學習筆記(2)——多任務是如何實現(xiàn)的

          ucOS學習筆記(2)——多任務是如何實現(xiàn)的

          作者: 時間:2016-11-10 來源:網絡 收藏
          ucOS是一個搶占式多任務操作系統(tǒng),其核心就是人物調度機制,該機制保證了多個任務在一個MCU上并發(fā)執(zhí)行。
          關于多任務實現(xiàn)我們就不得不談一談一段程序運行的上下文。所謂程序運行的上下文就是指一段代碼(一般以函數為基本單位)運行過程中需要使用到的資源,這個資源被我稱之為上下文。這些資源包括當前系統(tǒng)的基本工作寄存器,函數使用到的零時變量,全局變量等等。當這些資源被給定后我們無論在何時去執(zhí)行一個給定的地址開始的代碼都將得到完全相同的結果。下邊以具體代碼為例講解該過程,以下代碼get_val為一個計算1到10累加和的函數,C代碼如下:
          unsigned char get_val(void)
          {
          unsigned char i = 0;
          unsigned char temp = 0;
          for(i = 0; i < 10; i++)
          temp += i;
          return temp;
          }
          要了解上下文信息我們需要查看匯編代碼,匯編代碼如下:
          get_val:
          C:0x0003 E4 CLR A
          C:0x0004 FF MOV R7,A
          C:0x0005 FE MOV R6,A
          C:0x0006 EF MOV A,R7
          C:0x0007 2E ADD A,R6
          C:0x0008 FE MOV R6,A
          C:0x0009 0F INC R7
          C:0x000A BF0AF9 CJNE R7,#0x0A,C:0006
          C:0x000D AF06 MOV R7,0x06
          C:0x000F 22 RET
          查看匯編代碼我們發(fā)現(xiàn)該函數使用的系統(tǒng)資源僅僅為累加器A,寄存器R7,R6。因此在任何時間我們離開該函數,只要在重新執(zhí)行函數時恢復離開時的上下文,那么函數執(zhí)行完畢都能夠得到正確的結果。例如當執(zhí)行到C:0x0008處(0008指令還沒有被執(zhí)行),此時我們由于某種原因改變了PC的值指向了代碼段Q(操作系統(tǒng)稱這一過程為任務切換),當Q代碼段執(zhí)行完畢后再次返回到0008處執(zhí)行,此時如果恢復R7,R6,和A那么我們將得到一致的結果。
          操作系統(tǒng)就是通過在改變PC時保存當前上下文并裝載目標PC處的上下文的方式實現(xiàn)了多任務并發(fā)執(zhí)行。當然,操作系統(tǒng)所進行的上下文保存就并不只是保存R6,R7了,它不會根據哪個具體的任務是用了哪些具體資源而保存這個任務,它會采用一個統(tǒng)一的方式把任何任務可能是用到的任何資源都保存起來,雖然這樣浪費了系統(tǒng)的存儲空間但是它缺保持了任務切換的統(tǒng)一性和簡單性。
          在保存上下文時有幾個需要注意的問題:
          1.是否保存獨占資源的上下文?比如系統(tǒng)當前一共有20個任務,只有任務8使用定時器2,那么在保存上下文時需要保存定時器2的相關配置么?
          2.保存上下文時不會保存全局變量,因為全局變量本身就是用來傳遞信息用的,允許在其他地方被改變從而帶給當前程序信息。
          3.函數內部的零時變量不需要保存上下文,因為該變量時被存儲到函數自身的棧上的。
          這樣系統(tǒng)根據某一種機制在特定時刻保存當前上下文切換的目標代碼執(zhí)行實現(xiàn)了多任務,這種機制被稱為任務調度算法。 ucOS通過兩種途徑實現(xiàn)任務調度:中斷和任務調用等待函數。 中斷又包括系統(tǒng)tick中斷和其他任務中斷。


          關鍵詞: ucOS多任

          評論


          技術專區(qū)

          關閉
          看屁屁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); })();