嵌入式實時操作系統(tǒng)在DATU中的應(yīng)用
發(fā)布時間:2009/2/18 0:00:00 訪問次數(shù):1308
配電自動化遠(yuǎn)方終端(datu)是配電自動化系統(tǒng)(das)的基礎(chǔ)設(shè)備,是配電變壓器遠(yuǎn)方終端(ttu)、饋線遠(yuǎn)方終端(ftu)和中壓監(jiān)控單元等幾種設(shè)備的統(tǒng)稱。這幾種設(shè)備除少數(shù)高端功能不同以外,其余功能均大致相似,主要包括數(shù)據(jù)采集與處理、監(jiān)控、保護和遠(yuǎn)方通信等功能。datu是一種實時性很強的嵌入式系統(tǒng),正常情況下它負(fù)責(zé)采集相應(yīng)設(shè)備的運行情況,如電壓、電流的數(shù)值以及開關(guān)的分合狀態(tài)等,并將上述信息通過通信網(wǎng)絡(luò)傳向遠(yuǎn)方的配電自動化主站,同時還可以根據(jù)主站下發(fā)的命令進行遠(yuǎn)方操作[1]。在配電網(wǎng)發(fā)生故障時,datu還要完成故障檢測、記錄故障參數(shù)和微機保護等功能。
在傳統(tǒng)的嵌入式系統(tǒng)中,應(yīng)用程序一般是由一個主程序和幾個中斷服務(wù)子程序(isr)組成。主程序一般是一個無限的循環(huán),在循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的數(shù)據(jù)處理,isr負(fù)責(zé)處理時間相關(guān)性很強的關(guān)鍵操作。因為isr提供的信息一直要等到主程序循環(huán)到負(fù)責(zé)處理這個信息的那段程序的時候才能得到處理,所以傳統(tǒng)系統(tǒng)的實時性比較差,最壞情況下的實時響應(yīng)時間可能是整個循環(huán)的執(zhí)行時間[2]。如果采用嵌入式實時操作系統(tǒng)µc/os-ii,則可以大大縮短實時響應(yīng)時間,接近理論上能達(dá)到的最好水平;此外,在嵌入式應(yīng)用中使用µc/os-ii,通過將應(yīng)用程序分解為多個任務(wù),可以簡化應(yīng)用軟件的設(shè)計;同時良好的多任務(wù)設(shè)計,有助于提高系統(tǒng)的穩(wěn)定性與可靠性[2]。
1 µc/os-ii的移植
所謂移植就是使µc/os-ii能在某個cpu中運行。雖然大部分的µc/os-ii代碼是用c語言寫的,但仍需要開發(fā)者用匯編語言寫一些與cpu相關(guān)的代碼,這是因為µc/os-ii在訪問cpu寄存器時只能通過匯編語言來實現(xiàn)。µc/os-ii與cpu相關(guān)的代碼包含在三個文件中:os_cpu.h,os_cpu_c.c,os_cpu_a.asm。
1.1 移植的前提條件
我們的datu所采用的cpu是美國德州儀器公司(ti)生產(chǎn)的一種高性能16位定點dsp——tms320lf2407a(以下簡稱為f2407)。其定點運算速度最高可達(dá)每秒40兆條指令,片內(nèi)除具有2.5k字的ram和32k字的flash存儲器外,還有a/d、spi、can等多種外設(shè)資源[3]。
µc/os-ii能否移植至某種cpu中,這種cpu必須滿足以下要求:該cpu的c編譯器支持內(nèi)嵌匯編語句;能由硬件產(chǎn)生定時中斷;支持軟件堆棧;有將堆棧指針(sp)和其它寄存器存儲到內(nèi)存中的指令[2]。通過查看f2407的手冊可以得知它完全滿足以上條件,所以將µc/os-ii移植到f2407中是完全可行的。
1.2 os_cpu.h
os_cpu.h包括一系列用#define定義的與處理器相關(guān)的數(shù)據(jù)類型、宏和常量,如關(guān)中斷、開中斷、任務(wù)切換和堆棧增長方式等。需要注意的是,由于intm不受加載狀態(tài)寄存器指令lst的影響,也就是說,即便可以將st0保存至堆;騼(nèi)存中,也無法使用lst指令從堆棧或內(nèi)存中恢復(fù)intm的值,故而只能使用直接關(guān)中斷的方式(方式一)來保護臨界區(qū)代碼[2]。
1.3 os_cpu_c.c
os_cpu_c.c中包括一系列c語言函數(shù):ostaskstkinit()和若干個hook函數(shù)。其中唯一必要的是ostaskstkinit(),其它幾個函數(shù)可以不包含任何代碼[2]。ostickisr()是時鐘節(jié)拍中斷的isr,因為code composor支持用c語言編寫isr,而且也支持內(nèi)嵌匯編語句,所以我們把用c語言編寫的ostickisr()也放在os_cpu_c.c中。
1.3.1 ostaskstkinit()
ostaskstkinit()在創(chuàng)建任務(wù)時被ostaskcreate()或ostaskcreateext()調(diào)用來初始化任務(wù)的堆棧結(jié)構(gòu)。圖1顯示了在f2407中需要放到任務(wù)堆棧中的寄存器及其順序。
圖1 任務(wù)的堆棧結(jié)構(gòu)
ostaskstkinit()的代碼如下,其四個參數(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;/*臨時寄存器*/
*ptos++ = (os_stk)0;/*輔助寄存器0*/
……………/*輔助寄存器ar2-ar7*/
*ptos++ = (os_stk)task;/*硬件堆棧2*/
……………/*硬件堆棧3-8*/
return ptos;
}
1.3.2 ostickisr()
配電自動化遠(yuǎn)方終端(datu)是配電自動化系統(tǒng)(das)的基礎(chǔ)設(shè)備,是配電變壓器遠(yuǎn)方終端(ttu)、饋線遠(yuǎn)方終端(ftu)和中壓監(jiān)控單元等幾種設(shè)備的統(tǒng)稱。這幾種設(shè)備除少數(shù)高端功能不同以外,其余功能均大致相似,主要包括數(shù)據(jù)采集與處理、監(jiān)控、保護和遠(yuǎn)方通信等功能。datu是一種實時性很強的嵌入式系統(tǒng),正常情況下它負(fù)責(zé)采集相應(yīng)設(shè)備的運行情況,如電壓、電流的數(shù)值以及開關(guān)的分合狀態(tài)等,并將上述信息通過通信網(wǎng)絡(luò)傳向遠(yuǎn)方的配電自動化主站,同時還可以根據(jù)主站下發(fā)的命令進行遠(yuǎn)方操作[1]。在配電網(wǎng)發(fā)生故障時,datu還要完成故障檢測、記錄故障參數(shù)和微機保護等功能。
在傳統(tǒng)的嵌入式系統(tǒng)中,應(yīng)用程序一般是由一個主程序和幾個中斷服務(wù)子程序(isr)組成。主程序一般是一個無限的循環(huán),在循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的數(shù)據(jù)處理,isr負(fù)責(zé)處理時間相關(guān)性很強的關(guān)鍵操作。因為isr提供的信息一直要等到主程序循環(huán)到負(fù)責(zé)處理這個信息的那段程序的時候才能得到處理,所以傳統(tǒng)系統(tǒng)的實時性比較差,最壞情況下的實時響應(yīng)時間可能是整個循環(huán)的執(zhí)行時間[2]。如果采用嵌入式實時操作系統(tǒng)µc/os-ii,則可以大大縮短實時響應(yīng)時間,接近理論上能達(dá)到的最好水平;此外,在嵌入式應(yīng)用中使用µc/os-ii,通過將應(yīng)用程序分解為多個任務(wù),可以簡化應(yīng)用軟件的設(shè)計;同時良好的多任務(wù)設(shè)計,有助于提高系統(tǒng)的穩(wěn)定性與可靠性[2]。
1 µc/os-ii的移植
所謂移植就是使µc/os-ii能在某個cpu中運行。雖然大部分的µc/os-ii代碼是用c語言寫的,但仍需要開發(fā)者用匯編語言寫一些與cpu相關(guān)的代碼,這是因為µc/os-ii在訪問cpu寄存器時只能通過匯編語言來實現(xiàn)。µc/os-ii與cpu相關(guān)的代碼包含在三個文件中:os_cpu.h,os_cpu_c.c,os_cpu_a.asm。
1.1 移植的前提條件
我們的datu所采用的cpu是美國德州儀器公司(ti)生產(chǎn)的一種高性能16位定點dsp——tms320lf2407a(以下簡稱為f2407)。其定點運算速度最高可達(dá)每秒40兆條指令,片內(nèi)除具有2.5k字的ram和32k字的flash存儲器外,還有a/d、spi、can等多種外設(shè)資源[3]。
µc/os-ii能否移植至某種cpu中,這種cpu必須滿足以下要求:該cpu的c編譯器支持內(nèi)嵌匯編語句;能由硬件產(chǎn)生定時中斷;支持軟件堆棧;有將堆棧指針(sp)和其它寄存器存儲到內(nèi)存中的指令[2]。通過查看f2407的手冊可以得知它完全滿足以上條件,所以將µc/os-ii移植到f2407中是完全可行的。
1.2 os_cpu.h
os_cpu.h包括一系列用#define定義的與處理器相關(guān)的數(shù)據(jù)類型、宏和常量,如關(guān)中斷、開中斷、任務(wù)切換和堆棧增長方式等。需要注意的是,由于intm不受加載狀態(tài)寄存器指令lst的影響,也就是說,即便可以將st0保存至堆;騼(nèi)存中,也無法使用lst指令從堆;騼(nèi)存中恢復(fù)intm的值,故而只能使用直接關(guān)中斷的方式(方式一)來保護臨界區(qū)代碼[2]。
1.3 os_cpu_c.c
os_cpu_c.c中包括一系列c語言函數(shù):ostaskstkinit()和若干個hook函數(shù)。其中唯一必要的是ostaskstkinit(),其它幾個函數(shù)可以不包含任何代碼[2]。ostickisr()是時鐘節(jié)拍中斷的isr,因為code composor支持用c語言編寫isr,而且也支持內(nèi)嵌匯編語句,所以我們把用c語言編寫的ostickisr()也放在os_cpu_c.c中。
1.3.1 ostaskstkinit()
ostaskstkinit()在創(chuàng)建任務(wù)時被ostaskcreate()或ostaskcreateext()調(diào)用來初始化任務(wù)的堆棧結(jié)構(gòu)。圖1顯示了在f2407中需要放到任務(wù)堆棧中的寄存器及其順序。
圖1 任務(wù)的堆棧結(jié)構(gòu)
ostaskstkinit()的代碼如下,其四個參數(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;/*臨時寄存器*/
*ptos++ = (os_stk)0;/*輔助寄存器0*/
……………/*輔助寄存器ar2-ar7*/
*ptos++ = (os_stk)task;/*硬件堆棧2*/
……………/*硬件堆棧3-8*/
return ptos;
}
1.3.2 ostickisr()
熱門點擊
- Linux設(shè)備驅(qū)動程序的函數(shù)跳轉(zhuǎn)表
- PIE中斷向量的映射方式
- Linux系統(tǒng)調(diào)用例程system_call
- PIE模塊級中斷
- 什么是Linux內(nèi)核模塊
- Linux系統(tǒng)調(diào)用接口、系統(tǒng)調(diào)用例程和內(nèi)核服
- ARM復(fù)位原理
- Linux系統(tǒng)調(diào)用接口、系統(tǒng)調(diào)用例程和內(nèi)核服
- Linux字符設(shè)備驅(qū)動程序的注冊
- Linux外部設(shè)備的基本概念
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說新車間的特點是“靈動”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- AMOLED顯示驅(qū)動芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計
- GB300 超級芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究