標籤:
1:概述:
SYS/BIOS 是一個可擴充的即時的作業系統。具有非常快速的回應時間(在中斷和任務切換時達到較短的延遲),回應時間的確定性,強壯的搶佔系統,最佳化的記憶體配置和堆棧管理(盡量少的消耗和片段)。能夠實現系統的模組化並可裁剪。
最大的特點就是:即時。
2:XDCtools:
XDCtools 是SYS/BIOS引用的一種即時的軟體組件技術(RTSC),它包括一些有用的工具,標準的API函數,靜態設定檔和打包(packaging)操作。XDC最主要的亮點在於它標準化了傳遞過程,並簡化了在應用程式中引用目標平台下其他包的過程。
在工程建立的時候需要先建立一個基於RTST的平台,用來分配和管理記憶體和緩衝,它可以自動的產生對應的cmd檔案。建立的過程如下:(基於TI DM6437平台)
3:基於RTSC平台的SYS/BIOS的工程的建立:
4:四種線程
線程是一組在儲存在儲存空間中的代碼,一旦寄存器被正確初始化,CPU就會執行這些代碼。線程可以是任何類型的,SYS/BIOS定義了四種線程類型:
硬體中斷(HWI),軟體中斷(SWI),任務(TASK),空閑(Idle)。
硬體中斷:時間要求最為嚴格,要就即時響應的任務:一般為外設和內部的即時時間和定時器模組(定時器模組是通過硬體中斷實現的,使用硬體的定時器)。
軟體中斷:對時間要求較為低的一種中斷線程。(時鐘模組是基於軟體中斷模組的定時器模組)
任務:CPU執行的主要線程,和軟體中斷的區別,可以被阻塞(可以等待)
空閑:優先順序最低
各線程有隱式和顯示的優先順序:隱式優先順序是由線程的類型決定的,顯示優先順序由軟體的編程者決定,並且允許搶佔的:就是高優先順序的線程能夠搶線程占低優先順序的線程,優先執行,這種高於優先順序的調度管理機制保證了最高優先順序的線程能在第一時間被執行。下面是線程的搶佔的:
5:組件的配置 CCS提供了兩種組件的配置的方法,一種是圖形化的配置方法,使用者可以點擊添加相應的模組:
另外一種方式,是通過手動編輯.cfg檔案,該檔案採用Javascript語言編寫,同樣也可以配置組件。
6:線程的建立和配置
SYS/BIOS線上程建立和配置方面,提供兩種方式,一種是靜態建立,通過XDCtools建立和配置。一種是動態建立,就是在程式中建立,下面就以HWI為常式,分別列出;兩種建立方式:
靜態建立:可以通過圖形化的介面進行配置,也可以通過JavaScript指令碼語言手動編寫.cfg檔案進行配置,下面寫出手動編寫.cfg檔案配置Hwi:
var hwi0Params =new Hwi.Params();
hwi0Params.instance.name= "Uart_Handle";
hwi0Params.eventId= 85;
Program.global.Uart_Handle= Hwi.create(8, "&Int_Uart1ISR", hwi0Params);
動態配置:在程式中進行配置
需要引用的標頭檔
#include<ti/sysybios/hal/Hwi.h>
Hwi_HandleUart_Handle;
Hwi_Paramshwi0Params;
Error_Block eb;
Error_init(&eb);
Hwi_Params_init(&hwi0Params);
hwi0Params.eventId = 85;
Uart_Handle =Hwi_craete(8, "&Int_Uart1ISR", & hwi0Params, &eb) ;
7:任務的調度
SYS/BIOS任務線程有0-31個優先順序(預設0-15,優先順序0被空閑線程使用,任務最低優先順序為1),但是在記憶體允許的情況下可以不限制的建立任務數量。SYS/BIOS有獨立的記憶體堆棧,可以為等待某一事件的發生而被掛起,任務會被其他更高優先順序的線程打斷。數量和狀態可以在程式執行時動態更改,優先順序也可以動態修改。
空閑線程是一種非即時性的線程,並且僅當沒有任何其它線程(HWI/SWI/TASK運行時才會運行),所有空閑線程運行在同一個線程,而且可以被其它線程隨時搶佔,預設使用任務堆棧,如果任務線程被禁用使用系統堆棧,一個接一個運行,每一個空閑線程函數都會從開始執行到結束。所有函數執行完後再從第一個函數執行,周而復始。
8:訊號量
訊號量通常用於協調一些處於競爭關係的任務之間對共用資源的訪問。可以使任務處於掛起狀態,用來等待某一個特定的事件,只有當這個事件發布的時候才能繼續執行任務,這是通過訊號量來實現的,而訊號量操作主要有兩種操作:一個是post,一個是pend,而這兩種操作就是用來改變訊號量的計數值,而在SYS/BIOS中的訊號量有兩種計數的模式,一種是以2進位的模式計數,一種是計數的模式進行計數。訊號量的值為0的時候任務處於掛起狀態,訊號量為1的時候任務恢複繼續執行。下面是兩種計數模式的區別:
操作(假定計數初值為0) |
二進位 |
計數 |
Semaphore_post()sem); |
1 |
1 |
Semaphore_pend()sem); |
0 |
0 |
Semaphore_post()sem); |
1 |
1 |
Semaphore_post()sem); |
1 |
2 |
計數 |
任務狀態 |
Semaphore_pend()sem); |
0 |
掛起 |
Semaphore_post()sem); |
>1 |
恢複 |
訊號量的建立:同樣是兩種方式,靜態建立和動態建立,下面寫出動態建立的常式:
Error_Block eb;
Error_init(&eb);
Semaphore_Params_init(&semParams);
semParams.mode =Semaphore_Mode_BINARY;
semParams.event = evt;
semParams.eventId =Event_Id_00;
sem = Semaphore_create(1,&semParams, &eb);
if (sem == NULL)
{
System_abort("Semaphore create failed");
}
else
{
System_printf("Semaphore create is OK\n");
}
9:郵箱
郵箱SYS/BIOS系統用來在任務間進行buffer傳輸的,在郵箱建立的時候配置傳輸buffer的大小,Mailbox_post()函數執行完成代表,郵箱buffer已經傳輸到緩衝區,當執行Mailbox_pend()時,就從緩衝區中獲得資料。
郵箱的建立:Mailbox_HandleMailbox_create(SizeT bufsize,
UInt numBufs,
Mailbox_Params *params,
Error_Block *eb)
Void Mailbox_delete(Mailbox_Handle*handle);
Mailbox_pend()是用來從郵箱中讀取Bufferde,如果郵箱中沒有Buffer就等待timeout 的時間;
Bool Mailbox_pend(Mailbox_Handle handle,
Ptr buf,
UInt timeout);
Mailbox_post()是用來存入Buffer到郵箱,如果郵箱已滿,則等待timeout時間;
Bool Mailbox_post(Mailbox_Handle handle,
Ptr buf,
UInt timeout);
10:事件
事件同樣提供了一種線程間通訊和同步的方法,它和訊號量有相同的地方,不同的地方是,事件允許你指定多個任務等待的條件。
像訊號量一樣,事件的掛起和發布也是通過Event_pend(),Event_post()來實現的,如果是一個事件的掛起和發布,那麼它和訊號量是一樣的,一個事件模組的建立,可以管理32個事件,通過事件ID來管理,而每一個事件都相當與一個訊號量。
Event_pend()函數的參數有一個"andMask"和一個"orMask"。andMask對應的是需要所有的事件都發布才能解除任務的掛起狀態,orMask是任何一個事件的發布都可以解除任務的掛起狀態。
同樣Event_pend()也有一個等待時間的參數,功能和訊號量是一樣的。
下面是一個建立事件的常式:
Event_HandlemyEvent;
Error_Block eb;
Error_init(&eb);
/* Defaultinstance configuration params */
myEvent =Event_create(NULL, &eb);
if (myEvent ==NULL) {
System_abort("Eventcreate failed");
}
事件的掛起:
UIntEvent_pend(Event_Handle event,
UInt andMask,
UInt orMask,
UInt timeout);
事件的發布:
VoidEvent_post(Event_Handle event,
UInt eventIds);
11:問題記錄
1:訊號量和郵箱可以編入事件
可以將訊號量和郵箱編入一個事件,在訊號量和郵箱建立的時候,寫入事件的ID,當訊號量或者郵箱發布的時候,就等於對應事件ID的事件的發布。
2:任務堆棧的配置:
每個任務可以配置獨立的堆棧的大小,在任務建立的時候配置。堆棧太小,會導致任務建立失敗。
3:I-RTOSKernel RTSC 和 XDCtools的關係
TI-RTOS Kernel就是指TI公司開發的SYS/BIOS即時作業系統。
RTSC是即時的軟體組件平台,基於這個RTSC來建立SYS/BIOS
XDCtools是依賴於RTSC的平台配置的工具
TI-RTOS Kernel是系統,RTSC是平台,XDCtools是工具。
4:cmd更改問題:
.cmd檔案只能通過RTSC平台的配置自動產生,不能自己手動的更改,自己通過編輯修改的.cmd在編譯又會從新變回去。
5:SYS/BIOS下自訂段的方法:
手動編輯.cfg檔案:Program.sectMap["L3_DATA"]= "DDR";
TI 即時作業系統SYS/BIOS使用總結