WORKS

Dependencies:   MAX44000 PWM_Tone_Library nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "cmsis_os.h"
00003 
00004 #if defined(MBED_RTOS_SINGLE_THREAD)
00005   #error [NOT_SUPPORTED] test not supported
00006 #endif
00007 
00008 typedef struct {
00009     float    voltage;   /* AD result of measured voltage */
00010     float    current;   /* AD result of measured current */
00011     uint32_t counter;   /* A counter value               */
00012 } message_t;
00013 
00014 osPoolDef(mpool, 16, message_t);
00015 osPoolId  mpool;
00016 
00017 osMessageQDef(queue, 16, message_t);
00018 osMessageQId  queue;
00019 
00020 void send_thread (void const *argument) {
00021     uint32_t i = 0;
00022     while (true) {
00023         i++; // fake data update
00024         message_t *message = (message_t*)osPoolAlloc(mpool);
00025         message->voltage = (i * 0.1) * 33;
00026         message->current = (i * 0.1) * 11;
00027         message->counter = i;
00028         osMessagePut(queue, (uint32_t)message, osWaitForever);
00029         osDelay(1000);
00030     }
00031 }
00032 
00033 osThreadDef(send_thread, osPriorityNormal, DEFAULT_STACK_SIZE);
00034 
00035 int main (void) {
00036     mpool = osPoolCreate(osPool(mpool));
00037     queue = osMessageCreate(osMessageQ(queue), NULL);
00038 
00039     osThreadCreate(osThread(send_thread), NULL);
00040 
00041     while (true) {
00042         osEvent evt = osMessageGet(queue, osWaitForever);
00043         if (evt.status == osEventMessage) {
00044             message_t *message = (message_t*)evt.value.p;
00045             printf("\nVoltage: %.2f V\n\r"   , message->voltage);
00046             printf("Current: %.2f A\n\r"     , message->current);
00047             printf("Number of cycles: %u\n\r", message->counter);
00048 
00049             osPoolFree(mpool, message);
00050         }
00051     }
00052 }