Pol Rodoreda Valeri
/
RTOS_colas
jk
Fork of rtos_basic by
main.cpp@7:4fa2695e0d63, 2016-11-03 (annotated)
- Committer:
- polrodoreda
- Date:
- Thu Nov 03 15:40:17 2016 +0000
- Revision:
- 7:4fa2695e0d63
- Parent:
- 3:c92e21f305d8
ppp
Who changed what in which revision?
User | Revision | Line number | New 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 |