【多個任務例項】
rtx核可同時執行乙個任務的多個副本,這就稱作乙個任務的多個例項。
os_tid 分配任務程序id號
/* 多個例項 - **演示 */
#include os_tid tsk_1, tsk2_1, tsk2_2, tsk2_3;
int cnt;
void task2 (void) __task
void task1 (void) __task
void main (void)
【外部引用】
訊號量和信箱這兩個rtx核物件,是作為物件的無型別指標被rtx核心引用的,並同時被引入到其他rtx核模組中。對於訊號量和任務控制代碼來說,這不存在問題。
可當引用由巨集os_mbx_declare宣告的信箱時就會產生問題。為解決此問題,定義了os_mbx型別,在外部程式中使用os_mbx物件型別引用信箱。
/* 宣告mailbox1的c模組 */
#include os_mbx_declare (mailbox1, 20); // 宣告信箱
void task1 (void) __task
/* 引用 mailbox1 的c模組 */
#include extern os_mbx mailbox1; // 引用外部信箱
void task2 (void) __task
【信箱的使用】
rtx核訊息物件僅是指向儲存相關資訊記憶體塊的指標,除了訊息的大小和容量以外沒有其他的限制。
rtx核控制代碼僅是指向訊息的指標。
可以利用"指標本身傳遞乙個簡單資訊",例如在序列接受中斷中傳送乙個字元,這裡需要將字元賦值給指標,例如:
os_mbx_send (send_mbx, (void *)c, 0xffff);
>> 傳送固定大小的訊息
為了傳送固定大小的訊息,傳送訊息程序必須從動態記憶體池中分配乙個記憶體塊、將訊息儲存在這個記憶體塊中,然後將它的指標傳遞給信箱。接收訊息程序收到這個指標,取出記憶體塊中的訊息,然後釋放這個記憶體塊。
>> 固定記憶體塊記憶體分配函式
rtx核有乙個功能強大的固定記憶體塊記憶體分配函式。它們是執行緒安全、可重入,且能被rtx核無限制的使用。建議使用固定記憶體塊分配函式傳送固定大小的訊息。需要為這個訊息物件對記憶體池作適當地初始化。
32位值:初始化4個位元組的塊大小。
_init_box (mpool, sizeof(mpool), 4); // 4 bytes
任意大小的訊息:初始化訊息物件大小。
_init_box (mpool, sizeof(mpool), sizeof(struct message));
/* **演示 - 將固定大小訊息傳送給信箱,訊息大小8 bytes */
#include os_mbx_declare (msgbox, 16); /* 宣告rtx信箱 */
u32 mpool[16*(2*sizeof(u32))/4 + 3]; /* 分配可以儲存16個資訊的記憶體 */
void rec_task (void) __task;
void send_task (void) __task
void rec_task (void) __task
void main (void)
固定塊記憶體分配函式是可重入的。
變長記憶體分配函式是不可重入的。
所以,在malloc和free函式執行期間必須禁止系統定時器中斷。tsk_lock函式可禁止定時器中斷,而tsk_unlock函式使能定時器中斷。
// malloc是動態記憶體分配,即變長記憶體;陣列為定長記憶體。
Python celery 任務例項
coding utf 8 celery 任務示例 本地啟動celery命令 python manage.py celery worker settings settings 週期性任務還需要啟動celery排程命令 python manage.py celerybeat settings setti...
oracle定時任務例項
1 建立測試表與序列號 sql view plain copy print?create table job test id integer,add time date sql view plain copy print?create sequence seq tm id minvalue 1 ma...
C語句模擬多工例項
include include 任務型別定義 typedef struct mytask co struct variable v mytask 執行緒常量定義 define thread over 1 執行緒結束 define thread notover 0 執行緒未結束 功能 任務執行緒 引數...