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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式實(shí)時(shí)操作系統(tǒng)的現(xiàn)場(chǎng)總線網(wǎng)關(guān)的設(shè)計(jì)

          基于嵌入式實(shí)時(shí)操作系統(tǒng)的現(xiàn)場(chǎng)總線網(wǎng)關(guān)的設(shè)計(jì)

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

          在μC/OS-Ⅱ中同樣實(shí)現(xiàn)了消息隊(duì)列結(jié)構(gòu)OSQ及其相應(yīng)操作函數(shù),但在μC/OS-Ⅱ并沒(méi)有對(duì)消息隊(duì)列中的消息進(jìn)行管理,因此不能直接使用,所以sys_mbox_t結(jié)構(gòu)定義如上面所述。對(duì)隊(duì)列本身的管理利用μC/OS-Ⅱ的OSQ操作完成;對(duì)消息的創(chuàng)建、使用、刪除回收使用μC/OS-Ⅱ中的內(nèi)存管理模塊實(shí)現(xiàn),兩部分綜合起來(lái)形成了LwIP的消息隊(duì)列功能。
          2.網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序
          驅(qū)動(dòng)程序主要包括:
          (1) 初始化CPU芯片s3c4510b的ethernet controller的寄存器和PHY芯片ICS1890的控制寄存器;
          (2) 中斷處理函數(shù);
          (3) 接收數(shù)據(jù)包和發(fā)送數(shù)據(jù)包處理函數(shù)。
          四、μC/OS-Ⅱ在s3c4510b上的移值
          μC/OS-Ⅱ是一個(gè)開(kāi)源的RTOS,其主要工作流程如圖4所示。任務(wù)切換的核心是利用出棧指令將每個(gè)任務(wù)的工作現(xiàn)場(chǎng)恢復(fù),并且調(diào)整PC指針來(lái)完成任務(wù)的切換。μC/OS-Ⅱ移值的關(guān)鍵就是如何構(gòu)造任務(wù)堆棧及切換任務(wù)時(shí)的出棧順序。在這個(gè)流程圖中我們可以看到在移值過(guò)程中需編寫的幾個(gè)子程序的位置。
          由圖4的工作流程可以看出要實(shí)現(xiàn)μC/OS-Ⅱ的移值,必須對(duì)系統(tǒng)源碼做必要的修改,主要集中在以下三個(gè)文件中。


          (一) OS CPU.H文件
          OS_CPU.H中包括了用#define定義的與處理器相關(guān)的常量、宏、數(shù)據(jù)類型、堆棧單位和堆棧增長(zhǎng)方向。
          1.數(shù)據(jù)類型定義
          不同的處理器有不同的字長(zhǎng),而且數(shù)據(jù)字長(zhǎng)和所用的編譯器也有關(guān)系,因此在移植中要定義一些數(shù)據(jù)類型。在本網(wǎng)關(guān)的設(shè)計(jì)中所用的編譯器是開(kāi)源的GNU下的arm-elf-gCC,用戶需要做的就是查看所用的編譯器手冊(cè),確定對(duì)應(yīng)于μC/OS-Ⅱ的標(biāo)準(zhǔn)C數(shù)據(jù)類型。
          2.堆棧單位及增長(zhǎng)方向
          任務(wù)堆棧的數(shù)據(jù)類型必須和CPU的寄存器長(zhǎng)度一致,通過(guò)為OS_STK聲明正確的數(shù)據(jù)類型來(lái)完成的,在本設(shè)計(jì)中的聲明如下:
          typedef unsigned int OS_STK;
          / * Each stack entrY is 32_bit wide */
          堆棧的增長(zhǎng)用OS_STK_GROWTH來(lái)設(shè)置,OS_STK_GROWTH為O表示堆棧從下向上增長(zhǎng),為1表示堆棧從上向下增長(zhǎng),在本設(shè)計(jì)中的定義如下:
          #define OS_STK_GROWTH l
          3.宏定義
          宏定義包括開(kāi)關(guān)中斷及任務(wù)切換的宏定義:
          #define OS_ENTER_CRITICAL( )ARMDis-ableInt( )
          #define OS_EXIT_CRITICAL( )ARMEna-bleInt( )
          #define OS_TASK_SW( )OSCtXSw( )
          (二)OS_CPU_C.C
          OS_CPU_C.C主要包括任務(wù)堆棧的初始化,及系統(tǒng)鉤子函數(shù)的定義。在這個(gè)文件中包括以下6個(gè)函數(shù):
          OSTaskStkInit( )
          OSSTaskCreateHook( )
          OSTaskDelHook( )
          OSTaskSwHook( )
          OSTaskStatHook( )
          OSTimeTickHook( )
          其中5個(gè)HOOK函數(shù)如果沒(méi)有特殊要求,只需聲明為空函數(shù),必須修改的是OSTaskStkInit ( )。 OSTaskStkInit( )的實(shí)現(xiàn)如下:
          void * OSTaskStkInit (void (* task) (void * pd),void * pdata,void * ptos,INTl6Uopt)
          {
          unsigned int * stk;

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


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