RTX 多個任務例項 外部引用 信箱使用

2021-07-30 23:47:45 字數 1848 閱讀 9864

【多個任務例項】

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 執行緒未結束 功能 任務執行緒 引數...