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