一種嵌入式基帶系統(tǒng)定時(shí)器裝置的研究
摘要:在TD—LTE多模基帶系統(tǒng)中,不同的網(wǎng)絡(luò)模式協(xié)議時(shí)間對(duì)定時(shí)器的要求有所不同。實(shí)時(shí)時(shí)延處理是通信協(xié)議的基本組成部分,直接體現(xiàn)協(xié)議的時(shí)序關(guān)系。而定時(shí)又是時(shí)延的核心內(nèi)容,故定時(shí)器在通信協(xié)議的開發(fā)中有著至關(guān)重要的作用。本文描述了一種嵌入式系統(tǒng)定時(shí)器的實(shí)現(xiàn)方法,能有效地減少系統(tǒng)無效中斷次數(shù),提高系統(tǒng)效率。
關(guān)鍵詞:基帶系統(tǒng);嵌入式系統(tǒng);定時(shí)器;系統(tǒng)效率
引言
在嵌入式系統(tǒng)中,通常都會(huì)采用實(shí)時(shí)操作系統(tǒng),而實(shí)時(shí)操作系統(tǒng)依賴于系統(tǒng)時(shí)鐘進(jìn)行任務(wù)切換的控制。系統(tǒng)時(shí)鐘是特定的周期性中斷,系統(tǒng)時(shí)鐘的周期取決于不同的實(shí)時(shí)操作系統(tǒng)需求,通常嵌入式實(shí)時(shí)操作系統(tǒng)的系統(tǒng)時(shí)鐘周期為10~200 ms。系統(tǒng)時(shí)鐘使得內(nèi)核可以將任務(wù)延時(shí)若干個(gè)系統(tǒng)時(shí)鐘周期,在當(dāng)前任務(wù)等待事件發(fā)生時(shí),提供等待超時(shí)依據(jù)。系統(tǒng)時(shí)鐘的周期越小,系統(tǒng)調(diào)度的時(shí)間精度越高,但由于每個(gè)系統(tǒng)周期都會(huì)產(chǎn)生中斷,因而帶來的系統(tǒng)額外開銷越大。在本文中提出了一種嵌入式系統(tǒng)中定時(shí)器的實(shí)現(xiàn)方法,在能夠準(zhǔn)確反映協(xié)議內(nèi)容的前提下,減少無效中斷次數(shù),解決多模系統(tǒng)下高效與高精度定時(shí)器沖突問題,提高定時(shí)器的實(shí)現(xiàn)效率,從而提高整個(gè)系統(tǒng)的效率。
1 原始定時(shí)器方案
在不同的嵌入式系統(tǒng)中,不同的應(yīng)用、事件可能存在不同的定時(shí)精度的要求,而嵌入式系統(tǒng)的定時(shí)精度取決于硬件定時(shí)器的精度,因此硬件定時(shí)器的精度必須能夠滿足嵌入式系統(tǒng)中最高的定時(shí)精度。對(duì)于TD—LTE/TD—SCDMA雙?;鶐到y(tǒng),TD—LTE協(xié)議棧事件需要1 ms級(jí)別的定時(shí)精度,而TD—SCDMA協(xié)議時(shí)間僅僅需要10ms級(jí)別的定時(shí)精度。
對(duì)于存在多種定時(shí)精度要求的嵌入式系統(tǒng),目前的方案對(duì)定時(shí)器的實(shí)現(xiàn)方法是,采用一個(gè)能夠滿足系統(tǒng)最高定時(shí)精度要求的硬件定時(shí)器作為系統(tǒng)的基準(zhǔn)定時(shí)器,以提供操作系統(tǒng)所需的系統(tǒng)時(shí)鐘和軟件定時(shí)器的時(shí)鐘源。這種實(shí)現(xiàn)方法能夠滿足大多數(shù)系統(tǒng)的定時(shí)器需求,但存在問題。
由于作為基準(zhǔn)定時(shí)器的硬件定時(shí)器需要一直處于啟動(dòng)狀態(tài),基準(zhǔn)定時(shí)器在每個(gè)最小時(shí)間片都會(huì)產(chǎn)生硬件定時(shí)中斷,在沒有高定時(shí)精度要求的軟件定時(shí)器激活的情況下,基準(zhǔn)定時(shí)器會(huì)產(chǎn)生大量無效的中斷(當(dāng)前的硬件定時(shí)器中斷超時(shí)處理中,若沒有軟件定時(shí)器超時(shí),則系統(tǒng)判決
后,直接退出,不觸發(fā)任何軟件定時(shí)器中斷)。
在TD—LTE/TD—SCDMA雙?;鶐到y(tǒng)中,如果使用最小時(shí)間片為1 ms的硬件定時(shí)器作為基準(zhǔn)定時(shí)器,與使用10 ms的硬件定時(shí)器作為基準(zhǔn)定時(shí)器相比,單位時(shí)間內(nèi)其基準(zhǔn)定時(shí)器的硬件定時(shí)中斷次數(shù)增大了10倍;而在實(shí)際使用中發(fā)現(xiàn),90%的硬件定時(shí)中斷是無效中斷,這些無效中斷浪費(fèi)了大量的系統(tǒng)資源,降低了系統(tǒng)效率。
2 定時(shí)器優(yōu)化方案
本文提出了一種嵌入式系統(tǒng)定時(shí)器實(shí)現(xiàn)方法,在系統(tǒng)中設(shè)置一個(gè)主定時(shí)器及一個(gè)輔定時(shí)器,將主定時(shí)器作為系統(tǒng)的基準(zhǔn)定時(shí)器。主定時(shí)器超時(shí)的時(shí)候,修改剩余超時(shí)時(shí)間長度,并且剩余超時(shí)時(shí)間長度不小于主定時(shí)器最小時(shí)間片的軟件定時(shí)器,剩余超時(shí)時(shí)間長度;如果有軟件定時(shí)器剩余超時(shí)時(shí)間長度小于主定時(shí)器最小時(shí)間片,且不為0,則啟動(dòng)輔定時(shí)器為該軟件定時(shí)器提供硬件定時(shí)。如果輔定時(shí)器超時(shí),則修改剩余超時(shí)時(shí)間長度小于主定時(shí)器最小時(shí)間片的軟件定時(shí)器剩余超時(shí)時(shí)間長度;如果還有其他軟件定時(shí)器剩余超時(shí)時(shí)間長度小于主定時(shí)器最小時(shí)間片且不為0,修改輔定時(shí)器定時(shí)長度,否則關(guān)閉輔定時(shí)器。
2.1 定時(shí)器實(shí)現(xiàn)原理
系統(tǒng)時(shí)鐘的基準(zhǔn)時(shí)鐘觸發(fā)是由嵌入式系統(tǒng)的硬件定時(shí)器提供的,硬件定時(shí)器同時(shí)還為嵌入式系統(tǒng)的軟件定時(shí)器提供時(shí)鐘源,操作系統(tǒng)可以創(chuàng)建多個(gè)軟件定時(shí)器,軟件定時(shí)器的最小時(shí)間片取決于硬件定時(shí)器的最小時(shí)間片(軟件定時(shí)器的超時(shí)時(shí)間長度為硬件定時(shí)器最小時(shí)間片的整數(shù)倍)。操作系統(tǒng)可以在需要的時(shí)候執(zhí)行軟件定時(shí)器的創(chuàng)建、打開、關(guān)閉和刪除操作,為了方便實(shí)現(xiàn),操作系統(tǒng)管理軟件定時(shí)器的一種方法是以軟件定時(shí)器鏈表的形式來管理軟件定時(shí)器。
軟件定時(shí)器鏈表中各軟件定時(shí)器根據(jù)剩余超時(shí)時(shí)間長度順序排序,剩余超市時(shí)間長度小的軟件定時(shí)器排在鏈表前面,剩余超時(shí)時(shí)間大的軟件定時(shí)器排在鏈表后面。硬件定時(shí)器每次超時(shí)時(shí),都會(huì)對(duì)軟件定時(shí)器鏈表中的各個(gè)軟件定時(shí)器剩余超時(shí)時(shí)間長度進(jìn)行修改(將軟件定時(shí)器剩余超時(shí)時(shí)間長度減去本次硬件定時(shí)器超時(shí)時(shí)間長度,作為該軟件定時(shí)器的剩余超時(shí)時(shí)間長度)。
在本方案中,設(shè)置兩個(gè)定時(shí)器,即主定時(shí)器和輔定時(shí)器,并將主定時(shí)器作為系統(tǒng)的基準(zhǔn)定時(shí)器。其中,主定時(shí)器是低精度硬件定時(shí)器,輔定時(shí)器為高精度硬件定時(shí)器;低精度硬件定時(shí)器用于管理系統(tǒng)所有軟定時(shí)器(包括高精度定時(shí)和低精度定時(shí))。高精度硬件定時(shí)器用于管理高精度定時(shí)裝置,并且主定時(shí)器的定時(shí)精度不低于實(shí)時(shí)操作系統(tǒng)的系統(tǒng)時(shí)鐘精度要求的硬件定時(shí)器,輔定時(shí)器的定時(shí)精度不低于嵌入式系統(tǒng)最高定時(shí)精度要求的硬件定時(shí)器。定時(shí)器原理如圖1所示。設(shè)置系統(tǒng)高精度時(shí)間片為TH(TieketHigh),低精度時(shí)間片為TL(TicketLow),具體描述如下:
[!--empirenews.page--]
①在操作系統(tǒng)定時(shí)器鏈表中,所有定時(shí)器按照剩余超時(shí)時(shí)間順序排列。
②系統(tǒng)默認(rèn)低精度硬件定時(shí)器為主定時(shí)器,主定時(shí)器始終開啟,每個(gè)周期長度為TL。
③主定時(shí)器超時(shí)后,系統(tǒng)定時(shí)器處理函數(shù)檢查定時(shí)鏈表,若滿足超時(shí)條件則啟動(dòng)該定時(shí)超時(shí)函數(shù),同時(shí)對(duì)所有定時(shí)器剩余超時(shí)時(shí)間進(jìn)行減TL操作。
④若鏈表頭定時(shí)器不滿足超時(shí)時(shí)間,則僅對(duì)所有定時(shí)器減TL操作。
⑤若鏈表定時(shí)器剩余超時(shí)時(shí)間小于TL,即該定時(shí)器為TH高精度要求定時(shí)器。此時(shí),根據(jù)該高精度定時(shí)器的剩余超時(shí)時(shí)間TH,設(shè)置啟動(dòng)高精度硬件定時(shí)器(即輔定時(shí)器)。
⑥輔定時(shí)器在TH時(shí)間后超時(shí),觸發(fā)輔定時(shí)器超時(shí)函數(shù)。
系統(tǒng)中若存在連續(xù)多個(gè)TH定時(shí)器,則依據(jù)超時(shí)順序依次設(shè)置輔定時(shí)器,完成對(duì)連續(xù)多個(gè)TH定時(shí)器定時(shí)激活操作。
本方案將定時(shí)器精度較低的主定時(shí)器作為系統(tǒng)準(zhǔn)硬件定時(shí)器。為提高系統(tǒng)時(shí)鐘,當(dāng)軟件定時(shí)器剩余超時(shí)時(shí)間小于主定時(shí)器最小時(shí)間片時(shí),才啟動(dòng)定時(shí)精度較高的輔定時(shí)器,為定時(shí)精度高的軟件定時(shí)器提高硬件定時(shí)。這樣有效地減少了硬件定時(shí)器的無效中斷次數(shù),提高了系統(tǒng)效率。定時(shí)器原理圖如圖1所示。
2.2 實(shí)現(xiàn)流程
設(shè)置一個(gè)主定時(shí)器和一個(gè)輔定時(shí)器,則將主定時(shí)器作為系統(tǒng)的基準(zhǔn)定時(shí)器。如果主定時(shí)器每次超時(shí),則對(duì)軟件定時(shí)器鏈表中的軟件定時(shí)器剩余超時(shí)時(shí)間長度進(jìn)行修改,將軟件定時(shí)器超時(shí)時(shí)間長度減去主定時(shí)器最小時(shí)間片長度,作為該軟件定時(shí)器的剩余超時(shí)時(shí)間長度。
如果剩余超時(shí)時(shí)間長度不大于0,則觸發(fā)滿足超時(shí)條件的軟件定時(shí)器定時(shí)中斷。如果軟件定時(shí)器剩余超時(shí)時(shí)間長度小于主定時(shí)器最小時(shí)間片,則設(shè)置輔定時(shí)器定時(shí)長度為剩余超時(shí)時(shí)間長度最小的軟件定時(shí)器的剩余超時(shí)時(shí)間長度,此時(shí)啟動(dòng)輔定時(shí)器。主定時(shí)器流程如圖2所示。
如果輔定時(shí)器超時(shí),則將對(duì)軟件定時(shí)器鏈表中的軟件定時(shí)器剩余超時(shí)時(shí)間長度進(jìn)行修改。將軟件定時(shí)器剩余超時(shí)時(shí)間長度減去輔定時(shí)器定時(shí)長度,作為該軟件定時(shí)器剩余超時(shí)時(shí)間長度。如果超時(shí)時(shí)間長度不大于0,則觸發(fā)滿足條件的軟件定時(shí)器定時(shí)中斷。如果軟件定時(shí)器剩余超時(shí)時(shí)間長度小于主定時(shí)器最小時(shí)間片,則設(shè)置輔定時(shí)器定時(shí)長度為剩余超時(shí)時(shí)間長度最小的軟件定時(shí)器的剩余超時(shí)時(shí)間長度;否則,關(guān)閉輔定時(shí)器。輔定時(shí)器流程如圖3所示。
[!--empirenews.page--]
2.3 軟件定時(shí)器的增加
操作系統(tǒng)定時(shí)器增加時(shí),根據(jù)新定時(shí)器的超時(shí)時(shí)間順序,插入到系統(tǒng)定時(shí)器列表中,同時(shí)保證系統(tǒng)定時(shí)器剩余超時(shí)時(shí)間的有序性。若新插入定時(shí)器剩余超時(shí)時(shí)間小于TL,即插入定時(shí)器為高精度定時(shí)器,需要按照下列流程處理:
①如果插入前定時(shí)器列表頭的定時(shí)器不是高精度定時(shí)器,則判斷當(dāng)前鏈表頭定時(shí)器的剩余超時(shí)時(shí)間t是否大于新插入定時(shí)器時(shí)間x。其中,t為主定時(shí)器剩余超時(shí)時(shí)間;x為新插入定時(shí)器剩余超時(shí)時(shí)間;m為當(dāng)前時(shí)刻,10是指TD—SCDMA的定時(shí)精度為10 ms。
②若x<t,則將該定時(shí)器插入到定時(shí)器列表頭中,啟動(dòng)輔助定時(shí)器。
③若x≥t,則對(duì)新增定時(shí)器剩余超時(shí)時(shí)間按照公式x=x-t+10進(jìn)行修正,再根據(jù)修正的值的大小,將其插入到鏈表頭定時(shí)器后鏈表中,定時(shí)器增加流程1如圖4所示。
如果插入前定時(shí)器列表頭的定時(shí)器是高精度定時(shí)器,定時(shí)器增加流程2如圖5所示。根據(jù)當(dāng)前輔定時(shí)器超時(shí)時(shí)間時(shí)刻t與新插入定時(shí)器x超時(shí)時(shí)間關(guān)系進(jìn)行處理,步驟如下:
①若x<t,則調(diào)整輔定時(shí)器超時(shí)時(shí)間為x,同時(shí)修正鏈表中第二個(gè)元素剩余超時(shí)時(shí)間長為y—x。其中,t為輔定時(shí)器超時(shí)時(shí)間時(shí)刻,x為新加入定時(shí)器剩余超時(shí)時(shí)間。
②若x≥t,修正新插入輔定時(shí)器超時(shí)時(shí)間為x=x-t,同時(shí)根據(jù)當(dāng)前x的值按超時(shí)順序?qū)⑵洳迦氲疥?duì)列中。
結(jié)語
在嵌入式系統(tǒng)的設(shè)計(jì)中,很多應(yīng)用中的時(shí)間特性都是很重要的參數(shù),尤其在TD—LTE/TD—SCDMA雙?;鶐到y(tǒng)的開發(fā)中顯得尤為重要。在基帶操作系統(tǒng)中,一般維護(hù)的一個(gè)定時(shí)器列表無法滿足定時(shí)器需求。若設(shè)置定時(shí)器時(shí)間較短,則可能加重系統(tǒng)中斷服務(wù)程序的負(fù)荷,若設(shè)置時(shí)間片較長,則無法滿足協(xié)議時(shí)間的精度要求。故本優(yōu)化方案中,在高精度定時(shí)器達(dá)到超時(shí)時(shí)刻時(shí),才啟動(dòng)輔定時(shí)器,用輔定時(shí)器控制觸發(fā)高精度定時(shí)器的超時(shí)動(dòng)作,減少輔定時(shí)器的中斷次數(shù)。另外,也不需要?jiǎng)討B(tài)調(diào)整主定時(shí)器的時(shí)鐘設(shè)置,可以保證操作系統(tǒng)軟時(shí)鐘穩(wěn)定、準(zhǔn)確,能夠同時(shí)滿足多模終端對(duì)操作系統(tǒng)定時(shí)器的要求。