jk

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
polrodoreda
Date:
Thu Nov 03 15:40:17 2016 +0000
Revision:
7:4fa2695e0d63
Parent:
3:c92e21f305d8
ppp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
emilmont 1:491820ee784d 2 #include "rtos.h"
polrodoreda 7:4fa2695e0d63 3
polrodoreda 7:4fa2695e0d63 4 typedef struct {
polrodoreda 7:4fa2695e0d63 5 char *mensaje;
polrodoreda 7:4fa2695e0d63 6 int msg_number;
polrodoreda 7:4fa2695e0d63 7 } msg_type;
emilmont 1:491820ee784d 8
polrodoreda 7:4fa2695e0d63 9 MemoryPool<msg_type, 16> mpool;
polrodoreda 7:4fa2695e0d63 10 Queue<msg_type, 16> queue;
emilmont 1:491820ee784d 11
polrodoreda 7:4fa2695e0d63 12 /* Send Thread */
polrodoreda 7:4fa2695e0d63 13 void producer_thread (void const *args) {
polrodoreda 7:4fa2695e0d63 14 uint32_t i = 0;
polrodoreda 7:4fa2695e0d63 15 int status;
emilmont 1:491820ee784d 16 while (true) {
polrodoreda 7:4fa2695e0d63 17 i++; // fake data update
polrodoreda 7:4fa2695e0d63 18 msg_type *message = mpool.alloc();
polrodoreda 7:4fa2695e0d63 19 message->mensaje="Hola";
polrodoreda 7:4fa2695e0d63 20 message->msg_number=i;
polrodoreda 7:4fa2695e0d63 21 status = queue.put(message,1);
polrodoreda 7:4fa2695e0d63 22 printf("%d",status);
polrodoreda 7:4fa2695e0d63 23 printf("Message into queue: %d,%s\n\r", message->msg_number, message->mensaje);
polrodoreda 7:4fa2695e0d63 24 Thread::wait(500);
emilmont 1:491820ee784d 25 }
emilmont 1:491820ee784d 26 }
emilmont 1:491820ee784d 27
polrodoreda 7:4fa2695e0d63 28 int main (void) {
polrodoreda 7:4fa2695e0d63 29 Thread thread(producer_thread);
polrodoreda 7:4fa2695e0d63 30 int msg_count=0;
emilmont 1:491820ee784d 31 while (true) {
polrodoreda 7:4fa2695e0d63 32 osEvent evt = queue.get();
polrodoreda 7:4fa2695e0d63 33 if (evt.status == osEventMessage) {
polrodoreda 7:4fa2695e0d63 34 msg_count++;
polrodoreda 7:4fa2695e0d63 35 msg_type *message = (msg_type*)evt.value.p;
polrodoreda 7:4fa2695e0d63 36 printf("Message out of queue : %d,%s\n\r", message->msg_number, message->mensaje);
polrodoreda 7:4fa2695e0d63 37 mpool.free(message);
polrodoreda 7:4fa2695e0d63 38 Thread::wait(1100);
polrodoreda 7:4fa2695e0d63 39 }
emilmont 1:491820ee784d 40 }
emilmont 1:491820ee784d 41 }
polrodoreda 7:4fa2695e0d63 42