IT技術互動交流平(ping)台

万福彩票官网

來源︰IT165收集(ji)  發布日期︰2020-02-20 06:13:24
原創文章

轉載請注(zhu)冊(ce)來源http://blog.csdn.net/tostq

系列教程目錄︰http://blog.csdn.net/tostq/article/details/51245979

SYS/BIOS是一個可擴(kuo)展的實時內核(或者說是操作系統),其提供了許多模(mo)塊化的APIs(應用程序(xu)接(jie)口),支持搶佔式多線(xian)程,硬件抽象,實時分(fen)析和配置工(gong)具,其設計目的是為了最大限度地減少對內存和CPU的要求。其擁有很多實時嵌入式操作系統的功能,如任務的調度,任務間的同步和通信,內存管(guan)理,實時時鐘(zhong)管(guan)理,中斷xi)窆guan)理等。有了它,用戶可以(yi)編寫復雜的多線(xian)程程序(xu),並且會佔用更少的CPU和內存資源。 SYS/BIOS的nao)zao)期版本(ben)是DSP/BIOS,更名(ming)的nao) yin),是因(yin)為SYS/BIOS不(bu)僅可以(yi)用于(yu)DSP,而且也可以(yi)嵌入到ARM等其他SoC中去。SYS/BIOS是一個可用于(yu)實時調度、同步,主機和目標機通信,以(yi)及實時分(fen)析系統cheng)系囊桓隹剎眉跏凳蹦諍耍  ├飼勒際降畝噯撾竦鞫齲 雜布募笆狽從Γ 凳狽fen)析和配置工(gong)具等。同時也提供標準的API接(jie)口,易于(yu)使用。它是TI的eXpressDSP實時軟件技術的的一個關(guan)鍵部分(fen)。 CCS中集(ji)成(cheng)安裝了SYS/BIOS,能夠大大方(fang)便(bian)用戶編寫多任務應用程序(xu)。另一方(fang)面,SYS/BIOS可以(yi)在XDCtools中使用配置技術,極大地方(fang)便(bian)了SYS/BIOS的開發流程。 本(ben)節主要是通過一些簡(jian)單的SYS/BIOS的例子來介紹相關(guan)APIs組(zu)件的作用,這里主要包括了時鐘(zhong)Clock模(mo)塊、任務Tsk模(mo)塊、軟件中斷Swi模(mo)塊、信號量(liang)Sem模(mo)塊及日志Log模(mo)塊五類簡(jian)單模(mo)塊的使用。
一、新(xin)建SYS/BIOS項目 (1)在項目模(mo)板中選擇SYS/BIOS項目中的Hello Example模(mo)板,點(dian)擊Next
(2)在RTSC(XDCtools的別稱)配置頁中選中xing)枰 YS/BIOS,XDCtools及其他組(zu)件的版本(ben),Target保持默認,不(bu)需修改(gai)mo) 綣latform沒有自動填充,選擇與(yu)設備(bei)適(shi)shi)玫鈉ping)台。Build-profile決定程序(xu)鏈接(jie)的庫,推(tui)薦(jian)使用release,即(ji)使仍然處于(yu)創建和調試階(jie)段,點(dian)擊完成(cheng)創建項目。
Tips︰當我們開始使用SYS/BIOS時,是不(bu)能指定自己(ji)添加的鏈接(jie)命令文件.cmd。因(yin)為.cmd會在構(gou)建工(gong)程的時候由SYS/BIOS自動創建並使用。 (3)點(dian)擊編譯 (4)導入target文件後,點(dian)擊調試,運行(xing)得到結果
二、SYS/BIOS的模(mo)塊與(yu)配置 (1)SYS/BIOS可以(yi)用文本(ben)編輯(ji)器或者是圖像配置編輯(ji)器XGCONF來編輯(ji),雙擊打開.cfg文件如下
單擊System Overview,可以(yi)顯(xian)示程序(xu)當前(qian)使用的主模(mo)塊(帶綠色(se)小(xiao)箭(jian)頭(tou)的mo)(2)各種APIs模(mo)塊的添加這里有兩(liang)種方(fang)法(fa),一hui)質侵苯jie)雙擊主模(mo)板進(jin)入,然後勾選Add
另一hui)址fang)法(fa)是在Available Products中右擊選中的模(mo)塊,選擇Use
(3)各個API模(mo)塊的作用 CLK︰片內定時器模(mo)塊,主要控(kong)制片內定時器並提供高精度的32位實時邏(luo)輯(ji)時鐘(zhong),它能控(kong)制中斷的速度,使之(zhi)最快達到單指令周(zhou)期時間。 HST︰主機輸入/輸出模(mo)塊,管(guan)理主機通過對象,它允(yun)許應用程序(xu)在目標系統和主機之(zhi)間交流數據,主機通道通過靜態(tai)配置為輸入或輸出。 HWI︰硬件中斷模(mo)塊,提供對硬件中斷xi)窶痰鬧?鄭 稍諗渲夢募兄付 庇布卸戲(xi)?斃枰 舳 暮 IDL︰休眠(mian)功能模(mo)塊,管(guan)理休眠(mian)函數在目標系統程序(xu)沒有更高優先權的函數運行(xing)時啟動 LOG︰日志模(mo)塊,管(guan)理LOG對象,LOG對象在目標系統程序(xu)執(zhi)行(xing)時實時捕捉事(shi)件,開發者可以(yi)使用系統日志或定義自己(ji)的日志,並在CCS中利用它實時瀏(liu)覽信息。 MEM︰存儲器模(mo)塊允(yun)許指定存放pai)勘瓿絛xu)的代碼和數據所需的存儲器段 PIP︰數據通道模(mo)塊管(guan)理數據通道,它用來緩存輸入和輸出數據流,這此數據通道提供一hui)灤緣娜砑萁 gou),可以(yi)使用它們驅(qu)動DSP和tui)淥凳蓖wai)圍設備(bei)之(zhi)間的I/O通道 PRD︰周(zhou)期函數模(mo)塊,管(guan)理周(zhou)期對象,它觸發應用程序(xu)的周(zhou)期性執(zhi)行(xing)xiao)RTDX︰實時數據交換允(yun)許數據在主機和目標系統之(zhi)間實時交換,在主機上使用自動OLE的客戶都可對yun)萁jin)行(xing)實時顯(xian)示和tou)治觥STS︰統計模(mo)塊,管(guan)理統計累積(ji)器,在程序(xu)運行(xing)時,它存儲關(guan)鍵統計數據並能通過CCS瀏(liu)覽這此統計數據 SWI︰軟件中斷模(mo)塊管(guan)理軟件中斷。 TRC︰跟蹤模(mo)塊,管(guan)理一套跟蹤控(kong)制比特,它們通過事(shi)件日志和統計累積(ji)器控(kong)制程序(xu)信息的實時捕捉。
三、在項目中導入LOG模(mo)塊 LOG模(mo)塊實際上是一個實現zhi)蠐︵畔 PI (1)添加LOG模(mo)塊
(2)LOG模(mo)塊的使用 LOG模(mo)塊定義了許多比如Log_error、Log_info、Log_warning、Log_print等之(zhi)類函數,這些函數的用法(fa)同printf函數的用法(fa)很相似(si),這些函數都可以(yi)在<xdc/runtime/Log.h>找ye)劍 涫導噬鮮牆jiang)printf的有用法(fa)分(fen)成(cheng)許多不(bu)同的類(如錯誤信息、提示信息、警告信息等),LOG模(mo)塊打印的內容可以(yi)在Tools/RTA/PrintfLogs中看到。 Tips︰LOG中定義了許多如下的函數,i比如Log_info1函數後面的數字zhi)硨 jie)的變量(liang)數目 如Log_info1("%d",s1)、Log_info2("%d, %d", s1, s2)

四、在項目中導入TSK任務模(mo)塊 TSK任務模(mo)塊是操作系統中最基本(ben)的模(mo)塊,其實際上xi)從沉碩 xian)程搶佔,每(mei)個任務單獨是一個線(xian)程,各個線(xian)程(任務)具有各自的優先級 (1)新(xin)建任務,首先選擇Use TSK,確定TSK模(mo)擬是否導入
然後創建新(xin)任務New Task
這里我們創建兩(liang)個任務task0、task1,分(fen)別對應其函數func_tsk0、func_tsk1。其優先級都為1
(2)編寫任務函數
a). 這里我們在主函數中BIOS_start()函數,說明(ming)任務開始執(zhi)行(xing)了 b). 任務執(zhi)行(xing)完後調用BIOS_exit(0)退出 c). Task_yield()是個優先級調度函數,其作用就是如果有相同優先級的任務,則調度到同優先級的其它任務執(zhi)行(xing)! d). Log_info1()的作用是打印日志信息 e). while和count循環的目標是讓任務執(zhi)行(xing)較長的時間,而不(bu)是只hui)蔥xing)一次就退出了。 f). 最後別忘了在增(zeng)加相關(guan)頭(tou)文件和函數的聲明(ming)!
(3)編譯調試,運行(xing)查(cha)看結果(這里我們只需要選擇單核運行(xing)就可以(yi)了) 從下面的分(fen)析,我們可以(yi)看到兩(liang)個任務是相互依次運行(xing)的mo) mei)個任務運行(xing)一次後,其優先級就會降低,此時ben)頹謝壞較亂桓鋈撾

五、在項目中導入Swi軟件中斷模(mo)塊 前(qian)面我們已經知(zhi)道了不(bu)同任務有不(bu)同優先級,而軟件中斷具有比任何任務都高的優先級,而其中硬件中斷(HWI)又比軟件中斷(SWI)優先級更高。 (1)添加軟件中斷Swi,這里方(fang)法(fa)同前(qian)面添加TSK的方(fang)法(fa)不(bu)hui)謊yang),似(si)乎不(bu)能用圖形界面方(fang)式去添加(我沒有成(cheng)功=_=) 這里我選擇通過直接(jie)在源代碼中添加相關(guan)代碼︰ a). 首先需要添加一個全局(ju)的Swi句柄︰Swi_Handle swi0; b). 初始化Swi參數︰ Swi_Params swiParams; Swi_Params_init(&swiParams); swiParams.priority = 2; // 軟件中斷的優先級 swiParams.trigger = 2; // 軟件中斷的計數器 c). 創建軟件中斷︰ swi0 = Swi_create(func_swi0, &swiParams, NULL); // swi0是中斷名(ming),func_swi0是中斷函數 d). 編寫中斷函數︰ void func_swi0(void) { static Int count = 0; Log_info1("Swi0 is doing %d ",count); count++; } e). 更改(gai)軟件中斷計數器trigger,要觸發軟件中斷,首先需要讓trigger的計數為0,這里我們可以(yi)在任務函數內增(zeng)加一個trigger自減的函數,任務函數執(zhi)行(xing)兩(liang)次後,將(jiang)會觸發軟件中斷。 void func_tsk0(void) { Int count = 0; while(count<10){ Log_info1("Task0 is doing %d ",count); Swi_dec(swi0); Task_yield(); count++; } BIOS_exit(0); } (2)一些Swi APIs 函數 Swi_inc Swi.trigger自增(zeng)函數,每(mei)次增(zeng)加1 Swi_dec Swi.trigger自減函數,每(mei)次減少1
Swi_or 將(jiang)trigger的值與(yu)模(mo)板求或操作 Swi_and 將(jiang)trigger的值與(yu)模(mo)板求和操作 (3)編譯調試,運行(xing)查(cha)看結果(這里我們只需要選擇單核運行(xing)就可以(yi)了) 從下面的分(fen)析,我們可以(yi)看到兩(liang)個任務的每(mei)次都會使得軟件中斷計數trigger減1(通過Swi_dec函數),直到trigger的值減少到0時,執(zhi)行(xing)軟件中斷,中斷後,trigger恢(hui)復到原來的值,這里的trigger初始值為2,所以(yi)執(zhi)行(xing)兩(liang)次任務後就會觸發一次軟件中斷。

六、在項目中導入信號量(liang)Semaphore模(mo)塊 信號量(liang)是在多線(xian)程環境下使用的一hui)稚枋shi),是可以(yi)用來保證兩(liang)個或多個關(guan)鍵代碼段不(bu)被(bei)並發調用,對于(yu)多個任務來說,使用信號量(liang)可以(yi)防止多個任務同時執(zhi)行(xing)xiao)信號量(liang)可分(fen)互斥信號量(liang)和計數信號量(liang),互斥信號量(liang)只有兩(liang)種狀(zhuang)態(tai)︰1和0,為1時說明(ming)可用,否則不(bu)可用。而計數信號量(liang)通過設置一個計數值,如果計數值大于(yu)0,則任務請求該信號量(liang)時是可用。 這里例子是我們給task0任務中增(zeng)加一個互斥信號量(liang),當信號量(liang)狀(zhuang)態(tai)為1時,task0才pai)薌ji)續執(zhi)行(xing)xiao)M 砑卸俠創 叫藕帕liang)歸1。 (1)添加信號量(liang) a). 首先需要添加一個全局(ju)的信號量(liang)句柄︰Semaphore_Handle sem0; b). 創建信號量(liang)︰sem0 = Semaphore_create(0, NULL, NULL); c). 在增(zeng)加互斥信號量(liang)的任務函數中增(zeng)加一個等待(dai)信號量(liang)為1的函數 Semaphore_pend(sem0, BIOS_WAIT_FOREVER); // BIOS_WAIT_FOREVER表示一hui)鋇卻dai),直到信號量(liang)為1 d). 在軟件中斷函數中增(zeng)加一個解鎖信號量(liang)的函數 Semaphore_post(sem0); e). 最後別忘了添加Semaphore模(mo)塊的頭(tou)文件 #include <ti/sysbios/knl/Semaphore.h> f). 如果.cfg文件中沒有添加信號量(liang)模(mo)塊,記得一定要添加,否則雖然不(bu)會報(bao)錯,但信號量(liang)不(bu)會工(gong)作 (2)編譯調試,運行(xing)查(cha)看結果(這里我們只需要選擇單核運行(xing)就可以(yi)了) 從下面的分(fen)析,我們可以(yi)看到只有當軟件中斷執(zhi)行(xing)後,此時信號量(liang)才解鎖,task0才pai)苤zhi)行(xing),而任務執(zhi)行(xing)兩(liang)次,才pai)艽? 淮穩砑卸稀

七、在項目中導入時鐘(zhong)Clock模(mo)塊 Clocks模(mo)塊主要提供周(zhou)期性執(zhi)行(xing)函數,我們這里新(xin)建一個周(zhou)期性執(zhi)行(xing)函數,其每(mei)四個周(zhou)期執(zhi)行(xing)一次。 (1)添加信號量(liang) a). 首先初始化時鐘(zhong)參數︰ Clock_Params clkParams; Clock_Params_init(&clkParams); clkParams.period = 5; // 函數執(zhi)行(xing)周(zhou)期 clkParams.startFlag = TRUE; // True說明(ming)時鐘(zhong)立(li)即(ji)開始計時 b). 創建時鐘(zhong)︰Clock_create(func_clk, 5, &clkParams, NULL); //創建時鐘(zhong),func_clk是周(zhou)期執(zhi)行(xing)的函數,這里5是開始執(zhi)行(xing)的延時。 c). 編寫周(zhou)期執(zhi)行(xing)的時鐘(zhong)函數 void func_clk(UArg arg0) { UInt32 time; time = Clock_getTicks(); // 這里是定時器的節拍(pai)器 System_printf("System time in clk0Fxn = %lu ", (ULong)time); if(time>20) BIOS_exit(0); } d). 因(yin)為任務的執(zhi)行(xing)時間非常快,所以(yi)需要先把任務內的退出BIOS命令先刪除下,否則當任務完成(cheng)後,時鐘(zhong)函數還沒hui)蔥xing) void func_tsk1(void) { Int count = 0; while(1){ //while(count<10){ Log_info1("Task1 is doing %d ",count); Swi_dec(swi0); Task_yield(); count++; } //BIOS_exit(0); } e). 最後別忘了添加時鐘(zhong)模(mo)塊的頭(tou)文件 #include <ti/sysbios/knl/Clock.h> f). 如果.cfg文件中沒有添加時鐘(zhong)Clock模(mo)塊,記得一定要添加,否則雖然不(bu)會報(bao)錯,但時鐘(zhong)模(mo)塊不(bu)會工(gong)作 (2)編譯調試,運行(xing)查(cha)看結果(這里我們只需要選擇單核運行(xing)就可以(yi)了) 從下面的分(fen)析,我們可以(yi)看到只有當周(zhou)期函數func_clk每(mei)隔(ge)5個周(zhou)期開始執(zhi)行(xing),開始執(zhi)行(xing)時間為5。

項目代碼下載︰ https://github.com/tostq/EasyMulticoreDSP/tree/master/5.helloworldBios

附錄︰關(guan)于(yu)SYS/BIOS的官(guan)方(fang)視(shi)頻學習資料(liao) 一、概覽 http://www.eeworld.com.cn/training/TI_study/2013/0503/257.html 二、定時器和時鐘(zhong)模(mo)塊 http://www.eeworld.com.cn/training/TI_study/2013/0503/258.html 三、硬件中斷和空閑(xian)線(xian)程_1 http://www.eeworld.com.cn/training/TI_study/2013/0503/259.html 四、硬件中斷和空閑(xian)線(xian)程_2 http://www.eeworld.com.cn/training/TI_study/2013/0503/266.html 五、軟件中斷_1 http://www.eeworld.com.cn/training/TI_study/2013/0503/260.html 六、軟件中斷_2 http://www.eeworld.com.cn/training/TI_study/2013/0503/261.html 七、任務 http://www.eeworld.com.cn/training/TI_study/2013/0503/262.html 八、信號量(liang) http://www.eeworld.com.cn/training/TI_study/2013/0503/263.html 九(jiu)、對MSP430的支持_1 http://www.eeworld.com.cn/training/TI_study/2013/0503/264.html 十、對MSP430的支持_2 http://www.eeworld.com.cn/training/TI_study/2013/0503/265.html
Tag標簽︰多核  實例分(fen)析  
  • 万福彩票官网

About IT165 - 廣告服務 - 隱私聲明(ming) - 版權申(shen)明(ming) - 免責條款 - 網站地圖 - 網友投稿 - 聯(lian)系方(fang)式
本(ben)站內容來自于(yu)互聯(lian)網,僅供用于(yu)網絡技術學習,學習中請遵循相關(guan)法(fa)律法(fa)規
万福彩票官网 | 下一页