main.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "mbed.h"
  2. #include "cmsis_os.h"
  3. typedef struct {
  4. float voltage; /* AD result of measured voltage */
  5. float current; /* AD result of measured current */
  6. uint32_t counter; /* A counter value */
  7. } message_t;
  8. osPoolDef(mpool, 16, message_t);
  9. osPoolId mpool;
  10. osMessageQDef(queue, 16, message_t);
  11. osMessageQId queue;
  12. void send_thread (void const *argument) {
  13. uint32_t i = 0;
  14. while (true) {
  15. i++; // fake data update
  16. message_t *message = (message_t*)osPoolAlloc(mpool);
  17. message->voltage = (i * 0.1) * 33;
  18. message->current = (i * 0.1) * 11;
  19. message->counter = i;
  20. osMessagePut(queue, (uint32_t)message, osWaitForever);
  21. osDelay(1000);
  22. }
  23. }
  24. osThreadDef(send_thread, osPriorityNormal, DEFAULT_STACK_SIZE);
  25. int main (void) {
  26. mpool = osPoolCreate(osPool(mpool));
  27. queue = osMessageCreate(osMessageQ(queue), NULL);
  28. osThreadCreate(osThread(send_thread), NULL);
  29. while (true) {
  30. osEvent evt = osMessageGet(queue, osWaitForever);
  31. if (evt.status == osEventMessage) {
  32. message_t *message = (message_t*)evt.value.p;
  33. printf("\nVoltage: %.2f V\n\r" , message->voltage);
  34. printf("Current: %.2f A\n\r" , message->current);
  35. printf("Number of cycles: %u\n\r", message->counter);
  36. osPoolFree(mpool, message);
  37. }
  38. }
  39. }