mbed official
/
cmsis_rtos_queue
Basic example showing the CMSIS-RTOS queue and memory pool API
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "cmsis_os.h" 00003 00004 typedef struct { 00005 float voltage; /* AD result of measured voltage */ 00006 float current; /* AD result of measured current */ 00007 uint32_t counter; /* A counter value */ 00008 } message_t; 00009 00010 osPoolDef(mpool, 16, message_t); 00011 osPoolId mpool; 00012 00013 osMessageQDef(queue, 16, message_t); 00014 osMessageQId queue; 00015 00016 void send_thread (void const *args) { 00017 uint32_t i = 0; 00018 while (true) { 00019 i++; // fake data update 00020 message_t *message = (message_t*)osPoolAlloc(mpool); 00021 message->voltage = (i * 0.1) * 33; 00022 message->current = (i * 0.1) * 11; 00023 message->counter = i; 00024 osMessagePut(queue, (uint32_t)message, osWaitForever); 00025 osDelay(1000); 00026 } 00027 } 00028 00029 osThreadDef(send_thread, osPriorityNormal, DEFAULT_STACK_SIZE); 00030 00031 int main (void) { 00032 mpool = osPoolCreate(osPool(mpool)); 00033 queue = osMessageCreate(osMessageQ(queue), NULL); 00034 00035 osThreadCreate(osThread(send_thread), NULL); 00036 00037 while (true) { 00038 osEvent evt = osMessageGet(queue, osWaitForever); 00039 if (evt.status == osEventMessage) { 00040 message_t *message = (message_t*)evt.value.p; 00041 printf("\nVoltage: %.2f V\n\r" , message->voltage); 00042 printf("Current: %.2f A\n\r" , message->current); 00043 printf("Number of cycles: %u\n\r", message->counter); 00044 00045 osPoolFree(mpool, message); 00046 } 00047 } 00048 }
Generated on Tue Jul 12 2022 11:40:15 by 1.7.2