<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 升級(jí)到 μC/OS-II

          從 μC/OS 升級(jí)到 μC/OS-II

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

          OSTaskStkInit()中。

          程序清單L10.9μC/OS 中的 OSTaskCreate()

          UBYTEOSTaskCreate(void(*task)(void*pd),void*pdata,void*pstk,UBYTE

          p)

          {

          UWORDOS_FAR*stk;

          UBYTEerr;

          OS_ENTER_CRITICAL();

          if(OSTCBPrioTbl[p]==(OS_TCB*)0){

          OSTCBPrioTbl[p]=(OS_TCB*)1;

          OS_EXIT_CRITICAL();(1)

          stk=(UWORDOS_FAR*)pstk;

          *--stk=(UWORD)FP_OFF(pdata);

          *--stk=(UWORD)FP_SEG(task);

          *--stk=(UWORD)FP_OFF(task);

          *--stk=(UWORD)0x0202;

          *--stk=(UWORD)FP_SEG(task);

          *--stk=(UWORD)FP_OFF(task);

          *--stk=(UWORD)0x0000;

          *--stk=(UWORD)0x0000;

          *--stk=(UWORD)0x0000;

          *--stk=(UWORD)0x0000;

          *--stk=(UWORD)0x0000;

          *--stk=(UWORD)0x0000;

          *--stk=(UWORD)0x0000;

          *--stk=(UWORD)0x0000;

          *--stk=(UWORD)0x0000;

          *--stk=_DS;

          err=OSTCBInit(p,(voidfar*)stk);(2)

          if(err==OS_NO_ERR){

          if(OSRunning){

          OSSched();

          }

          }else{

          OSTCBPrioTbl[p]=(OS_TCB*)0;

          }

          return(err);

          }else{

          OS_EXIT_CRITICAL();

          return(OS_PRIO_EXIST);

          }

          }

          程序清單 L10.10 μC/OS-II中的OSTaskStkInit()

          void*OSTaskStkInit(void(*task)(void*pd),void*pdata,void*ptos,

          INT16Uopt)

          {

          INT16U*stk;

          opt=opt;

          stk=(INT16U*)ptos;

          *stk--=(INT16U)FP_SEG(pdata);

          *stk--=(INT16U)FP_OFF(pdata);

          *stk--=(INT16U)FP_SEG(task);

          *stk--=(INT16U)FP_OFF(task);

          *stk--=(INT16U)0x0202;

          *stk--=(INT16U)FP_SEG(task);

          *stk--=(INT16U)FP_OFF(task);

          *stk--=(INT16U)0xAAAA;

          *stk--=(INT16U)0xCCCC;

          *stk--=(INT16U)0xDDDD;

          *stk--=(INT16U)0xBBBB;

          *stk--=(INT16U)0x0000;

          *stk--=(INT16U)0x1111;

          *stk--=(INT16U)0x2222;

          *stk--=(INT16U)0x3333;

          *stk--=(INT16U)0x4444;

          *stk=_DS;

          return((void*)stk);

          }

          10.4.2OSTaskCreateHook()

          OSTaskCreateHook()在μC/OS中沒有,如程序清單L10.11所示,在由.μC/OS 向μC/OS-II升級(jí)時(shí),定義一個(gè)空函數(shù)就可以了。注意其中的賦值語(yǔ)句,如果不把Ptcb賦給Ptcb,有些編譯器會(huì)產(chǎn)生一個(gè)警告錯(cuò)誤,說定義的Ptcb變量沒有用到。

          程序清單10.11 μC/OS-II 中的OSTaskCreateHook()

          #ifOS_CPU_HOOKS_EN

          OSTaskCreateHook(OS_TCB*ptcb)

          {

          ptcb=ptcb;

          }

          #endif

          OS_CFG.H

          OS_CPU_HOOKS _EN設(shè)為1時(shí),OSTaskCreateHook()的代碼才會(huì)生成。這樣做的好處是允許

          用戶移植時(shí)可在不同文件中定義鉤子函數(shù)。

          10.4.3OSTaskDelHook()

          OSTaskDelHook() 這個(gè)函數(shù)在μC/OS中沒有,如程序清單10.12所示,從μC/OS 到μC/OS-II,只要簡(jiǎn)單地定義一個(gè)空函數(shù)就可以了。注意,如果不用賦值語(yǔ)句將ptcb賦值為ptcb,有些編譯程序可能會(huì)產(chǎn)生一些警告信息,指出定義的ptcb變量沒有用到。

          程序清單L10.12 μC/OS-II中的OSTaskDelHook().

          #ifOS_CPU_HOOKS_EN

          OSTaskDelHook(OS_TCB*ptcb)

          {

          ptcb=ptcb;

          }

          #endif

          也還是要用條件編譯管理指令來(lái)處理這個(gè)函數(shù)。只有把OS_CFG.H. 文件中的

          OS_CPU_HOOKS_EN 設(shè)為1,OSTaskDelHook()的代碼才能生成。這樣做的好處是允許用戶移植時(shí)在不同的文件中定義鉤子函數(shù)。

          10.4.4OSTaskSwHook()

          OSTaskSwHook() 在μC/OS 中也不存在。從μC/OS向μC/OS-II升級(jí)時(shí),只要簡(jiǎn)單地定義一個(gè)空

          函數(shù)就可以了,如程序清單L10.13所示。

          程序清單L10.13 μC/OS-II中的OSTaskSwHook()函數(shù)

          #ifOS_CPU_HOOKS_EN

          OSTaskSwHook(void)

          {

          }

          #endif

          也還是要用編譯管理指令來(lái)處理這個(gè)函數(shù)。 只有把OS_CFG.H 文件中的OS_CPU_HOOKS_EN設(shè)為1,OSTaskSwHook() 的代碼才能生成。.

          10.4.5OSTaskStatHook()

          OSTaskStatHook()在μC/OS中不存在,從μC/OS向μC/OS-II升級(jí)時(shí),只要簡(jiǎn)單地定義一個(gè)空函數(shù)就可以了,如程序清單L10.14所示。

          也還是要用編譯管理指令來(lái)處理這個(gè)函數(shù)。 只有把OS_CFG.H 文件中的OS_CPU_HOOKS_EN設(shè)為1,OSTaskSwHook() 的代碼才能生成。

          程序清單L10.14 μC/OS-II中的OSTaskStatHook()函數(shù)

          #ifOS_CPU_HOOKS_EN

          OSTaskStatHook(void)

          {

          }

          #endif

          10.4.6OSTimeTickHook()

          OSTimeTickHook()在μC/OS中不存在,從μC/OS向μC/OS-II升級(jí)時(shí),只要簡(jiǎn)單地定義一個(gè)空函數(shù)就可以了,如程序清單L10.15所示。

          也還是要用編譯管理指令來(lái)處理這個(gè)函數(shù)。 只有把OS_CFG.H 文件中的OS_CPU_HOOKS_EN設(shè)為1,OSTimeTickHook()的代碼才能生成。

          .

          程序清單L10.15 μC/OS-II中的OSTimeTickHook()

          #ifOS_CPU_HOOKS_EN

          OSTimeTickHook(void)

          {

          }

          #endif

          10.5總結(jié)

          表T10.3總結(jié)了從μC/OS向μC/OS-II.升級(jí)需要改變得地方。其中processor_name.?是μC/OS中

          移植范例程序的文件名。

          表 T10.3 升級(jí) μC/OS到 μC/OS-I要修改的地方


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(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); })();