首页 > 代码库 > CMSIS Example - osMailQ osMailPut osMailGet

CMSIS Example - osMailQ osMailPut osMailGet

 1 struct Thread0_Mail 2 { 3   int a; 4   int b; 5 }; 6  7 osMailQId thread0_mail; 8 osMailQDef( thread0_mail, 10, struct Thread0_Mail ); 9 10 struct Thread1_Mail11 {12   int x;13   int y;14 };15 16 osMailQId thread1_mail;17 osMailQDef( thread1_mail, 10, struct Thread1_Mail );18 19 20 void Thread0( void * arg );21 void Thread1( void * arg );22 23 osThreadDef( Thread0, Thread0, osPriorityNormal, 512 );24 osThreadDef( Thread1, Thread1, osPriorityAboveNormal, 512 );25 26 27 void Thread0( void * arg )28 {29   osEvent event;30   struct Thread0_Mail * Thread0_mail;31 32   while ( 1 )33   {34     event = osMailGet( thread0_mail, osWaitForever );35 36     if ( event.status == osEventMail )37     {38       Thread0_mail = osMailAlloc( thread0_mail, osWaitForever );39 40       if ( Thread0_mail )41       {42         Thread0_mail->a = 100;43         Thread0_mail->b = 1000;44         osMailPut( thread1_mail, Thread0_mail );45         osMailFree( thread0_mail, Thread0_mail );46       }47     }48 49     osDelay( 10 );50   }51 }52 53 54 void Thread1( void * arg )55 {56   osEvent event;57   struct Thread1_Mail * Thread1_mail;58 59   while ( 1 )60   {61     Thread1_mail = osMailAlloc( thread1_mail, osWaitForever );62 63     if ( Thread1_mail )64     {65       Thread1_mail->x = 100;66       Thread1_mail->y = 1000;67       osMailPut( thread0_mail, Thread1_mail );68       event = osMailGet( thread1_mail, osWaitForever );69 70       if ( event.status == osEventMail )71       {72         osMailFree( thread1_mail, Thread1_mail );73       }74     }75 76     osDelay( 10 );77   }78 }79 80 int main( void )81 {82   osKernelInitialize();83   osThreadCreate( osThread( Thread0 ), ( void * )100 );84   osThreadCreate( osThread( Thread1 ), ( void * )200 );85   thread0_mail = osMailCreate( osMailQ( thread0_mail ), 0 );86   thread1_mail = osMailCreate( osMailQ( thread1_mail ), 0 );87   osKernelStart();88   return 0;89 }