調度方法:時間片輪轉。
參考文檔:Keil參考手冊和rtl.h(任務的每個.c文件都應包含此頭文件)頭文件這兩個文檔
1)事件管理:讓一個進程等待一個事件,這個事件可以由其它進程和中斷觸發(只能在中斷中使用)。事件不用預先創建(但應先set后wait),wflags與event_flags都是u16類型,每一位代表一個事件,所以每個任務可有16個事件(1~16)。設定單一事件event_flags1<<(n-1),因此可以進行位的與或運算。
固定消息長度發送
RTX核有一個功能強大的固定內存塊內存分配函數。它們是線程安全、可重入,且能被RTX核無限制的使用。建議使用固定內存塊分配函數發送固定大小的消息。需要為這個消息對象對內存池作適當地初始化。
U32 mpool[郵箱的條數*(2*sizeof(U32))/4 + 3]; /* Reserve a memory for 16 messages */
_init_box (mpool, sizeof(mpool), sizeof(struct message));
發送方:U32 *mptr;
mptr = _alloc_box (mpool); /* Allocate a memory for the message */
mptr[0] = 0x3215fedc; /* Set the message content. */
mptr[1] = 0x00000015;
os_mbx_send (MsgBox, mptr, 0xffff); /* Send a message to a 'MsgBox' */
接收方: os_mbx_wait (MsgBox, &rptr, 0xffff); /* Wait for the message to arrive. */
rec_val[0] = rptr[0]; /* Store the content to 'rec_val' */
rec_val[1] = rptr[1];
_free_box (mpool, rptr); /* Release the memory block */
變長數據長度信息發送:必須使用可變大小內存塊的內存分配函數。 RVCT 庫在Stdlib.h文件中提供了這個函數(不可重入)
在malloc()和free()函數執行期間必須禁止系統定時器中斷。tsk_lock()函數可禁止定時器中斷,而tsk_unlock()函數使能定時器中斷。
(5)延時: os_dly_wait(),延時的單位:系統節拍。
任務的創建:__tast關鍵字來修飾函數,一個任務被創建多次即可以有多個實例。
os_tsk_create (xxx_task, 0);
os_tsk_delete_self ();
id1 = os_tsk_self(); /* Obtain own system task identification number */
2個系統任務 os_clock_demon
和 os_idle_demon() /*空閑任務的鈎子函數*/
#define OS_PRIVCNT 0 /*RTX內核采用 OS_PRIVCNT 使存儲空間的利用最優化*/
#define OS_STKCHECK 1 /*堆棧檢查:速度慢但可以指出堆棧有問題的任務ID*/
堆棧大小(用U32):#define OS_STKSIZE 100 /*所以為400字節*/