Some test about how work with Queue. The target is send repeated messages via CAN-BUS for simulate a basic car communication for testing secondary ECUs

Revision:
0:d3a56afeb685
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Jun 08 12:36:35 2019 +0000
@@ -0,0 +1,67 @@
+#include "mbed.h"
+#define MAX 3//number of dummy messages
+
+struct RepMsg { //Repeating message     
+    CANMessage canmsg;
+    int repeatTime; //ms
+};
+RepMsg *tempRepMsg[MAX];
+
+Thread thread;
+EventQueue e_queue;
+Queue<RepMsg, MAX * 5> queue;
+DigitalOut myled1(LED1);
+DigitalOut myled2(LED2);
+Serial pc(USBTX, USBRX);
+CAN can2(PB_8, PB_9);
+CAN can1(PB_12, PB_13);
+
+void dumy_msg (void) { //make some dummy messages
+    for(int i = 0; i < MAX; i++){
+        tempRepMsg[i] = new RepMsg;
+        char id_temp = 0x00 + i;
+        pc.printf("Msg ID 0x%02x  data: ",id_temp);
+        tempRepMsg[i]->canmsg.id = id_temp;
+        tempRepMsg[i]->canmsg.len = 8;
+        tempRepMsg[i]->repeatTime = (i + 1) * 250; //ms
+ 
+        for(int y = 0; y < 8; y++){
+            char temp = (0x08 + i) * (y + 1) - y;
+            tempRepMsg[i]->canmsg.data[y] = temp;
+            pc.printf(" 0x%02x",temp);
+        }
+        pc.printf("\n");
+    }
+}
+
+void put_into_ (RepMsg *msg) {
+    queue.put(msg);
+}
+
+int main (void) {
+    pc.baud(115200); 
+    pc.printf("Starts example\n");
+    dumy_msg();
+    wait(1);
+    thread.start(callback(&e_queue, &EventQueue::dispatch_forever));
+    for(int i = 0; i < MAX; i++){ //it will make queue.call_every for all dummy messages
+        e_queue.call_every(tempRepMsg[i]->repeatTime,put_into_, tempRepMsg[i]);
+    }
+    CANMessage msg;
+    while(1) {
+        if (queue.empty() == false) {
+            osEvent evt = queue.get();
+            if (evt.status == osEventMessage) {
+                RepMsg *message = (RepMsg*)evt.value.p;
+                CANMessage w_msg = message->canmsg;
+                can1.write(w_msg);
+                myled1 = !myled1;
+            }
+        }
+        
+        if(can2.read(msg)) {
+            pc.printf("ID: %9x Len: %d Data: %2x %2x %2x %2x %2x %2x %2x %2x\n", msg.id, msg.len, msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4], msg.data[5], msg.data[6], msg.data[07]);
+            myled2 = !myled2;
+        } 
+    }
+}
\ No newline at end of file