EPA通信協(xié)議棧設計中的關(guān)鍵技術(shù)研究
關(guān)鍵詞:EPA;嵌入式實(shí)時(shí)系統;內存管理;定時(shí)隊列;
[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計劃的連續滾動(dòng)支持下,重慶郵電大學(xué)作為核心單位參與制定了國家標準DD《用于工業(yè)測量與控制系統的EPA(Ethernet for plant automation)系統結構和通信標準》(簡(jiǎn)稱(chēng)“EPA標準”)。 由于工業(yè)現場(chǎng)設備的特殊要求,在EPA網(wǎng)絡(luò )上運行的協(xié)議棧必須穩定高效,這就需要我們不斷去探索好的優(yōu)化和實(shí)現方法。本文在分析了EPA網(wǎng)絡(luò )特點(diǎn)的基礎上,對EPA通信協(xié)議棧實(shí)現中的內存,時(shí)鐘管理等關(guān)鍵技術(shù)進(jìn)行了研究,并提出了相應的實(shí)現方案。
2. EPA網(wǎng)絡(luò )
隨著(zhù)互聯(lián)網(wǎng)技術(shù)的發(fā)展與普及推廣,Ethernet技術(shù)也得到了迅速的發(fā)展,Ethernet傳輸速率的提高和交換技術(shù)的發(fā)展,給解決Ethernet通信的非確定性問(wèn)題帶來(lái)了希望,并使Ethernet全面應用于工業(yè)控制領(lǐng)域成為可能。目前EPA做為工業(yè)以太網(wǎng)技術(shù)的解決方案之一,它主要有以下幾個(gè)方面的特點(diǎn):
2.1 通信確定性與實(shí)時(shí)性
以太網(wǎng)由于采用CSMA/CD(載波偵聽(tīng)多路訪(fǎng)問(wèn)/沖突檢測)介質(zhì)訪(fǎng)問(wèn)控制機制,因此具有通信“不確定性”的特點(diǎn),并成為其應用于工業(yè)數據通信網(wǎng)絡(luò )的主要障礙。EPA是應用于工業(yè)現場(chǎng)設備間通信的開(kāi)放網(wǎng)絡(luò )技術(shù),采用分段化系統結構和確定性通信調度控制策略,能夠適應工業(yè)現場(chǎng)特殊需要,解決了以太網(wǎng)通信的不確定性的問(wèn)題,滿(mǎn)足了系統的實(shí)時(shí)性要求。
2.2 穩定性與可靠性
Ethernet進(jìn)入工業(yè)控制領(lǐng)域的另一個(gè)主要問(wèn)題是,它所用的接插件、集線(xiàn)器、交換機和電纜等均是為商用領(lǐng)域設計的,而未針對較惡劣的工業(yè)現場(chǎng)環(huán)境來(lái)設計(如冗余直流電源輸入、高溫、低溫、防塵等),故商用網(wǎng)絡(luò )產(chǎn)品不能應用在有較高可靠性要求的惡劣工業(yè)現場(chǎng)環(huán)境中。而EPA做為應用于工業(yè)現場(chǎng)的網(wǎng)絡(luò )標準,穩定性與可靠性也是其必需的特點(diǎn)。
3. EPA協(xié)議中的內存管理
嵌入式系統軟件設計中采取的內存管理方案有兩種DD靜態(tài)分配和動(dòng)態(tài)分配。一般來(lái)說(shuō),嵌入式系統總是兩種方案的組合,純粹的靜態(tài)分配一般只使用在不計成本來(lái)保證嚴格實(shí)時(shí)性的場(chǎng)合,而且靜態(tài)分配容易使系統失去靈活性??紤]到EPA協(xié)議棧主要應用于工業(yè)網(wǎng)絡(luò )設備中,所以我們在EPA協(xié)議棧設計中主要采用動(dòng)態(tài)內存管理方式。動(dòng)態(tài)內存管理機制在嵌入式軟件設計是難點(diǎn),也是直接關(guān)系到整個(gè)系統性能的關(guān)鍵。
在EPA協(xié)議棧設計中,針對網(wǎng)絡(luò )部分和非網(wǎng)絡(luò )部分的內存需求,我們把整個(gè)系統內存分成報文緩沖區和通用緩沖區兩個(gè)不同的區域。先從系統申請固定大小的靜態(tài)內存做為報文緩沖區和通用緩沖區,在每塊內存區上定義自身的內存分配和回收算法,通過(guò)這種設計,能夠確保網(wǎng)絡(luò )系統不使用系統全部可用內存,應用程序也不會(huì )使用網(wǎng)絡(luò )已用內存,從而實(shí)現了內存區域隔離,也防止了協(xié)議棧耗盡所有系統內存,提高了系統的穩定性和可靠性。
3.1報文緩沖區
EPA協(xié)議中用戶(hù)數據從本地嵌入式設備傳輸到遠程設備的過(guò)程中,要經(jīng)過(guò)各層協(xié)議,對消息的封裝,去封裝和拷貝操作幾乎是不可避免的。而通常所采用的用一段連續的內存區來(lái)存儲,傳遞數據的做法會(huì )有缺陷:例如當從上層向下層傳遞數據時(shí),下層協(xié)議需要對數據進(jìn)行封裝,而上層在申請內存時(shí)不會(huì )考慮到下層的需要。這樣就會(huì )導致下層協(xié)議處理時(shí)需要重新申請內存并進(jìn)行內存拷貝,從而影響程序的效率。另外隨著(zhù)數據的逐層處理,其內容可能有所增刪,而連續內存很難處理這樣動(dòng)態(tài)的數據增刪。因此,必須要有一種能適應數據動(dòng)態(tài)增刪,而在邏輯上又呈現連續性的數據結構,以滿(mǎn)足各層之間的數據傳遞,而不是進(jìn)行內存拷貝。因此在EPA協(xié)議棧設計中采取的報文內存管理方案必須滿(mǎn)足以下要求:(1)適合存放不同長(cháng)度的數據。(2)方便地操作變長(cháng)緩存。(3)盡量減少為完成這些操作所做的數據拷貝。
綜合考慮系統效率和EPA網(wǎng)絡(luò )報文的特點(diǎn),在EPA協(xié)議棧設計中,我們設計的每個(gè)緩沖塊的長(cháng)度固定,大小以滿(mǎn)足EPA網(wǎng)絡(luò )中的大多數報文的長(cháng)度為標準,這里我們設置每個(gè)緩沖塊的長(cháng)度為128字節,大于這個(gè)長(cháng)度的報文,就用多個(gè)緩沖塊形成的緩沖鏈來(lái)滿(mǎn)足。
EPA_BUFFER類(lèi)型的緩沖區是報文緩沖區,該結構包括兩個(gè)指針,兩個(gè)長(cháng)度域,其中next 域指針指向下一個(gè)EPA_BUFFER的緩沖塊,pdata域指向EPA_BUFFER中的數據起始位,tot_len域包括整個(gè)數據鏈的數據長(cháng)度,len域包含該緩沖塊中的數據長(cháng)度。EPA_BUFFER整個(gè)結構的大小取決域所使用的處理器體系結構中一個(gè)指針的大小及可能的最小alignment的大小。在帶有32位指針和4個(gè)字節alignment的體系結構,整個(gè)的大小為16字節。一個(gè)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);
對報文緩沖區使用這種設計方法,能夠實(shí)現從中斷發(fā)送,到協(xié)議處理,用戶(hù)接收等整個(gè)過(guò)程中,數據只需要一次拷貝,減少了對數據空間需求(不用頻繁地進(jìn)行數據硬復制),從而提高了EPA協(xié)議處理地實(shí)時(shí)性。
3.2通用緩沖區
在EPA協(xié)議棧設計中,通用緩沖區管理的實(shí)現很簡(jiǎn)單,它分配和回收鄰近的內存區域并且調整已分配的內存塊。它使用系統中全部?jì)却娴奶囟▍^域, EPA_MEM類(lèi)型的緩沖區是通用緩沖區,主要滿(mǎn)足協(xié)議棧中與報文無(wú)關(guān)的內存需求。
在EPA_RAM內部,內存管理通過(guò)將一種小的結構放置在每一個(gè)被分配的內存塊的頂端上來(lái)追蹤分配的內存,這個(gè)結構(圖2)設置兩個(gè)指針指向內存中下一個(gè)和前一個(gè)分配塊,還有一個(gè)used標志用來(lái)指示這個(gè)內存塊是否已經(jīng)被分配。使用最先適用的原則,通過(guò)搜索一個(gè)未使用的內存塊來(lái)分配內存。當一個(gè)內存塊被釋放時(shí),used標志被設為0,為了防止碎片,檢測下一個(gè)和上一個(gè)內存塊的used標志,如果它們還沒(méi)有被使用,幾個(gè)塊合并成一個(gè)大的未使用的塊。
圖2 EPA_RAM結構
4. EPA協(xié)議中的時(shí)鐘管理
在EPA協(xié)議棧設計中,定時(shí)器的有效管理尤為重要,特別是在確定性調度實(shí)現方面,能不能對定時(shí)器進(jìn)行合理的管理往往成為提高整個(gè)協(xié)議棧實(shí)時(shí)性能的瓶頸。對定時(shí)器的組織和管理最簡(jiǎn)單的方式是采取先進(jìn)先出(FIFO)方式的鏈表單隊列,這種組織管理方式會(huì )有一下兩個(gè)問(wèn)題:定時(shí)隊列太長(cháng),找到所有到點(diǎn)定時(shí)器的時(shí)間開(kāi)銷(xiāo)難以接受;當定時(shí)器中斷發(fā)生時(shí)要對所有的定時(shí)器的時(shí)長(cháng)域進(jìn)行減法操作,該部分時(shí)間性開(kāi)銷(xiāo)也很大。另外,工業(yè)現場(chǎng)的嵌入式設備中,外設資源相對有限,為了使該協(xié)議棧能夠廣泛的應用于多種硬件平臺,我們使用一個(gè)硬件定時(shí)器為基準時(shí)鐘,然后在其基礎上設計了簡(jiǎn)單遞增時(shí)鐘隊列,以滿(mǎn)足EPA系統對確定性調度以及時(shí)間同步的要求。
在系統中,為每個(gè)任務(wù)分配申請一個(gè)簡(jiǎn)單相對遞增時(shí)鐘隊列,隊列中的定時(shí)節點(diǎn)按照定時(shí)時(shí)長(cháng)排列有序,時(shí)長(cháng)短的靠前,如圖3所示,定時(shí)節點(diǎn)1的時(shí)長(cháng)為5 ticks, 定時(shí)節點(diǎn)2的時(shí)長(cháng)為2ticks, 定時(shí)節點(diǎn)3的時(shí)長(cháng)為4ticks, 在隊列中,定時(shí)節點(diǎn)的時(shí)長(cháng)值改為相對前一定時(shí)節點(diǎn)時(shí)長(cháng)的差值,即相對時(shí)長(cháng)。當時(shí)鐘中斷發(fā)生時(shí),只需對隊頭的時(shí)長(cháng)域進(jìn)行減1操作,所有的到點(diǎn)定時(shí)節點(diǎn)也均集中于隊列的前面。每個(gè)隊列中又可以有多個(gè)時(shí)鐘節點(diǎn)。邏輯時(shí)鐘隊列中,每個(gè)定時(shí)節點(diǎn)的數據結構如下所示:
typedef void (* timer_fun)(void *arg);
struct timer_node{
struct timer_node *next; /* 指向下一個(gè)定時(shí)節點(diǎn) */
u32 time; /* 定時(shí)時(shí)間 */
timer_fun hander; /* 定時(shí)時(shí)間到后執行的函數 */
void *arg; /* 定時(shí)時(shí)間到后執行函數的參數 */
}
一個(gè)時(shí)鐘隊列如下圖所示:
圖 3 EPA時(shí)鐘隊列
邏輯時(shí)鐘隊列的處理函數有:
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協(xié)議棧設計中,利用此種定時(shí)隊列,能夠使用一個(gè)基準定時(shí)器就可以簡(jiǎn)單,有效的實(shí)現確定性調度和時(shí)間同步所需的定時(shí)功能。
5.結論
本協(xié)議棧設計采用標準C進(jìn)行開(kāi)發(fā),并在A(yíng)RM平臺上結合UCOS-II進(jìn)行了測試,測試結果表明:采用分類(lèi)鏈式內存管理和相對遞增時(shí)鐘隊列的內存和時(shí)鐘管理方法的EPA通信協(xié)議棧通信過(guò)程穩定,速度快。
參考文獻:
[1] EPA國家標準起草工作組.用于工業(yè)測量與控制系統的EPA系統結構與通信規范[S]. 北京:中國標準出版社.2005.
[2 ] Qing LiandCarolyn Yao,嵌入式系統的實(shí)時(shí)概念[M],北京:航空航天出版社,2004.
[3]晨風(fēng). 嵌入式實(shí)時(shí)多任務(wù)軟件開(kāi)發(fā)基礎[M]. 北京:清華大學(xué)出版社. 2004.09
[4] EAN J.LABROSSE,邵貝貝譯. µC/OS-II DD源碼公開(kāi)的實(shí)時(shí)嵌入式操作系統. 中國電力出版社,2003.04
[5] 胡綱,王雷.遠端內存交換的設計與實(shí)現[J].微計算機信息,2006,10-3:21-23
[6] Jams NobleCharles Weir .內存受限系統之軟件開(kāi)發(fā)[M].華中科技出版社,2003.03
[7] Andrew N.Sloss,沈建華譯. ARM嵌入式系統開(kāi)發(fā)-軟件設計與優(yōu)化. 北京航空航天大學(xué)出版社,2005.05。
評論