Basic example showing the CMSIS-RTOS mail API

Dependencies:   mbed mbed-rtos

mbed 2 and mbed OS 5

This is an mbed 2 example. mbed OS 5 has integrated the mbed library with mbed-rtos. For an mbed-os example, please see:

Import programrtos_mail

mail example

Committer:
emilmont
Date:
Fri Nov 23 11:00:11 2012 +0000
Revision:
2:e9f14106068c
Parent:
1:4a9c72442136
update libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:4a9c72442136 1 #include "mbed.h"
emilmont 1:4a9c72442136 2 #include "cmsis_os.h"
emilmont 1:4a9c72442136 3
emilmont 1:4a9c72442136 4 typedef struct {
emilmont 1:4a9c72442136 5 float voltage; /* AD result of measured voltage */
emilmont 1:4a9c72442136 6 float current; /* AD result of measured current */
emilmont 1:4a9c72442136 7 uint32_t counter; /* A counter value */
emilmont 1:4a9c72442136 8 } mail_t;
emilmont 1:4a9c72442136 9
emilmont 1:4a9c72442136 10 osMailQDef(mail_box, 16, mail_t);
emilmont 1:4a9c72442136 11 osMailQId mail_box;
emilmont 1:4a9c72442136 12
emilmont 2:e9f14106068c 13 void send_thread (void const *args) {
emilmont 1:4a9c72442136 14 uint32_t i = 0;
emilmont 1:4a9c72442136 15 while (true) {
emilmont 1:4a9c72442136 16 i++; // fake data update
emilmont 1:4a9c72442136 17 mail_t *mail = (mail_t*)osMailAlloc(mail_box, osWaitForever);
emilmont 1:4a9c72442136 18 mail->voltage = (i * 0.1) * 33;
emilmont 1:4a9c72442136 19 mail->current = (i * 0.1) * 11;
emilmont 1:4a9c72442136 20 mail->counter = i;
emilmont 1:4a9c72442136 21 osMailPut(mail_box, mail);
emilmont 1:4a9c72442136 22 osDelay(1000);
emilmont 1:4a9c72442136 23 }
emilmont 1:4a9c72442136 24 }
emilmont 1:4a9c72442136 25
emilmont 1:4a9c72442136 26 osThreadDef(send_thread, osPriorityNormal, DEFAULT_STACK_SIZE);
emilmont 1:4a9c72442136 27
emilmont 1:4a9c72442136 28 int main (void) {
emilmont 1:4a9c72442136 29 mail_box = osMailCreate(osMailQ(mail_box), NULL);
emilmont 1:4a9c72442136 30 osThreadCreate(osThread(send_thread), NULL);
emilmont 1:4a9c72442136 31
emilmont 1:4a9c72442136 32 while (true) {
emilmont 1:4a9c72442136 33 osEvent evt = osMailGet(mail_box, osWaitForever);
emilmont 1:4a9c72442136 34 if (evt.status == osEventMail) {
emilmont 1:4a9c72442136 35 mail_t *mail = (mail_t*)evt.value.p;
emilmont 1:4a9c72442136 36 printf("\nVoltage: %.2f V\n\r" , mail->voltage);
emilmont 1:4a9c72442136 37 printf("Current: %.2f A\n\r" , mail->current);
emilmont 1:4a9c72442136 38 printf("Number of cycles: %u\n\r", mail->counter);
emilmont 1:4a9c72442136 39
emilmont 1:4a9c72442136 40 osMailFree(mail_box, mail);
emilmont 1:4a9c72442136 41 }
emilmont 1:4a9c72442136 42 }
emilmont 1:4a9c72442136 43 }