| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include "cmsis_os.h" // CMSIS RTOS header file
- /*----------------------------------------------------------------------------
- * Mail Queue creation & usage
- *---------------------------------------------------------------------------*/
-
- void Thread_MailQueue1 (void const *argument); // thread function 1
- void Thread_MailQueue2 (void const *argument); // thread function 2
- osThreadId tid_Thread_MailQueue1; // thread id 1
- osThreadId tid_Thread_MailQueue2; // thread id 2
- osThreadDef (Thread_MailQueue1, osPriorityNormal, 1, 0); // thread object 1
- osThreadDef (Thread_MailQueue2, osPriorityNormal, 1, 0); // thread object 2
- #define MAILQUEUE_OBJECTS 16 // number of Message Queue Objects
- typedef struct { // object data type
- uint8_t Buf[32];
- uint8_t Idx;
- } MAILQUEUE_OBJ_t;
- osMailQId qid_MailQueue; // mail queue id
- osMailQDef (MailQueue, MAILQUEUE_OBJECTS, MAILQUEUE_OBJ_t); // mail queue object
- int Init_MailQueue (void) {
- qid_MailQueue = osMailCreate (osMailQ(MailQueue), NULL); // create mail queue
- if (!qid_MailQueue) {
- ; // Mail Queue object not created, handle failure
- }
-
- tid_Thread_MailQueue1 = osThreadCreate (osThread(Thread_MailQueue1), NULL);
- if (!tid_Thread_MailQueue1) return(-1);
- tid_Thread_MailQueue2 = osThreadCreate (osThread(Thread_MailQueue2), NULL);
- if (!tid_Thread_MailQueue2) return(-1);
-
- return(0);
- }
- void Thread_MailQueue1 (void const *argument) {
- MAILQUEUE_OBJ_t *pMail = 0;
- while (1) {
- ; // Insert thread code here...
- pMail = osMailAlloc (qid_MailQueue, osWaitForever); // Allocate memory
- if (pMail) {
- pMail->Buf[0] = 0xff; // Set the mail content
- pMail->Idx = 0;
- osMailPut (qid_MailQueue, pMail); // Send Mail
- }
- osThreadYield (); // suspend thread
- }
- }
- void Thread_MailQueue2 (void const *argument) {
- MAILQUEUE_OBJ_t *pMail = 0;
- osEvent evt;
- while (1) {
- ; // Insert thread code here...
- evt = osMailGet (qid_MailQueue, osWaitForever); // wait for mail
- if (evt.status == osEventMail) {
- pMail = evt.value.p;
- if (pMail) {
- ; // process data
- osMailFree (qid_MailQueue, pMail); // free memory allocated for mail
- }
- }
- }
- }
|