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

          新聞中心

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

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

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

          opt=opt;
          stk= (unsigned int * ) Ptos;
          *--stk= (unsigned int) task;
          *- -stk=0;
          *--stk=0,
          *--stk=0,
          *--stk=0,
          *--stk=0;
          *--stk=0;
          *--stk=0;
          *--stk=0;
          *--stk=0;
          *--stk=0;
          *--stk=0;
          *--stk=0;
          *--stk=0 (unsigned int) Pdata;
          *--stk= (SVCMODE | OxO);
          *--stk= (SVCMODE | OxO);
          return( (void*) stk);
          在 OSTaskCreate( )或 OSTaskCreateEXt( )中調(diào)用該函數(shù)來初始化任務(wù)的堆棧,返回堆棧指針STK。
          (三)OS_CPU_A.S
          μC/OS-Ⅱ的移植工作的重點和難點主要體現(xiàn)在O_CPU_A.S文件的實現(xiàn)上,主要編寫下面四個匯編語言函數(shù):
          OSStanHighRdy( )
          OSCtxSw( )
          OSIntCtxSw( )
          OSTickISR( )
          其中最困難的工作又集申在OSIntCtxSw( )和OSTickISR( )兩個函數(shù),因為這兩個函數(shù)不僅和相關(guān)硬件定時器、中斷積存器的設(shè)置有關(guān),而且集中體現(xiàn)了移植的思路。下面分別介紹(具體代碼限于篇幅不詳細列出)。
          1.OSStartHighRdy( )
          此函數(shù)只在多任務(wù)啟動時由OSStart( )函數(shù)調(diào)用一次,功能是從最高優(yōu)先級任務(wù)的TCB中得到該任務(wù)的堆棧指針sp,并用該指針恢復(fù)CPU現(xiàn)場,使得最高優(yōu)先級任務(wù)處于就緒狀態(tài)。
          2.OSCtxSw( )
          該函數(shù)實現(xiàn)了任務(wù)級的任務(wù)切換,流程如圖4所示。任務(wù)級的任務(wù)切換是通過發(fā)軟中斷指令來完成的,軟中斷矢量指向該函數(shù)。在μC/OS-Ⅱ系統(tǒng)中,如果一個任務(wù)調(diào)用了某個函數(shù)而使得更高優(yōu)先級任務(wù)進入了就緒狀態(tài),系統(tǒng)就會通過發(fā)SWI來找到OSCtxSw( );在該任務(wù)的最后,系統(tǒng)會調(diào)用OSShed( )將最高優(yōu)先級任務(wù)的地址加載到OSTCBHighRdy中,再調(diào)用OS_TASK_SW( )來執(zhí)行軟中斷調(diào)用OSCtxSw( )進行任務(wù)切換。
          3.0SIntCtxSw( )
          該函數(shù)實現(xiàn)了中斷級任務(wù)切換,流程如圖4(b)所示。在ISR中,可能會引起任務(wù)的切換,如果需要進行任務(wù)切換,則在ISR的最后通過0S_IntEXit( )調(diào)用OSIntCtxSw( )實現(xiàn)中斷級任務(wù)切換。此函數(shù)和OSCtxSw( )函數(shù)類似,不同的是該函數(shù)進行的是中斷級任務(wù)切換,在系統(tǒng)進入中斷時,CPU現(xiàn)場己被保存過了,因此在該函數(shù)中不再進行CPU現(xiàn)場保護,只需對堆棧指針做相應(yīng)的調(diào)整即可。
          4.OSTickISR( )
          該函數(shù)用來實現(xiàn)定時器時鐘中斷處理,但在本系統(tǒng)的設(shè)計過程中,把定時器中斷設(shè)為IRQ中斷模式,并且IRQ中斷包括好多中斷源。因引,把該函數(shù)作為IRQ中斷的ISR,再根據(jù)中斷號來調(diào)用具體的各個中斷服務(wù)程序(如定時器中斷、MAC中斷等)。
          另外,在系統(tǒng)的啟動文件中,需要建立每種異常的異常向量表,并強制ARM處理器狀態(tài)位svc管理模式。
          五、總 結(jié)
          本設(shè)計在s3c451Ob的硬件平臺上成功移植了μC/OS-Ⅱ,并且移植了TCP/IP協(xié)議棧LwIP,實現(xiàn)了WorldFIP現(xiàn)場總線和Internet之間的相互通信,使得WorldFIP現(xiàn)場總線成為真正開放的工業(yè)現(xiàn)場總線。在網(wǎng)關(guān)的整體設(shè)計中,由于系統(tǒng)比較大,任務(wù)數(shù)較多,用實時內(nèi)核來管理調(diào)度這些任務(wù),要消耗較多的CPU使用率和系統(tǒng)的內(nèi)存,具有一定的局限性,但在CPU足夠快,內(nèi)存足夠大的情況下,使用網(wǎng)關(guān)設(shè)計,在保證了工業(yè)現(xiàn)場總線的實時性和可靠性的基礎(chǔ)上,更有利于系統(tǒng)的集成度和再次開發(fā)。

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

          上一頁 1 2 3 4 下一頁

          評論


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