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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 自己做單片機(jī)實(shí)時(shí)操作系統(tǒng)1前言

          自己做單片機(jī)實(shí)時(shí)操作系統(tǒng)1前言

          作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
          操作系統(tǒng)在之前對(duì)于我自己還說(shuō)一直是一個(gè)很陌生的東西,不知道該如何的理解和定義。終于當(dāng)完成某些比較繁瑣的項(xiàng)目時(shí),發(fā)現(xiàn)多任務(wù)的操作系統(tǒng)是一個(gè)很好的東西。

          之前總是在看著別人怎么去實(shí)現(xiàn)一個(gè)操作系統(tǒng),最終有了自己去寫(xiě)一個(gè)的想法。按照ucOS的作者說(shuō)的一樣,操作系統(tǒng)最終就是一個(gè)保護(hù)寄存器和恢復(fù)寄存器的動(dòng)作。

          本文引用地址:http://www.ex-cimer.com/article/201612/324331.htm

          手上只有一個(gè)MCU飛思卡爾DG128的開(kāi)發(fā)板,然后就開(kāi)始寫(xiě)代碼吧。當(dāng)然要先練習(xí)一下自己的C 語(yǔ)言啦。

          1、理解一下函數(shù)指針先。
          我們知道每一個(gè)函數(shù)都有自己的一個(gè)指針
          void ProcFun1(void)
          那么ProcFun1就是一個(gè)指針。
          如下面一個(gè)我測(cè)試的程序:

          typedef void(*VOID_FUN_PTR)(void); 定義一個(gè)void*的類型
          void DelayTime(int duty)
          {
          while(duty--)
          {
          _FEED_COP(); /* feeds the dog */
          };
          }


          void FunTask1(void) {
          int i;
          for(i = 0;i < 8;i++)
          {
          PTP = 1<LED上顯示個(gè)流水燈。
          DelayTime(50000);
          }
          }
          void main(void) {
          /* put your own code here */
          VOID_FUN_PTR pFun; 創(chuàng)建一個(gè)局部函數(shù)指針
          InitSystem();
          EnableInterrupts;
          pFun = FunTask1; 對(duì)指針進(jìn)行一個(gè)賦值
          for(;;) {
          _FEED_COP(); /* feeds the dog */
          (pFun)(); 執(zhí)行funtask1,取地址,然后通過(guò)()執(zhí)行函數(shù)。就可以執(zhí)行到制定位置的一個(gè)函數(shù)了。
          } /* loop forever */
          /* please make sure that you never leave main */
          }
          到這里就知道函數(shù)指針一個(gè)怎么去用了。下一步就是棧是怎么保護(hù)和恢復(fù)的的。

          編輯原因--修改函數(shù)指針的理解



          評(píng)論


          技術(shù)專區(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); })();