38 #ifndef OS_MSGQUEUE_H__
39 #define OS_MSGQUEUE_H__
58 typedef uint8_t MsgQ_t;
71 #define OS_MSG_Q_POST(task, msg, delay, period, async ) do {\
72 static uint8_t os_posted;\
75 queue = os_msgQ_find( task );\
76 sem = os_msgQ_sem_get( queue );\
79 os_posted = os_msg_post( (Msg_t*)&msg, queue, delay, period );\
80 if ( os_posted == MSG_QUEUE_FULL ){\
82 OS_SIGNAL_SEM_NO_SCHEDULE( sem );\
83 event_wait(os_msgQ_event_get( queue ));\
84 if ( os_sem_larger_than_zero( sem ) )\
85 os_sem_decrement( sem );\
87 os_task_wait_sem_set( running_tid, sem );\
88 os_task_internal_state_set( running_tid, __LINE__+50000 );\
89 running_tid = NO_TID;\
91 case (__LINE__+50000):\
96 os_posted = MSG_QUEUE_POSTED;\
99 } while ( os_posted == MSG_QUEUE_FULL );\
104 #define OS_MSG_Q_RECEIVE(task, pMsg, async) do {\
105 static MsgQ_t queue;\
107 static uint8_t os_received;\
108 queue = os_msgQ_find( task );\
109 sem = os_msgQ_sem_get( queue );\
112 os_received = os_msg_receive( (Msg_t*)pMsg, queue );\
113 if ( os_received == MSG_QUEUE_EMPTY ){\
115 OS_SIGNAL_SEM_NO_SCHEDULE( sem );\
116 event_wait(os_msgQ_event_get( queue ));\
117 if ( os_sem_larger_than_zero( sem ) )\
118 os_sem_decrement( sem );\
120 os_task_wait_sem_set( running_tid, sem );\
121 os_task_internal_state_set( running_tid, __LINE__+50000 );\
122 running_tid = NO_TID;\
124 case (__LINE__+50000):\
129 ((Msg_t*)pMsg)->signal = NO_MSG_ID;\
130 os_received = MSG_QUEUE_RECEIVED;\
133 } while ( os_received == MSG_QUEUE_EMPTY );\
139 #define OS_MSG_Q_EVENT_WAIT( task ) do {\
140 OS_SIGNAL_SEM_NO_SCHEDULE(os_msgQ_sem_get(task));\
141 event_wait(os_msgQ_event_get(task));\
146 MsgQ_t os_msgQ_create(
Msg_t *buffer, uint8_t size, uint16_t msgSize, taskproctype taskproc );
147 MsgQ_t os_msgQ_find( taskproctype taskproc );
148 Sem_t os_msgQ_sem_get( MsgQ_t queue );
149 Evt_t os_msgQ_event_get( MsgQ_t queue );
150 void os_msgQ_tick( MsgQ_t queue );
152 uint8_t os_msg_post(
Msg_t *msg, MsgQ_t queue, uint16_t delay, uint16_t period );
153 uint8_t os_msg_receive(
Msg_t *msg, MsgQ_t queue );
Definition: os_msgqueue.h:50