日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

嵌入式實(shí)時(shí)操作系統(tǒng)在DATU中的應(yīng)用

出處:音樂樂樂 發(fā)布于:2009-02-17 11:07:26

  配電自動(dòng)化遠(yuǎn)方終端(DATU)是配電自動(dòng)化系統(tǒng)(DAS)的基礎(chǔ)設(shè)備,是配電變壓器遠(yuǎn)方終端(TTU)、饋線遠(yuǎn)方終端(FTU)和中壓監(jiān)控單元等幾種設(shè)備的統(tǒng)稱。這幾種設(shè)備除少數(shù)高端功能不同以外,其余功能均大致相似,主要包括數(shù)據(jù)采集與處理、監(jiān)控、保護(hù)和遠(yuǎn)方通信等功能。DATU是一種實(shí)時(shí)性很強(qiáng)的嵌入式系統(tǒng),正常情況下它負(fù)責(zé)采集相應(yīng)設(shè)備的運(yùn)行情況,如電壓、電流的數(shù)值以及開關(guān)的分合狀態(tài)等,并將上述信息通過通信網(wǎng)絡(luò)傳向遠(yuǎn)方的配電自動(dòng)化主站,同時(shí)還可以根據(jù)主站下發(fā)的命令進(jìn)行遠(yuǎn)方操作[1]。在配電網(wǎng)發(fā)生故障時(shí),DATU還要完成故障檢測(cè)、記錄故障參數(shù)和微機(jī)保護(hù)等功能。

  在傳統(tǒng)的嵌入式系統(tǒng)中,應(yīng)用程序一般是由一個(gè)主程序和幾個(gè)中斷服務(wù)子程序(ISR)組成。主程序一般是一個(gè)無限的循環(huán),在循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的數(shù)據(jù)處理,ISR負(fù)責(zé)處理時(shí)間相關(guān)性很強(qiáng)的關(guān)鍵操作。因?yàn)镮SR提供的信息一直要等到主程序循環(huán)到負(fù)責(zé)處理這個(gè)信息的那段程序的時(shí)候才能得到處理,所以傳統(tǒng)系統(tǒng)的實(shí)時(shí)性比較差,壞情況下的實(shí)時(shí)響應(yīng)時(shí)間可能是整個(gè)循環(huán)的執(zhí)行時(shí)間[2]。如果采用嵌入式實(shí)時(shí)操作系統(tǒng)µC/OS-II,則可以大大縮短實(shí)時(shí)響應(yīng)時(shí)間,接近理論上能達(dá)到的水平;此外,在嵌入式應(yīng)用中使用µC/OS-II,通過將應(yīng)用程序分解為多個(gè)任務(wù),可以簡(jiǎn)化應(yīng)用軟件的設(shè)計(jì);同時(shí)良好的多任務(wù)設(shè)計(jì),有助于提高系統(tǒng)的穩(wěn)定性與可靠性[2]。

  1 µC/OS-II的移植

  所謂移植就是使µC/OS-II能在某個(gè)CPU中運(yùn)行。雖然大部分的µC/OS-II代碼是用C語言寫的,但仍需要開發(fā)者用匯編語言寫一些與CPU相關(guān)的代碼,這是因?yàn)?micro;C/OS-II在訪問CPU寄存器時(shí)只能通過匯編語言來實(shí)現(xiàn)。µC/OS-II與CPU相關(guān)的代碼包含在三個(gè)文件中:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。

  1.1 移植的前提條件

  我們的DATU所采用的CPU是美國德州儀器公司(TI)生產(chǎn)的一種高性能16位定點(diǎn)DSP——TMS320LF2407A(以下簡(jiǎn)稱為F2407)。其定點(diǎn)運(yùn)算速度可達(dá)每秒40兆條指令,片內(nèi)除具有2.5K字的RAM和32K字的FLASH存儲(chǔ)器外,還有A/D、SPI、CAN等多種外設(shè)資源[3]。

  µC/OS-II能否移植至某種CPU中,這種CPU必須滿足以下要求:該CPU的C編譯器支持內(nèi)嵌匯編語句;能由硬件產(chǎn)生定時(shí)中斷;支持軟件堆棧;有將堆棧指針(SP)和其它寄存器存儲(chǔ)到內(nèi)存中的指令[2]。通過查看F2407的手冊(cè)可以得知它完全滿足以上條件,所以將µC/OS-II移植到F2407中是完全可行的。

  1.2 OS_CPU.H

  OS_CPU.H包括一系列用#define定義的與處理器相關(guān)的數(shù)據(jù)類型、宏和常量,如關(guān)中斷、開中斷、任務(wù)切換和堆棧增長(zhǎng)方式等。需要注意的是,由于INTM不受加載狀態(tài)寄存器指令LST的影響,也就是說,即便可以將ST0保存至堆棧或內(nèi)存中,也無法使用LST指令從堆棧或內(nèi)存中恢復(fù)INTM的值,故而只能使用直接關(guān)中斷的方式(方式一)來保護(hù)臨界區(qū)代碼[2]。

  1.3 OS_CPU_C.C

  OS_CPU_C.C中包括一系列C語言函數(shù):OSTaskStkInit()和若干個(gè)Hook函數(shù)。其中必要的是OSTaskStkInit(),其它幾個(gè)函數(shù)可以不包含任何代碼[2]。OSTickISR()是時(shí)鐘節(jié)拍中斷的ISR,因?yàn)镃ode Composor支持用C語言編寫ISR,而且也支持內(nèi)嵌匯編語句,所以我們把用C語言編寫的OSTickISR()也放在OS_CPU_C.C中。

  1.3.1 OSTaskStkInit()

  OSTaskStkInit()在創(chuàng)建任務(wù)時(shí)被OSTaskCreate()或OSTaskCreateExt()調(diào)用來初始化任務(wù)的堆棧結(jié)構(gòu)。圖1顯示了在F2407中需要放到任務(wù)堆棧中的寄存器及其順序。

任務(wù)的堆棧結(jié)構(gòu)

  圖1 任務(wù)的堆棧結(jié)構(gòu)

  OSTaskStkInit()的代碼如下,其四個(gè)參數(shù)中,task是任務(wù)的起始地址,pdata是傳給任務(wù)的數(shù)據(jù)指針,ptos是初的SP,opt沒有用到。函數(shù)返回的是全部入棧操作完成后的新的SP。

  OS_STK *OSTaskStkInit(void (*task),

  void *pdata, OS_STK *ptos, INT16U opt)

  {

  *ptos++ = (OS_STK)pdata;/*任務(wù)參數(shù)*/

  *ptos++ = (OS_STK)0;/*空閑    */

  *ptos++ = (OS_STK)0x27FC;/*ST1*/

  *ptos++ = (OS_STK)0x2600;/*ST0*/

  *ptos++ = (OS_STK)0;/*ACCH*/

  *ptos++ = (OS_STK)0;/*ACCL*/

  *ptos++ = (OS_STK)0;/*PH*/

  *ptos++ = (OS_STK)0;/*PL*/

  *ptos++ = (OS_STK)0;/*臨時(shí)寄存器*/

  *ptos++ = (OS_STK)0;/*輔助寄存器0*/

  ……………/*輔助寄存器AR2-AR7*/

  *ptos++ = (OS_STK)task;/*硬件堆棧2*/

  ……………/*硬件堆棧3-8*/

  return ptos;

  }

  1.3.2 OSTickISR()

  OSTickISR()的主要任務(wù)就是調(diào)用函數(shù)OSTimeTick(),其作用是給每個(gè)需要延時(shí)的任務(wù)的延時(shí)時(shí)間OSTCBDly減1(如果該項(xiàng)不為零的話)。當(dāng)某個(gè)任務(wù)的OSTCBDly減到了零,這個(gè)任務(wù)就進(jìn)入了就緒態(tài)[2]。具體代碼如下:

  interrupt void timer()/*時(shí)鐘節(jié)拍中斷*/

  {

  *IFR |= 0x0004;

  OSIntEnter();

  if(OSIntNesting = = 1){

  /*OSTCBCur->OSTCBStkPtr = SP;*/

  asm( LDPK     _OSTCBCur);

  asm( LAR     AR3, _OSTCBCur);

  asm( MAR    *, AR3);

  asm( SAR    AR1, *);

  asm( LACL    *);

  asm( SUB    #1h);

  asm( SACL    *,0,AR1);

  }

  OSTimeTick();

  OSIntExit();

  }

  1.4 OS_CPU_A.ASM

  OS_CPU_A.ASM中包括幾個(gè)匯編語言函數(shù):OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()。需要注意的是,我們?cè)贠SCtxSw()中直接調(diào)用了F2407的集成開發(fā)環(huán)境Code Composor 4.0提供的兩個(gè)運(yùn)行庫函數(shù)I$$SAVE和I$$REST,I$$SAVE的作用是將全部寄存器保存到任務(wù)堆棧中,I$$REST的作用是從任務(wù)堆棧中恢復(fù)全部CPU寄存器,并執(zhí)行中斷返回指令。

  OSIntCtxSw()是在ISR中被調(diào)用的,由于所有的CPU寄存器都已經(jīng)被ISR正確地保存到了被中斷任務(wù)的堆棧之中,并且如果該ISR是中斷嵌套的層,則ISR已經(jīng)將SP保存到被中斷任務(wù)的任務(wù)控制塊(TCB)中了。因此除了不需要再保存CPU寄存器和堆棧指針外,OSIntCtxSw()完全可以采用OSCtxSw()中的大部分代碼,實(shí)際上本文中的中斷級(jí)切換就是直接跳轉(zhuǎn)到OSCtxSw()中的標(biāo)號(hào)為_OSIntCtxSw的那一行的。

  2 應(yīng)用軟件

  2.1 軟件整體設(shè)計(jì)思路

  將µC/OS-II引入嵌入式系統(tǒng)之后,應(yīng)用程序的設(shè)計(jì)就變得非常簡(jiǎn)單了。盡管DATU的功能比較繁多,但我們可以將比較復(fù)雜的程序?qū)哟位凑展δ軇澐譃槎鄠€(gè)任務(wù),各個(gè)任務(wù)可以分別編寫,但要事先設(shè)計(jì)好任務(wù)間的通信方式,這樣程序?qū)⒏菀组_發(fā)與維護(hù)[2]。根據(jù)DATU應(yīng)完成的功能將應(yīng)用軟件劃分為十個(gè)用戶任務(wù)和四個(gè)ISR,按照任務(wù)的重要性和是否具有硬實(shí)時(shí)性來分配優(yōu)先級(jí),優(yōu)先級(jí)數(shù)值越低,任務(wù)的優(yōu)先級(jí)越高。所有給任務(wù)分配的優(yōu)先級(jí)都是在用戶自定義頭文件userdef.h中用宏來定義的;由于保護(hù)處理任務(wù)需要進(jìn)行FFT運(yùn)算,這需要大量的局部變量空間,故而該任務(wù)的堆棧非常大,為2048字節(jié),其余任務(wù)均為128字節(jié)。所有任務(wù)的編號(hào)、名稱和功能描述如表1所示。

  2.2 任務(wù)介紹

  任務(wù)其實(shí)就是一個(gè)簡(jiǎn)單的無限循環(huán)的程序,該程序可以認(rèn)為CPU完全只屬于它自己。在循環(huán)中必須調(diào)用延時(shí)或等待郵箱消息等函數(shù),以便將CPU控制權(quán)交給其它的任務(wù)。在上述10個(gè)任務(wù)中,比較復(fù)雜的就是保護(hù)處理任務(wù)。它根據(jù)A/D中斷子程序中采集到的瞬時(shí)值計(jì)算出電流的基波及二次諧波分量,結(jié)合相應(yīng)的電壓信號(hào),判斷是否有線路故障,如是則啟動(dòng)故障后錄波,然后向主站上報(bào)故障信息。除此之外,該任務(wù)還能配合通信任務(wù)進(jìn)行遠(yuǎn)方或當(dāng)?shù)囟ㄖ嫡?。任?wù)流程從略。

  3 系統(tǒng)性能測(cè)試

  3.1 CPU使用率

  µC/OS-Ⅱ提供一個(gè)計(jì)算CPU使用率的統(tǒng)計(jì)任務(wù)OSTaskStat()。該任務(wù)每秒鐘運(yùn)行,計(jì)算當(dāng)前的CPU使用率。如果應(yīng)用程序打算使用統(tǒng)計(jì)任務(wù),必須在初始化時(shí)建立一個(gè)的任務(wù),并且只在這個(gè)任務(wù)中調(diào)用OSStatInit()。換句話說,在調(diào)用系統(tǒng)啟動(dòng)函數(shù)OSStart()之前,必須先建立一個(gè)任務(wù),在這個(gè)任務(wù)中調(diào)用統(tǒng)計(jì)初始化函數(shù)OSStatInit(),然后再建立應(yīng)用程序中的其它任務(wù)。

  3.2 任務(wù)堆棧使用情況

  有時(shí)候決定任務(wù)實(shí)際所需的堆棧大小是很有必要的,這樣我們就可以避免為任務(wù)分配過多的堆??臻g。µC/OS-II提供的函數(shù)OSTaskStkChk()可以為開發(fā)者提供這種有價(jià)值的信息。每調(diào)用該函數(shù),就會(huì)執(zhí)行堆棧檢驗(yàn)。每次在調(diào)用OSTaskStkChk()的時(shí)候,可能會(huì)得到不同的空閑空間數(shù)。應(yīng)該讓應(yīng)用程序運(yùn)行足夠長(zhǎng)的時(shí)間,才有可能經(jīng)歷壞的堆棧使用情況,這樣才能得到正確的信息,我們就可以據(jù)此重新設(shè)置堆棧的終容量了[2]。

  4 結(jié)束語

  DATU實(shí)際上是一種非常典型的嵌入式系統(tǒng),將µC/OS-II引入該系統(tǒng)中是本產(chǎn)品的一大特色。實(shí)測(cè)證明,采用µC/OS-II大大提高了系統(tǒng)的實(shí)時(shí)性,特別是提高了遙信處理和保護(hù)處理等較高優(yōu)先級(jí)任務(wù)的響應(yīng)速度。在滿足系統(tǒng)對(duì)實(shí)時(shí)性的整體要求的基礎(chǔ)上,µC/OS-II所采用的基于優(yōu)先級(jí)的調(diào)度策略可以限度地滿足關(guān)鍵的任務(wù),如遙信變位處理的響應(yīng)時(shí)間遠(yuǎn)少于部頒標(biāo)準(zhǔn)。同時(shí)以µC/OS-II作為整個(gè)軟件體系的基礎(chǔ),非常方便應(yīng)用軟件的模塊化設(shè)計(jì)。各個(gè)任務(wù)之間除通過µC/OS-II提供的函數(shù)進(jìn)行通信之外,沒有其他的聯(lián)系途徑,這種松耦合結(jié)構(gòu)提高了整個(gè)軟件的可靠性。
  


  
關(guān)鍵詞:嵌入式實(shí)時(shí)操作系統(tǒng)在DATU中的應(yīng)用TMS320LF2407A嵌入式實(shí)時(shí)操作系統(tǒng)

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

2023全國大學(xué)生嵌入式芯片與系統(tǒng)設(shè)計(jì)競(jìng)賽,海思賽道,工程機(jī)械遠(yuǎn)程管理與安全檢測(cè)系統(tǒng)
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!