浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » 嵌入式系統(tǒng)

嵌入式實時操作系統(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()

-->
相關(guān)IC型號

熱門點擊

 

推薦技術(shù)資料

DFRobot—玩的就是
    如果說新車間的特點是“靈動”,F(xiàn)QPF12N60C那么... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13751165337  13692101218
粵ICP備09112631號-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!