xx色综合,国产午夜亚洲精品不卡网站,成年在线欧美,最近免费中文字幕mv在线视频3 ,亚洲综合人成网免费视频

I/O 設(shè)備

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

ainet.cn   2009年11月30日

一、引言
        隨著現(xiàn)場總線技術(shù)的不斷發(fā)展,諸如計算機技術(shù)、通信技術(shù)等不斷地引入到自動控制領(lǐng)域,大大地促進了新一代控制系統(tǒng)——現(xiàn)場總線控制系統(tǒng)(FCS)的發(fā)展。
    隨著嵌入式系統(tǒng)與網(wǎng)絡(luò)的日益結(jié)合,在嵌入式實時操作系統(tǒng)(RTOS)中引入TCP/IP協(xié)議棧,以支持嵌入式設(shè)備接入網(wǎng)絡(luò),成為嵌入式領(lǐng)域重要的研究方向。
       本文將介紹基于嵌入式實時操作系統(tǒng)的現(xiàn)場總線網(wǎng)關(guān)的設(shè)計。其中所介紹的現(xiàn)場總線是WorldFIP現(xiàn)場總線;實時操作系統(tǒng)(RTOS)是μC/OS-Ⅱ。
二、WorldFIP現(xiàn)場總線和μC/OS-Ⅱ簡介
    IP現(xiàn)場總線簡介
   WorldFIP FCS是一種用于自動化系統(tǒng)的現(xiàn)場總統(tǒng)提供現(xiàn)場設(shè)備和控制器以及控制器之間的數(shù)字化連接。WorldFIP FCS適合各種應(yīng)用結(jié)構(gòu):集中、分散和主從;其開放性使不同制造廠家的設(shè)備能夠互操作。WorldFIP除了具備現(xiàn)場總線的一般特點,如數(shù)字化,標準化,節(jié)省布線,安裝方便,維護性好,互換性和互操作性等,還具有很多獨到之處,如協(xié)議單一、抗干擾能力強、帶調(diào)度的總線訪問控制等。
    2.實時操作系統(tǒng)μC/OS-Ⅱ簡介
       嵌入式實時操作系統(tǒng)μC/OS-Ⅱ是基于優(yōu)先級的搶占式實時多任務(wù)操作系統(tǒng),其內(nèi)核可以簡單地看做是一個多任務(wù)的調(diào)度器,在這個任務(wù)調(diào)度器之上完善并添加了和實時多任務(wù)操作系統(tǒng)相關(guān)的一些系統(tǒng)服務(wù),如任務(wù)管理、時間管理、信號量、郵箱等。它的90%的代碼都是用C語言編寫的,因此μC/OS-Ⅱ具有良好的可移植性。移植工作的絕大部分都集中在多任務(wù)切換的實現(xiàn)上,由于這部分代碼主要是用來保存和恢復處理器現(xiàn)場(即相關(guān)寄存器),與處理器硬件相關(guān),因此只能使用特定的處理器匯編語言完成。在本文嵌入式網(wǎng)關(guān)的開發(fā)過程中,以開源TCP/IP協(xié)議棧LwIP為基礎(chǔ),實現(xiàn)了μC/OS-Ⅱ的網(wǎng)絡(luò)支持功能。LwIP實現(xiàn)了 TCP/IP的主要協(xié)議如TCP、UDP、ICMP、IP、ARP,其優(yōu)點是在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對資源的占用,使得LwIP協(xié)議棧非常適合在低端嵌入式系統(tǒng)中使用。
三、嵌入式網(wǎng)關(guān)的設(shè)計
       本設(shè)計所設(shè)計的嵌入式網(wǎng)關(guān)的主要功能是實現(xiàn)WorldFIP現(xiàn)場總線和Internet之間的相互通信時的協(xié)議轉(zhuǎn)換,從而實現(xiàn)工業(yè)控制中管理層和現(xiàn)場控制層之間的無縫結(jié)合,使得WorldFIP現(xiàn)場總線成為一個真正開放的工業(yè)控制網(wǎng)絡(luò)??刂葡到y(tǒng)模型如圖1所示。



    網(wǎng)關(guān)的設(shè)計過程中,自上而下分為三層:應(yīng)用/任務(wù)層、操作系統(tǒng)層和硬件層。分層結(jié)構(gòu)如圖2所示。




    (一)硬件層設(shè)計
       硬件層設(shè)計主要包括選擇合適的芯片及進行原理設(shè)計。在本設(shè)計中,選用Samsung公司的ARM 32bits芯片s3c451Ob微處理器,它的運行速率為5OMHz,帶有Ethernet控制器;網(wǎng)卡芯片使用ICS1890;WorldFIP側(cè)選用的芯片是符合WorldFIP現(xiàn)場總線協(xié)議的專用芯片(Fullfip2、FIPDUAL等);CPLD選用ALTERA公司的EPM7128SLC84,主要用于s3c4510b和Fullfip2之間的時序匹配和邏輯組合;SDRAM選用Hynix的HY57v64323220,主要用于任務(wù)堆棧和中間變量;flash選用SST的39VF169,主要用于存放程序;SRAM選用ISSI的IC61C1024,主要用于存放Fullfip2的微碼和中間變量。硬件結(jié)構(gòu)如圖3所示。



    (二)操作系統(tǒng)層設(shè)計
       操作系統(tǒng)層設(shè)計的主要內(nèi)容是在系統(tǒng)硬件平臺上構(gòu)建一個工作平臺,在這個平臺上建立應(yīng)用程序、創(chuàng)建任務(wù)等。操作系統(tǒng)層設(shè)計主要包括三部分:
    (1) 嵌入式實時操作系統(tǒng)μC/OS-Ⅱ的移植;
    (2) TCP/IP協(xié)議棧LwIP的移植;
    (3)網(wǎng)絡(luò)設(shè)備驅(qū)動程序。
    協(xié)議棧的移植
    為了使WorldFIP現(xiàn)場總線可以和Internet通信,在設(shè)計中必須把TCP/IP協(xié)議棧移植到μC/OS-Ⅱ操作系統(tǒng)中(μC/OS-Ⅱ移植將在后面介紹)。為了節(jié)省對系統(tǒng)資源的占用,設(shè)計中選用了開源的嵌入式TCP/IP協(xié)議?!狶wIP。LwIP協(xié)議棧是一個輕量的TCP/IP協(xié)議棧,一般只需要幾十千字節(jié)的RAM和40K左右的ROM就可以運行,這使LwIP協(xié)議棧適合在低端嵌入式系統(tǒng)中使用。LwIP的源碼可以到相關(guān)的網(wǎng)站上下載,目前的版本是0.6.3。LwIP的特性如下:  
    (1)支持多網(wǎng)絡(luò)接口下的IP轉(zhuǎn)發(fā);
    (2)提供專門的內(nèi)部回調(diào)接口(Raw API)用于提高應(yīng)用程序性能;
    (3)可選擇的Berkeley接API。
   為了方便移植,LwIP協(xié)議棧把所有與硬件、OS、編譯器相關(guān)的部分單獨放在/src/arch目錄下,因此移植時只需修改這個目錄下的文件即可,其他源文件一般不需要修改。在移植的過程中,最主要的是和OS相關(guān)的一些函數(shù)和結(jié)構(gòu),這些函數(shù)和結(jié)構(gòu)在arch目錄下的sys_arch.h和sys_arch.c中定義和實現(xiàn)。主要有:
    (l)sys_arch_timeout函數(shù)。
    這個函數(shù)描述的是LwIP中與外界網(wǎng)絡(luò)連接的線程等待超時timeout屬性,該屬性與OS相關(guān)。每個線程的timeout屬性對應(yīng)著一個在sys.h中定義的結(jié)構(gòu)體sys_timeout,我們所要實現(xiàn)的是如下函數(shù):
    struct sys_timeouts * sys_arch_timeouts(void)
    該函數(shù)的功能是返回目前正處于運行態(tài)的線程所對應(yīng)的timeout隊列指針。
    (2)sys_sem_t信號量。
    在LwIP中用信號量來實現(xiàn)同步,因此需要在sys_arch中實現(xiàn)sys_sem_t結(jié)構(gòu)體和處理函數(shù):  
    typedef OS_EVENT * sys_sem_t;
    sys_sem_t sys_sem_new (lNT8U count);
    void sys_sem_signal (sys_sem_t sem);
    INTl6U sys_arch_sem_wait (sys_sem_t sem,INTl6U timeout);
    void sys_sem_free (sys_sem_t sem);
    μC/OS-Ⅱ已經(jīng)實現(xiàn)了信號量的各種操作,而且功能和LwIP中的幾個函數(shù)完全一樣的,所以在LwIP中只需把μC/OS-Ⅱ中的函數(shù)封裝打包。
    (3) sys_mbox_t消息。
    在LwIP中實現(xiàn)緩沖、數(shù)據(jù)傳遞要用到消息隊列,所以在sys_arch中實現(xiàn)sys_mbox_t結(jié)構(gòu)體和處理函數(shù):
    typedef struct
    {
    OS_EVENT * pQ;
    void * pvQEntries [MAX  _  QUEUE  _  EN_ TRIES];
    }  sys_mbox_t;
    sys_mbox_t;
    sys_mbox_t sys_mbox_new (void);
    void sys_mbox_post(sys_mbox_t mbox,void * msg);
    INT16U sys_arch_mbox_fetch (sys_mbox_tmbox,void * * msg,INT16U timeout);
    void sys_mbox_free (sys_mbox_t mbox);
    在μC/OS-Ⅱ中同樣實現(xiàn)了消息隊列結(jié)構(gòu)OSQ及其相應(yīng)操作函數(shù),但在μC/OS-Ⅱ并沒有對消息隊列中的消息進行管理,因此不能直接使用,所以sys_mbox_t結(jié)構(gòu)定義如上面所述。對隊列本身的管理利用μC/OS-Ⅱ的OSQ操作完成;對消息的創(chuàng)建、使用、刪除回收使用μC/OS-Ⅱ中的內(nèi)存管理模塊實現(xiàn),兩部分綜合起來形成了LwIP的消息隊列功能。
    2.網(wǎng)絡(luò)設(shè)備驅(qū)動程序
    驅(qū)動程序主要包括:
    (1) 初始化CPU芯片s3c4510b的ethernet controller的寄存器和PHY芯片ICS1890的控制寄存器;
    (2) 中斷處理函數(shù);
    (3) 接收數(shù)據(jù)包和發(fā)送數(shù)據(jù)包處理函數(shù)。
四、μC/OS-Ⅱ在s3c4510b上的移值
      μC/OS-Ⅱ是一個開源的RTOS,其主要工作流程如圖4所示。任務(wù)切換的核心是利用出棧指令將每個任務(wù)的工作現(xiàn)場恢復,并且調(diào)整PC指針來完成任務(wù)的切換。μC/OS-Ⅱ移值的關(guān)鍵就是如何構(gòu)造任務(wù)堆棧及切換任務(wù)時的出棧順序。在這個流程圖中我們可以看到在移值過程中需編寫的幾個子程序的位置。
     由圖4的工作流程可以看出要實現(xiàn)μC/OS-Ⅱ的移值,必須對系統(tǒng)源碼做必要的修改,主要集中在以下三個文件中。




   (一) OS CPU.H文件
      OS_CPU.H中包括了用#define定義的與處理器相關(guān)的常量、宏、數(shù)據(jù)類型、堆棧單位和堆棧增長方向。 
   1.數(shù)據(jù)類型定義
   不同的處理器有不同的字長,而且數(shù)據(jù)字長和所用的編譯器也有關(guān)系,因此在移植中要定義一些數(shù)據(jù)類型。在本網(wǎng)關(guān)的設(shè)計中所用的編譯器是開源的GNU下的arm-elf-gCC,用戶需要做的就是查看所用的編譯器手冊,確定對應(yīng)于μC/OS-Ⅱ的標準C數(shù)據(jù)類型。
   2.堆棧單位及增長方向
   任務(wù)堆棧的數(shù)據(jù)類型必須和CPU的寄存器長度一致,通過為OS_STK聲明正確的數(shù)據(jù)類型來完成的,在本設(shè)計中的聲明如下:
   typedef unsigned int OS_STK;
     / * Each stack entrY is 32_bit wide */
   堆棧的增長用OS_STK_GROWTH來設(shè)置,OS_STK_GROWTH為O表示堆棧從下向上增長,為1表示堆棧從上向下增長,在本設(shè)計中的定義如下:
     #define OS_STK_GROWTH        l
   3.宏定義
   宏定義包括開關(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ù)的定義。在這個文件中包括以下6個函數(shù):
    OSTaskStkInit(    )
    OSSTaskCreateHook(     )
    OSTaskDelHook(    )
    OSTaskSwHook(    )
    OSTaskStatHook(    )
    OSTimeTickHook(    )
    其中5個HOOK函數(shù)如果沒有特殊要求,只需聲明為空函數(shù),必須修改的是OSTaskStkInit (  )。 OSTaskStkInit(   )的實現(xiàn)如下:
    void * OSTaskStkInit (void (* task)  (void * pd),void * pdata,void * ptos,INTl6Uopt)
    {    
    unsigned  int * stk;
    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)了移植的思路。下面分別介紹(具體代碼限于篇幅不詳細列出)。
    tHighRdy(    )
      此函數(shù)只在多任務(wù)啟動時由OSStart(  )函數(shù)調(diào)用一次,功能是從最高優(yōu)先級任務(wù)的TCB中得到該任務(wù)的堆棧指針sp,并用該指針恢復CPU現(xiàn)場,使得最高優(yōu)先級任務(wù)處于就緒狀態(tài)。
    w(    )
      該函數(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)整即可。
    ISR(   )
      該函數(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ā)。

(轉(zhuǎn)載)

標簽:現(xiàn)場總線 我要反饋 
泰科電子ECK、ECP系列高壓直流接觸器白皮書下載
億萬克
專題報道