Basic example showing the CMSIS-RTOS queue API with a producer in an ISR and a consumer in a normal thread
main.cpp
00001 #include "mbed.h" 00002 #include "cmsis_os.h" 00003 00004 osMessageQDef(queue, 5, message_t); 00005 osMessageQId queue; 00006 00007 DigitalOut myled(LED1); 00008 00009 void queue_isr() { 00010 osMessagePut(queue, (uint32_t)2, 0); 00011 00012 myled = !myled; 00013 } 00014 00015 void queue_thread(void const *args) { 00016 while (true) { 00017 osMessagePut(queue, 1, 0); 00018 osDelay(1000); 00019 } 00020 } 00021 00022 osThreadDef(queue_thread, osPriorityNormal, DEFAULT_STACK_SIZE); 00023 00024 int main (void) { 00025 queue = osMessageCreate(osMessageQ(queue), NULL); 00026 00027 osThreadCreate(osThread(queue_thread), NULL); 00028 00029 Ticker ticker; 00030 ticker.attach(queue_isr, 1.0); 00031 00032 while (true) { 00033 osEvent evt = osMessageGet(queue, osWaitForever); 00034 if (evt.status != osEventMessage) { 00035 printf("queue->get() returned %02x status\n\r", evt.status); 00036 } else { 00037 printf("queue->get() returned %d\n\r", evt.value.v); 00038 } 00039 } 00040 }
Generated on Tue Jul 12 2022 11:40:19 by 1.7.2