陳發(fā)堂,朱 明,庹 勤,周元元
(重慶郵電大學(xué) 重慶市移動(dòng)通信技術(shù)重點(diǎn)實(shí)驗(yàn)室,重慶 400065)
通信系統(tǒng)離不開通信協(xié)議,而定時(shí)器是保證通信協(xié)議正常運(yùn)行的基本要素之一。在目前的通信系統(tǒng)中,通常硬件只提供幾個(gè)定時(shí)器,大量的定時(shí)器必須由軟件提供,而軟件提供方法只有兩種:由操作系統(tǒng)提供或由應(yīng)用程序提供[1]。其中,操作系統(tǒng)提供的定時(shí)器具有定時(shí)精度高、實(shí)時(shí)性好等優(yōu)點(diǎn)。
LTE(Long Term Evolution)項(xiàng)目是 3G的演進(jìn),它改進(jìn)并增強(qiáng)了3G的空中接口技術(shù),在20 MHz帶寬上能夠提供下行100 Mb/s、上行 50 Mb/s的峰值速率,同時(shí)對(duì)數(shù)據(jù)傳輸?shù)目煽啃蕴岢隽烁叩囊骩2]。無線鏈路控制RLC(Radio Link Control)層作為協(xié)議棧層次結(jié)構(gòu)中的L2層之一,主要是提供可靠的數(shù)據(jù)傳輸鏈路。LTE系統(tǒng)是一個(gè)對(duì)實(shí)時(shí)性要求較高的系統(tǒng),因此TD-LTE射頻一致性測(cè)試儀表的開發(fā)采用Nucleus Plus操作系統(tǒng)。該操作系統(tǒng)具有實(shí)時(shí)響應(yīng)、搶先式、多任務(wù)等開放特性,在通信設(shè)備、航空航天、醫(yī)療器械、工業(yè)控制系統(tǒng)等實(shí)時(shí)性要求高的領(lǐng)域得到了廣泛應(yīng)用。
Nucleus Plus是美國(guó)著名RTOS廠商ATI公司(Accelerated Technology Inc)在嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)Nucleus基礎(chǔ)上,為嵌入式應(yīng)用而設(shè)計(jì)的一個(gè)實(shí)時(shí)、任務(wù)搶先式、多任務(wù)操作系統(tǒng)內(nèi)核。大約95%的Nucleus Plus內(nèi)核代碼是用ANSIC編寫的,非常便于移植且可以很容易地應(yīng)用到大多數(shù)的處理器中[3]。該內(nèi)核提供任務(wù)間通信、任務(wù)調(diào)度、同步、內(nèi)存管理、定時(shí)器和中斷等操作系統(tǒng)最基本服務(wù),將任務(wù)組織起來構(gòu)成完整的系統(tǒng)的則是其中的任務(wù)間通信功能[4]。Nucleus Plus操作系統(tǒng)在系統(tǒng)初始化過程中為L(zhǎng)TE系統(tǒng)協(xié)議棧每個(gè)子層創(chuàng)建了一個(gè)對(duì)應(yīng)的任務(wù)和隊(duì)列,且不同的任務(wù)有不同的優(yōu)先級(jí),隊(duì)列則作為消息的載體提供了傳輸消息的機(jī)制。
LTE系統(tǒng)中的RLC層位于協(xié)議棧接入層的媒體介入控制MAC(Media Access Control)層和分組數(shù)據(jù)匯聚協(xié)議PDCP(Packet Data Convergence Protocol)層之間,主要執(zhí)行組裝PDU、重組SDU、重傳PDU等功能。它支持3種數(shù)據(jù)傳輸模式:透明模式(TM)、非確認(rèn)模式(UM)和確認(rèn)模式(AM)。為保證無線鏈路的正常運(yùn)行以及鏈路傳輸?shù)母咚傩?,RLC層作為L(zhǎng)TE系統(tǒng)核心通路的重要組成部分,定義了3種定時(shí)器,即重排序定時(shí)器(t-Reordering)、狀態(tài)禁止定時(shí)器(t-StatusProhibit)和輪詢重傳定時(shí)器(t-PollRetransmit)。第一種定時(shí)器在UM和AM模式下都存在,后兩種定時(shí)器只在AM模式下存在。這三種定時(shí)器在RLC層的作用都至關(guān)重要,是不可缺少的。其中,t-Reordering可以保證數(shù)據(jù)按序遞交給高層;t-StatusProhibit控制發(fā)送狀態(tài) PDU的時(shí)間間隔,該定時(shí)器運(yùn)行期間不能發(fā)送狀態(tài) PDU;t-PollRetransmit可以避免過分頻繁地要求對(duì)等層發(fā)送狀態(tài) PDU,以保證其他數(shù)據(jù)的正常接收、發(fā)送以及數(shù)據(jù)傳輸速率。根據(jù)3GPP通信協(xié)議,各模式下的定時(shí)器都有各自的開啟條件、關(guān)閉條件以及溢出處理方式。
在單實(shí)例模式下,為方便起見,RLC層的定時(shí)器和協(xié)議棧其他層一樣,都是在Nucleus Plus操作系統(tǒng)初始化時(shí)創(chuàng)建的。但實(shí)際存在SRB和一個(gè)或多個(gè)DRB共存的情況。為保證同時(shí)建立多個(gè)承載,LTE系統(tǒng)的RLC層必須支持多實(shí)例功能,且每個(gè)實(shí)例下的RLC實(shí)體必須擁有自己獨(dú)立的一套參數(shù)。如果某實(shí)例下RLC層被配置為UM模式,則其只擁有一個(gè)重排序定時(shí)器;如果某實(shí)例下RLC層被配置為AM模式,則其包含一個(gè)重排序定時(shí)器、一個(gè)狀態(tài)禁止定時(shí)器和一個(gè)輪詢重傳定時(shí)器。在多實(shí)例模式下,由于最初并不知道要建立哪些無線承載及數(shù)量,如果在系統(tǒng)初始化時(shí)就創(chuàng)建多個(gè)實(shí)例下的定時(shí)器,定會(huì)導(dǎo)致資源的浪費(fèi)。為防止多實(shí)例模式中RLC層各實(shí)例下的定時(shí)器出現(xiàn)混亂,在建立RLC實(shí)體時(shí)創(chuàng)建屬于本實(shí)例的定時(shí)器,而不是在系統(tǒng)初始化時(shí)創(chuàng)建定時(shí)器。例如在建立數(shù)據(jù)傳輸模式為AM模式,實(shí)例號(hào)為v_rlc_rbId的承載時(shí),創(chuàng)建重排序定時(shí)器,且表示為s_rlc_amInst[v_rlc_rbId].t_rlc_t_reordering。這樣既不會(huì)浪費(fèi)資源,也能很清晰明了地表示各實(shí)例下的定時(shí)器。
在處理定時(shí)器超時(shí)函數(shù)時(shí),由于在MAC層設(shè)置了軟中斷,如果在定時(shí)器超時(shí)后直接調(diào)用定時(shí)器超時(shí)函數(shù),超時(shí)函數(shù)、數(shù)據(jù)搬移完成后,操作系統(tǒng)可能直接跳轉(zhuǎn)到MAC層執(zhí)行相關(guān)操作,而不會(huì)立即返回RLC層斷點(diǎn)處繼續(xù)未完的操作。這樣就會(huì)導(dǎo)致RLC層的數(shù)據(jù)堆積,不利于系統(tǒng)快速有效地運(yùn)行。為避免這種情況,先調(diào)用協(xié)議棧一個(gè)整體的超時(shí)函數(shù)rtos01_09timerExpirationRoutine,該函數(shù)運(yùn)用switch語(yǔ)句,通過判斷分支,將超時(shí)的任務(wù)發(fā)到RLC層的隊(duì)列中。例如,如果此時(shí)是AM傳輸模式下的重排序定時(shí)器超時(shí),根據(jù)信令I(lǐng)D OP_T_rlc_t_am_reordering(為每種定時(shí)器分配了一個(gè)信令標(biāo)示)找到相應(yīng)的case語(yǔ)句,并執(zhí)行此語(yǔ)句后的操作,即將處理重排序定時(shí)器超時(shí)的任務(wù)發(fā)到Nucleus Plus操作系統(tǒng),為RLC層創(chuàng)建的隊(duì)列中,并將任務(wù)放在隊(duì)列的最前面,保證該消息能盡快地被處理。發(fā)送的消息要攜帶當(dāng)前狀態(tài)(所舉例中應(yīng)該是AM傳輸狀態(tài))和RBID(無線承載標(biāo)示),RBID用以說明是哪一個(gè)無線承載下的定時(shí)器超時(shí)。
多實(shí)例模式下,要進(jìn)行消息的處理,首先必須知道該消息屬于哪個(gè)實(shí)例以及該實(shí)例所處的狀態(tài),然后執(zhí)行該狀態(tài)下對(duì)應(yīng)的這條消息的處理函數(shù),處理結(jié)束后便躍遷到相應(yīng)的狀態(tài)[5]。針對(duì)存在多實(shí)例模式的情況,RLC層引入了一個(gè)多實(shí)例管理模塊,它負(fù)責(zé)將發(fā)到RLC層的任務(wù)轉(zhuǎn)到相應(yīng)的進(jìn)程實(shí)例下,多實(shí)例結(jié)構(gòu)如圖1所示。
圖1 RLC層多實(shí)例模式結(jié)構(gòu)圖
協(xié)議棧的開發(fā)是基于有限狀態(tài)機(jī)的思想,收到消息后,就會(huì)對(duì)消息進(jìn)行相應(yīng)的處理。當(dāng)操作系統(tǒng)檢測(cè)到RLC層任務(wù)被激活后便跳轉(zhuǎn)至RLC狀態(tài)機(jī),具體過程是:從RLC隊(duì)列最前面開始讀取定時(shí)器超時(shí)的消息,多實(shí)例管理模塊會(huì)解析出當(dāng)前消息的RBID,將其賦給instanceID,用其作為各實(shí)例的區(qū)分,然后通過有效的processID獲得當(dāng)前的進(jìn)程狀態(tài)機(jī)入口函數(shù),有效的instanceID獲得此實(shí)例當(dāng)前的狀態(tài)(本例中為AM傳輸狀態(tài))之后,狀態(tài)機(jī)進(jìn)入相應(yīng)的狀態(tài)分支,通過信令I(lǐng)D處理重排序定時(shí)器超時(shí)的函數(shù)。該消息處理完后,RLC狀態(tài)機(jī)會(huì)繼續(xù)從RLC隊(duì)列中讀取消息進(jìn)行處理,直至隊(duì)列為空。隊(duì)列為空時(shí),RLC層任務(wù)會(huì)被掛起,并跳出本層狀態(tài)機(jī),控制權(quán)限交還給操作系統(tǒng)。當(dāng)操作系統(tǒng)檢測(cè)到其他層任務(wù)被激活后,便會(huì)跳轉(zhuǎn)至其他層狀態(tài)機(jī)進(jìn)行消息處理。操作系統(tǒng)處理定時(shí)器超時(shí)的消息流程如圖2所示。
協(xié)議中涉及的對(duì)定時(shí)器的操作有創(chuàng)建、開啟、停止、重啟、重設(shè)和刪除功能。Nucleus Plus提供的功能函數(shù)只可以實(shí)現(xiàn)對(duì)定時(shí)器的創(chuàng)建、開啟、停止和刪除等基本操作,如果重啟定時(shí)器時(shí)需改變一個(gè)定時(shí)器的長(zhǎng)度,運(yùn)用這些功能函數(shù)實(shí)現(xiàn)的方法為:先關(guān)閉該定時(shí)器,再刪除該定時(shí)器,最后重新創(chuàng)建一個(gè)新長(zhǎng)度的定時(shí)器,并將啟動(dòng)的新定時(shí)器加入Nucleus Plus系統(tǒng)中啟動(dòng)定時(shí)器鏈表。很明顯,整個(gè)實(shí)現(xiàn)過程比較繁瑣,而且容易出錯(cuò)。在LTE系統(tǒng)協(xié)議棧的開發(fā)中,為了方便定時(shí)器的使用,設(shè)計(jì)了一個(gè)新的功能函數(shù)(RTOS02_01RestartTimerChangeable)。即將重啟定時(shí)器長(zhǎng)度改變和未改變合并在一個(gè)函數(shù)中,即在使用時(shí)通過該函數(shù)的形參的不同分別實(shí)現(xiàn)定時(shí)器長(zhǎng)度未改變和改變了兩種情況。首先定義如下兩個(gè)宏定義:
圖2 消息處理流程圖
當(dāng)需重啟定時(shí)器的長(zhǎng)度未改變時(shí),調(diào)用RTOS_RESTART_TIMER(timer);當(dāng)重啟定時(shí)器長(zhǎng)度改變時(shí),調(diào)用 RTOS_RESTART_TIMER_CH-ANGEABLE(timer,init_time,loop_time)。
定時(shí)器重啟的函數(shù)如下:
從上述函數(shù)可看出,必須在定時(shí)器未運(yùn)行時(shí),才能對(duì)其進(jìn)行操作。在調(diào)用定時(shí)器重啟的函數(shù)時(shí),如果形參init_time>0,則說明定時(shí)器的長(zhǎng)度需要修改,需重啟定時(shí)器時(shí)要用新的長(zhǎng)度;否則,重啟定時(shí)器時(shí)還是用原來的定時(shí)器長(zhǎng)度。當(dāng)重啟的定時(shí)器的長(zhǎng)度確定好后,便調(diào)用函數(shù)TMC_Start_Timer重啟該定時(shí)器。該函數(shù)的實(shí)現(xiàn)過程如下:整個(gè)函數(shù)大體分為兩部分,第一部分是已啟動(dòng)的定時(shí)器鏈表為空的情況,另一部分則是已有定時(shí)器啟動(dòng)的情況。第一種情況只需將已啟動(dòng)的定時(shí)器鏈表的指針指向該定時(shí)器的(任務(wù)控制塊)TCB結(jié)構(gòu)體,此時(shí)該定時(shí)器處于鏈表頭,將根據(jù)定時(shí)器的定時(shí)長(zhǎng)度設(shè)置實(shí)際的計(jì)數(shù)定時(shí)器結(jié)構(gòu),并開啟定時(shí)器。第二種情況,首先需確定系統(tǒng)沒有執(zhí)行要重啟定時(shí)器的超時(shí)任務(wù)。若正在執(zhí)行超時(shí)任務(wù),為保證系統(tǒng)正常運(yùn)行,不可試圖調(diào)整定時(shí)器鏈表。在確定沒有運(yùn)行超時(shí)任務(wù)時(shí),則可以從鏈表頭開始搜索,通過比較要加入的定時(shí)器的長(zhǎng)度和鏈表中每個(gè)定時(shí)器剩余時(shí)間,將該定時(shí)器加入鏈表中合適的位置。當(dāng)定時(shí)器超時(shí)后,操作系統(tǒng)便根據(jù)章節(jié)2中的超時(shí)過程進(jìn)行處理。
文中結(jié)合Nucleus Plus操作系統(tǒng)主要給出了項(xiàng)目TD-LTE射頻一致性測(cè)試儀表中,協(xié)議棧RLC層多實(shí)例模式下定時(shí)器的實(shí)現(xiàn)機(jī)制。操作系統(tǒng)為協(xié)議棧每個(gè)層創(chuàng)建了一個(gè)對(duì)應(yīng)的任務(wù)和隊(duì)列,并將隊(duì)列作為消息載體實(shí)現(xiàn)各任務(wù)間的通信。本文將定時(shí)器超時(shí)也作為一個(gè)消息發(fā)到隊(duì)列中,系統(tǒng)處理完超時(shí)函數(shù)后會(huì)返回?cái)帱c(diǎn)繼續(xù)之前未完的操作,避免了數(shù)據(jù)堆積,有利于系統(tǒng)快速正常地運(yùn)行。同時(shí),通過改善操作系統(tǒng)中定時(shí)器的模塊可以更方便地實(shí)現(xiàn)對(duì)定時(shí)器的控制。
[1]鄒仕祥.通信系統(tǒng)中大量定時(shí)器的設(shè)計(jì)與分析[J].計(jì)算機(jī)應(yīng)用,2005,25(11):2715-2719.
[2]沈嘉.LTE的技術(shù)創(chuàng)新與挑戰(zhàn)[J].電子技術(shù)應(yīng)用,2009,35(6):7-13.
[3]Wu Liming,Li Dongdong,Wang Guitang.Design of realtime image acquisition system of IC wafer[C].International Conference on Convergence Information Technology,2007.
[4]0001026-001 Rev.102-2000.Nucleus PLUS Reference Manual[S].2000.
[5]宋茂強(qiáng).通信軟件設(shè)計(jì)基礎(chǔ)(第2版)[M].北京:北京郵電大學(xué)出版社,2008.