//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...