VxWorks下訊息 訊號量的使用和任務建立

2021-03-31 22:32:54 字數 1827 閱讀 6610

//test.c

#include

#include

#include "test.h"

#include

#include

#include

#define max_message_count  100

#define max_message_length 400

int offset;

unsigned char sharedbuf[2*1024];

/*任務1   訊息的傳送*/

void loop1(msg_q_id id)/*the function for task 1, like a thread under windows or unix*/

;for( ; ;)

else}}

/*任務2   訊息的接收*/

void loop2(msg_q_id id)/*the function for test 2, like a thread under wondows or unix*/

;for( ; ;)

else}}

/*任務3          獲取訊號量,訊號量減1操作*/

void loop3(sem_id semid)}}

/*任務4         釋放訊號量,訊號量加1操作*/

void loop4(sem_id semid)}}

void initialsharedbuf()

}int main()

;char ch;

int i;

/*to build a message queue.*/

initialsharedbuf();

msgid = msgqcreate(max_message_count, max_message_length, msg_q_fifo);

semid = sembcreate(sem_q_fifo, sem_full);

/*下面啟動4個任務*/

/*start a task(thread)*/

taskarray[0] = taskspawn("loop1 ", 80, 0, 64*1024, (funcptr)loop1, (msg_q_id)msgid, 0, 0, 0, 0, 0, 0, 0, 0, 0);

/*start another task(thread)*/

taskarray[1] = taskspawn("loop2 ", 80, 0, 64*1024, (funcptr)loop2, (msg_q_id)msgid, 0, 0, 0, 0, 0, 0, 0, 0, 0);

/*start another task(thread)*/

taskarray[2] = taskspawn("loop3 ", 80, 0, 64*1024, (funcptr)loop3, (sem_id)semid, 0, 0, 0, 0, 0, 0, 0, 0, 0);

/*start another task(thread)*/

taskarray[3] = taskspawn("loop4 ", 80, 0, 64*1024, (funcptr)loop4, (sem_id)semid, 0, 0, 0, 0, 0, 0, 0, 0, 0);

/*主任務迴圈,當接收到'e'結束所有任務*/

for ( ; ;)

break;}}

printf("the main function is ended./n");

return 0;

}上面演示了訊息、訊號量和任務的建立,在turnado下編譯除錯過,沒有問題。

zhangggdlt

2005.04.28

VxWorks學習筆記 訊號量

是實現任務互斥 同步操作的主要機制。vxworks 提供的訊號量經過了高度優化,在所有任務間通訊機制中,速度最快。二 訊號量的分類 binary semaphores 二進位制 完成互斥 同步操作的最佳方式 速度最快,最常用。mutual exclusion semaphores 互斥 一種特殊的二...

linux下訊號量 semaphore 的使用例程

semaphore是系統中的東西,所以不同系統中包含標頭檔案不同,在linux中包含 說明 int sem wait sem t sem 等待訊號量 0,訊號量為0表示無可用資源來使用,就要一直等下去,當訊號量 0時,表示有空餘資源可用,那麼就占用乙個資源給當前執行緒用,並將訊號量減一.int se...

ucos訊號量訊息佇列

全域性變數 static int msg int os q data msg 訊息佇列主任務 void start task void p arg led任務0 void led0 task void p arg if err os err none ostimedlyhmsm 0,0,3,0,os...