Lab 8 part 4

Dependencies:   mbed mbed-rtos

Committer:
wssingle
Date:
Sun May 03 19:15:05 2020 +0000
Revision:
13:510fb9ae8592
Parent:
12:4e3f46e615d9
Lab 8 part 4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wssingle 13:510fb9ae8592 1 #include "mbed.h"
wssingle 13:510fb9ae8592 2 #include "rtos.h"
wssingle 13:510fb9ae8592 3
wssingle 13:510fb9ae8592 4 typedef struct {
wssingle 13:510fb9ae8592 5 float voltage; /* AD result of measured voltage */
wssingle 13:510fb9ae8592 6 float current; /* AD result of measured current */
wssingle 13:510fb9ae8592 7 uint32_t counter; /* A counter value */
wssingle 13:510fb9ae8592 8 } message_t;
wssingle 13:510fb9ae8592 9
wssingle 13:510fb9ae8592 10 MemoryPool<message_t, 16> mpool;
wssingle 13:510fb9ae8592 11 Queue<message_t, 16> queue;
wssingle 13:510fb9ae8592 12
wssingle 13:510fb9ae8592 13 /* Send Thread */
wssingle 13:510fb9ae8592 14 void send_thread (void) {
wssingle 13:510fb9ae8592 15 uint32_t i = 0;
wssingle 13:510fb9ae8592 16 while (true) {
wssingle 13:510fb9ae8592 17 i++; // fake data update
wssingle 13:510fb9ae8592 18 message_t *message = mpool.alloc();
wssingle 13:510fb9ae8592 19 message->voltage = (i * 0.1) * 33;
wssingle 13:510fb9ae8592 20 message->current = (i * 0.1) * 11;
wssingle 13:510fb9ae8592 21 message->counter = i;
wssingle 13:510fb9ae8592 22 queue.put(message);
wssingle 13:510fb9ae8592 23 Thread::wait(1000);
wssingle 13:510fb9ae8592 24 }
wssingle 13:510fb9ae8592 25 }
wssingle 13:510fb9ae8592 26
wssingle 13:510fb9ae8592 27 int main (void) {
wssingle 13:510fb9ae8592 28 Thread thread;
wssingle 13:510fb9ae8592 29 thread.start(callback(send_thread));
wssingle 13:510fb9ae8592 30
wssingle 13:510fb9ae8592 31 while (true) {
wssingle 13:510fb9ae8592 32 osEvent evt = queue.get();
wssingle 13:510fb9ae8592 33 if (evt.status == osEventMessage) {
wssingle 13:510fb9ae8592 34 message_t *message = (message_t*)evt.value.p;
wssingle 13:510fb9ae8592 35 printf("\nVoltage: %.2f V\n\r" , message->voltage);
wssingle 13:510fb9ae8592 36 printf("Current: %.2f A\n\r" , message->current);
wssingle 13:510fb9ae8592 37 printf("Number of cycles: %u\n\r", message->counter);
wssingle 13:510fb9ae8592 38
wssingle 13:510fb9ae8592 39 mpool.free(message);
wssingle 13:510fb9ae8592 40 }
wssingle 13:510fb9ae8592 41 }
wssingle 13:510fb9ae8592 42 }