Basic example showing the CMSIS-RTOS queue API with a producer in an ISR and a consumer in a normal thread

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_isr

isr example

Committer:
emilmont
Date:
Fri Nov 23 11:03:57 2012 +0000
Revision:
2:39180377e223
Parent:
1:aa8ea13b6a07
update libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:aa8ea13b6a07 1 #include "mbed.h"
emilmont 1:aa8ea13b6a07 2 #include "cmsis_os.h"
emilmont 1:aa8ea13b6a07 3
emilmont 1:aa8ea13b6a07 4 osMessageQDef(queue, 5, message_t);
emilmont 1:aa8ea13b6a07 5 osMessageQId queue;
emilmont 1:aa8ea13b6a07 6
emilmont 1:aa8ea13b6a07 7 DigitalOut myled(LED1);
emilmont 1:aa8ea13b6a07 8
emilmont 1:aa8ea13b6a07 9 void queue_isr() {
emilmont 1:aa8ea13b6a07 10 osMessagePut(queue, (uint32_t)2, 0);
emilmont 1:aa8ea13b6a07 11
emilmont 1:aa8ea13b6a07 12 myled = !myled;
emilmont 1:aa8ea13b6a07 13 }
emilmont 1:aa8ea13b6a07 14
emilmont 2:39180377e223 15 void queue_thread(void const *args) {
emilmont 1:aa8ea13b6a07 16 while (true) {
emilmont 1:aa8ea13b6a07 17 osMessagePut(queue, 1, 0);
emilmont 1:aa8ea13b6a07 18 osDelay(1000);
emilmont 1:aa8ea13b6a07 19 }
emilmont 1:aa8ea13b6a07 20 }
emilmont 1:aa8ea13b6a07 21
emilmont 1:aa8ea13b6a07 22 osThreadDef(queue_thread, osPriorityNormal, DEFAULT_STACK_SIZE);
emilmont 1:aa8ea13b6a07 23
emilmont 1:aa8ea13b6a07 24 int main (void) {
emilmont 1:aa8ea13b6a07 25 queue = osMessageCreate(osMessageQ(queue), NULL);
emilmont 1:aa8ea13b6a07 26
emilmont 1:aa8ea13b6a07 27 osThreadCreate(osThread(queue_thread), NULL);
emilmont 1:aa8ea13b6a07 28
emilmont 1:aa8ea13b6a07 29 Ticker ticker;
emilmont 1:aa8ea13b6a07 30 ticker.attach(queue_isr, 1.0);
emilmont 1:aa8ea13b6a07 31
emilmont 1:aa8ea13b6a07 32 while (true) {
emilmont 1:aa8ea13b6a07 33 osEvent evt = osMessageGet(queue, osWaitForever);
emilmont 1:aa8ea13b6a07 34 if (evt.status != osEventMessage) {
emilmont 1:aa8ea13b6a07 35 printf("queue->get() returned %02x status\n\r", evt.status);
emilmont 1:aa8ea13b6a07 36 } else {
emilmont 1:aa8ea13b6a07 37 printf("queue->get() returned %d\n\r", evt.value.v);
emilmont 1:aa8ea13b6a07 38 }
emilmont 1:aa8ea13b6a07 39 }
emilmont 1:aa8ea13b6a07 40 }