新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > EPA通信協議棧設計中的關鍵技術研究

        EPA通信協議棧設計中的關鍵技術研究

        作者: 時間:2008-04-25 來源:網絡 收藏
        摘要:在中,內存管理和定時器隊列管理是影響棧性能的重要方面。本文針對嵌入式系統下網絡的特點,提出了分類鏈式內存隊列的動態內存管理方法和簡單遞增時鐘隊列的時鐘管理模型,試驗結果表明,該方法能夠有效的提高棧穩定性和實時性。
        :EPA;嵌入式實時系統;內存管理;定時隊列;

        [Abstract] In the design of EPA stack, memory management and timer queue is the key aspects which impact the performance of stack. According to the characteristic of EPA networks under embedded systems, the method of classified chain memory management and simple increment timer queue models are issued. Which provides a resolve method for enhancing the stabilization and real-time performance of EPA stack。

        [Key words] EPA, Embedded real time system, Memory management, Timer queue


        1. 前言

        在國家863計劃的連續滾動支持下,重慶郵電大學作為核心單位參與制定了國家標準DD《用于工業測量與控制系統的EPA(Ethernet for plant automation)系統結構和標準》(簡稱“EPA標準”)。 由于工業現場設備的特殊要求,在EPA網絡上運行的協議棧必須穩定高效,這就需要我們不斷去探索好的優化和實現方法。本文在分析了EPA網絡特點的基礎上,對EPA協議棧實現中的內存,時鐘管理等進行了,并提出了相應的實現方案。

        2. EPA網絡

        隨著互聯網的發展與普及推廣,Ethernet也得到了迅速的發展,Ethernet傳輸速率的提高和交換技術的發展,給解決Ethernet通信的非確定性問題帶來了希望,并使Ethernet全面應用于工業控制領域成為可能。目前EPA做為工業以太網技術的解決方案之一,它主要有以下幾個方面的特點:

        2.1 通信確定性與實時性

        以太網由于采用CSMA/CD(載波偵聽多路訪問/沖突檢測)介質訪問控制機制,因此具有通信“不確定性”的特點,并成為其應用于工業數據通信網絡的主要障礙。EPA是應用于工業現場設備間通信的開放網絡技術,采用分段化系統結構和確定性通信調度控制策略,能夠適應工業現場特殊需要,解決了以太網通信的不確定性的問題,滿足了系統的實時性要求。

        2.2 穩定性與可靠性

        Ethernet進入工業控制領域的另一個主要問題是,它所用的接插件、集線器、交換機和電纜等均是為商用領域的,而未針對較惡劣的工業現場環境來設計(如冗余直流電源輸入、高溫、低溫、防塵等),故商用網絡產品不能應用在有較高可靠性要求的惡劣工業現場環境中。而EPA做為應用于工業現場的網絡標準,穩定性與可靠性也是其必需的特點。

        3. EPA協議中的內存管理

        嵌入式系統軟件設計中采取的內存管理方案有兩種DD靜態分配和動態分配。一般來說,嵌入式系統總是兩種方案的組合,純粹的靜態分配一般只使用在不計成本來保證嚴格實時性的場合,而且靜態分配容易使系統失去靈活性。考慮到EPA協議棧主要應用于工業網絡設備中,所以我們在EPA協議棧設計中主要采用動態內存管理方式。動態內存管理機制在嵌入式軟件設計是難點,也是直接關系到整個系統性能的

        在EPA協議棧設計中,針對網絡部分和非網絡部分的內存需求,我們把整個系統內存分成報文緩沖區和通用緩沖區兩個不同的區域。先從系統申請固定大小的靜態內存做為報文緩沖區和通用緩沖區,在每塊內存區上定義自身的內存分配和回收算法,通過這種設計,能夠確保網絡系統不使用系統全部可用內存,應用程序也不會使用網絡已用內存,從而實現了內存區域隔離,也防止了協議棧耗盡所有系統內存,提高了系統的穩定性和可靠性。

        3.1報文緩沖區

        EPA協議中用戶數據從本地嵌入式設備傳輸到遠程設備的過程中,要經過各層協議,對消息的封裝,去封裝和拷貝操作幾乎是不可避免的。而通常所采用的用一段連續的內存區來存儲,傳遞數據的做法會有缺陷:例如當從上層向下層傳遞數據時,下層協議需要對數據進行封裝,而上層在申請內存時不會考慮到下層的需要。這樣就會導致下層協議處理時需要重新申請內存并進行內存拷貝,從而影響程序的效率。另外隨著數據的逐層處理,其內容可能有所增刪,而連續內存很難處理這樣動態的數據增刪。因此,必須要有一種能適應數據動態增刪,而在邏輯上又呈現連續性的數據結構,以滿足各層之間的數據傳遞,而不是進行內存拷貝。因此在EPA協議棧設計中采取的報文內存管理方案必須滿足以下要求:(1)適合存放不同長度的數據。(2)方便地操作變長緩存。(3)盡量減少為完成這些操作所做的數據拷貝。

        綜合考慮系統效率和EPA網絡報文的特點,在EPA協議棧設計中,我們設計的每個緩沖塊的長度固定,大小以滿足EPA網絡中的大多數報文的長度為標準,這里我們設置每個緩沖塊的長度為128字節,大于這個長度的報文,就用多個緩沖塊形成的緩沖鏈來滿足。

        EPA_BUFFER類型的緩沖區是報文緩沖區,該結構包括兩個指針,兩個長度域,其中next 域指針指向下一個EPA_BUFFER的緩沖塊,pdata域指向EPA_BUFFER中的數據起始位,tot_len域包括整個數據鏈的數據長度,len域包含該緩沖塊中的數據長度。EPA_BUFFER整個結構的大小取決域所使用的處理器體系結構中一個指針的大小及可能的最小alignment的大小。在帶有32位指針和4個字節alignment的體系結構,整個的大小為16字節。一個EPA_BUFFER鏈,如圖1所示:

        圖1. EPA_BUFFER鏈結構

        緩沖區的操作函數:

        void buf_init( void );

        epa_buf_t * buf_alloc( void );

        epa_buf_t * buf_new(u16_t tot_len);

        void buf_delete(epa_buf_t *buffer);

        epa_buf_t * buf_adjust(epa_buf_t *buffer, s16_t flen, s16_t blen);

        void buf_read(epa_buf_t *buffer, u8_t *pdata, u16_t *len);

        void buf_write(epa_buf_t *buffer, u8_t *pdata, u16_t *len);

        對報文緩沖區使用這種設計方法,能夠實現從中斷發送,到協議處理,用戶接收等整個過程中,數據只需要一次拷貝,減少了對數據空間需求(不用頻繁地進行數據硬復制),從而提高了EPA協議處理地實時性。

        3.2通用緩沖區

        在EPA協議棧設計中,通用緩沖區管理的實現很簡單,它分配和回收鄰近的內存區域并且調整已分配的內存塊。它使用系統中全部內存的特定區域, EPA_MEM類型的緩沖區是通用緩沖區,主要滿足協議棧中與報文無關的內存需求。

        在EPA_RAM內部,內存管理通過將一種小的結構放置在每一個被分配的內存塊的頂端上來追蹤分配的內存,這個結構(圖2)設置兩個指針指向內存中下一個和前一個分配塊,還有一個used標志用來指示這個內存塊是否已經被分配。使用最先適用的原則,通過搜索一個未使用的內存塊來分配內存。當一個內存塊被釋放時,used標志被設為0,為了防止碎片,檢測下一個和上一個內存塊的used標志,如果它們還沒有被使用,幾個塊合并成一個大的未使用的塊。

        圖2 EPA_RAM結構

        4. EPA協議中的時鐘管理

        在EPA協議棧設計中,定時器的有效管理尤為重要,特別是在確定性調度實現方面,能不能對定時器進行合理的管理往往成為提高整個協議棧實時性能的瓶頸。對定時器的組織和管理最簡單的方式是采取先進先出(FIFO)方式的鏈表單隊列,這種組織管理方式會有一下兩個問題:定時隊列太長,找到所有到點定時器的時間開銷難以接受;當定時器中斷發生時要對所有的定時器的時長域進行減法操作,該部分時間性開銷也很大。另外,工業現場的嵌入式設備中,外設資源相對有限,為了使該協議棧能夠廣泛的應用于多種硬件平臺,我們使用一個硬件定時器為基準時鐘,然后在其基礎上設計了簡單遞增時鐘隊列,以滿足EPA系統對確定性調度以及時間同步的要求。

        在系統中,為每個任務分配申請一個簡單相對遞增時鐘隊列,隊列中的定時節點按照定時時長排列有序,時長短的靠前,如圖3所示,定時節點1的時長為5 ticks, 定時節點2的時長為2ticks, 定時節點3的時長為4ticks, 在隊列中,定時節點的時長值改為相對前一定時節點時長的差值,即相對時長。當時鐘中斷發生時,只需對隊頭的時長域進行減1操作,所有的到點定時節點也均集中于隊列的前面。每個隊列中又可以有多個時鐘節點。邏輯時鐘隊列中,每個定時節點的數據結構如下所示:

        typedef void (* timer_fun)(void *arg);

        struct timer_node{

        struct timer_node *next; /* 指向下一個定時節點 */

        u32 time; /* 定時時間 */

        timer_fun hander; /* 定時時間到后執行的函數 */

        void *arg; /* 定時時間到后執行函數的參數 */

        }

        一個時鐘隊列如下圖所示:

        圖 3 EPA時鐘隊列

        邏輯時鐘隊列的處理函數有:

        void time_queue_init( void );

        u8_t time_task_add(u32_t msec, time_fun hander, void *arg);

        u8_t time_task_delete(time_fun hander, void *arg);

        在EPA協議棧設計中,利用此種定時隊列,能夠使用一個基準定時器就可以簡單,有效的實現確定性調度和時間同步所需的定時功能。

        5.結論

        本協議棧設計采用標準C進行開發,并在ARM平臺上結合UCOS-II進行了測試,測試結果表明:采用分類鏈式內存管理和相對遞增時鐘隊列的內存和時鐘管理方法的EPA通信協議棧通信過程穩定,速度快。

        參考文獻:

        [1] EPA國家標準起草工作組.用于工業測量與控制系統的EPA系統結構與通信規范[S]. 北京:中國標準出版社.2005.

        [2 ] Qing LiandCarolyn Yao,嵌入式系統的實時概念[M],北京:航空航天出版社,2004.

        [3]晨風. 嵌入式實時多任務軟件開發基礎[M]. 北京:清華大學出版社. 2004.09

        [4] EAN J.LABROSSE,邵貝貝譯. µC/OS-II DD源碼公開的實時嵌入式操作系統. 中國電力出版社,2003.04

        [5] 胡綱,王雷.遠端內存交換的設計與實現[J].微計算機信息,2006,10-3:21-23

        [6] Jams NobleCharles Weir .內存受限系統之軟件開發[M].華中科技出版社,2003.03

        [7] Andrew N.Sloss,沈建華譯. ARM嵌入式系統開發-軟件設計與優化. 北京航空航天大學出版社,2005.05。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 昭苏县| 宜章县| 宝坻区| 繁昌县| 西丰县| 合水县| 长丰县| 巩义市| 安吉县| 岚皋县| 古浪县| 珲春市| 神农架林区| 沽源县| 平顺县| 邢台市| 新民市| 深泽县| 河北省| 琼海市| 易门县| 新邵县| 枣庄市| 大港区| 砚山县| 即墨市| 富锦市| 景泰县| 青田县| 三原县| 建德市| 贵阳市| 灌云县| 武胜县| 彭泽县| 麻城市| 永寿县| 宁晋县| 沁源县| 绥滨县| 深圳市|