GIU\ZF

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
ihexx
Date:
Tue Mar 27 15:56:27 2018 +0000
Revision:
13:ab52f46c98ab
Parent:
12:90b5d8eae5ec
Child:
14:8a6c20435523
enqueue and dequeue mail tasks completed.; Improved debug framework; Moved task groups to separate files

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ihexx 12:90b5d8eae5ec 1 #include "core.h"
ihexx 12:90b5d8eae5ec 2
ihexx 12:90b5d8eae5ec 3 namespace mailData{
ihexx 12:90b5d8eae5ec 4 Mail<mail_t, 100> mailBox;
ihexx 12:90b5d8eae5ec 5 }
ihexx 12:90b5d8eae5ec 6
ihexx 12:90b5d8eae5ec 7
ihexx 12:90b5d8eae5ec 8
ihexx 13:ab52f46c98ab 9 namespace enqueueMail{
ihexx 13:ab52f46c98ab 10 //Send speed, accelerometer and brake values to a 100 element MAIL queue
ihexx 12:90b5d8eae5ec 11 Thread thread;
ihexx 13:ab52f46c98ab 12 const float freq = 0.2; //hz
ihexx 12:90b5d8eae5ec 13
ihexx 12:90b5d8eae5ec 14 //I/O
ihexx 12:90b5d8eae5ec 15
ihexx 12:90b5d8eae5ec 16 void runTask(){
ihexx 13:ab52f46c98ab 17 Timer executionTimer,sleepTimer;
ihexx 13:ab52f46c98ab 18 executionTimer.reset();
ihexx 13:ab52f46c98ab 19 sleepTimer.reset();
ihexx 13:ab52f46c98ab 20
ihexx 13:ab52f46c98ab 21 const int const_delay = int((1000.0f/freq)+0.5f);
ihexx 13:ab52f46c98ab 22 int dynamic_delay = const_delay;
ihexx 13:ab52f46c98ab 23
ihexx 12:90b5d8eae5ec 24 while(1){
ihexx 13:ab52f46c98ab 25 sleepTimer.stop();
ihexx 13:ab52f46c98ab 26 executionTimer.start();
ihexx 13:ab52f46c98ab 27 int sleepTime = sleepTimer.read_ms();
ihexx 13:ab52f46c98ab 28 const int drift = ((sleepTime - dynamic_delay) > 0)?
ihexx 13:ab52f46c98ab 29 (sleepTime - dynamic_delay) : 0;
ihexx 13:ab52f46c98ab 30 //Core Loop:
ihexx 12:90b5d8eae5ec 31 using namespace mailData;
ihexx 12:90b5d8eae5ec 32 mail_t *mail = mailBox.alloc();
ihexx 12:90b5d8eae5ec 33
ihexx 12:90b5d8eae5ec 34 runTimeParams::liveAccess.lock();
ihexx 12:90b5d8eae5ec 35
ihexx 12:90b5d8eae5ec 36 mail->speed = runTimeParams::avgSpeed;
ihexx 12:90b5d8eae5ec 37 mail->accel = runTimeParams::accelForce;
ihexx 12:90b5d8eae5ec 38 mail->brake = runTimeParams::brakeForce;
ihexx 12:90b5d8eae5ec 39
ihexx 12:90b5d8eae5ec 40 runTimeParams::liveAccess.unlock();
ihexx 12:90b5d8eae5ec 41
ihexx 12:90b5d8eae5ec 42 mailBox.put(mail);
ihexx 13:ab52f46c98ab 43 //End of Core loop
ihexx 12:90b5d8eae5ec 44
ihexx 13:ab52f46c98ab 45 executionTimer.stop();
ihexx 13:ab52f46c98ab 46 int exec_time = executionTimer.read_ms();
ihexx 13:ab52f46c98ab 47
ihexx 13:ab52f46c98ab 48 #if DEBUG_MODE
ihexx 13:ab52f46c98ab 49 runTimeParams::liveAccess.lock();
ihexx 13:ab52f46c98ab 50 //runTimeParams::debugLog += "Enqueue Mail," + to_string(exec_time) + ","
ihexx 13:ab52f46c98ab 51 // + to_string(sleepTime) + ","
ihexx 13:ab52f46c98ab 52 // + to_string(drift) + "\n";
ihexx 13:ab52f46c98ab 53 runTimeParams::liveAccess.unlock();
ihexx 13:ab52f46c98ab 54 #endif
ihexx 13:ab52f46c98ab 55
ihexx 13:ab52f46c98ab 56 executionTimer.reset();
ihexx 13:ab52f46c98ab 57 sleepTimer.reset();
ihexx 13:ab52f46c98ab 58 sleepTimer.start();
ihexx 13:ab52f46c98ab 59 dynamic_delay = const_delay - (exec_time + drift);
ihexx 13:ab52f46c98ab 60 Thread::wait(dynamic_delay);
ihexx 12:90b5d8eae5ec 61 }
ihexx 12:90b5d8eae5ec 62
ihexx 12:90b5d8eae5ec 63 }
ihexx 12:90b5d8eae5ec 64 }
ihexx 12:90b5d8eae5ec 65
ihexx 13:ab52f46c98ab 66 namespace dequeueMail{
ihexx 13:ab52f46c98ab 67 //Dump contents of feature_7 MAIL queue to the serial connection to the PC
ihexx 12:90b5d8eae5ec 68 Thread thread;
ihexx 12:90b5d8eae5ec 69 const float freq = 0.05;
ihexx 13:ab52f46c98ab 70
ihexx 12:90b5d8eae5ec 71 Serial pc(USBTX, USBRX); // tx, rx
ihexx 13:ab52f46c98ab 72
ihexx 12:90b5d8eae5ec 73
ihexx 12:90b5d8eae5ec 74 void runTask(){
ihexx 13:ab52f46c98ab 75 Timer executionTimer,sleepTimer;
ihexx 13:ab52f46c98ab 76 executionTimer.reset();
ihexx 13:ab52f46c98ab 77 sleepTimer.reset();
ihexx 13:ab52f46c98ab 78
ihexx 13:ab52f46c98ab 79 const int const_delay = int((1000.0f/freq)+0.5f);
ihexx 13:ab52f46c98ab 80 int dynamic_delay = const_delay;
ihexx 13:ab52f46c98ab 81
ihexx 13:ab52f46c98ab 82 pc.printf("speed,acceleration,brake\n\r");
ihexx 12:90b5d8eae5ec 83
ihexx 13:ab52f46c98ab 84 while(true){
ihexx 13:ab52f46c98ab 85
ihexx 13:ab52f46c98ab 86 sleepTimer.stop();
ihexx 13:ab52f46c98ab 87 executionTimer.start();
ihexx 13:ab52f46c98ab 88 int sleepTime = sleepTimer.read_ms();
ihexx 13:ab52f46c98ab 89 const int drift = ((sleepTime - dynamic_delay) > 0)?
ihexx 13:ab52f46c98ab 90 (sleepTime - dynamic_delay) : 0;
ihexx 13:ab52f46c98ab 91
ihexx 13:ab52f46c98ab 92 /* Mail */
ihexx 13:ab52f46c98ab 93 using namespace mailData;
ihexx 13:ab52f46c98ab 94 osEvent evt = mailBox.get(1);
ihexx 13:ab52f46c98ab 95 while (evt.status == osEventMail){
ihexx 13:ab52f46c98ab 96 mail_t * mail = (mail_t*)evt.value.p;
ihexx 13:ab52f46c98ab 97 pc.printf("%.2f,%.2f,%.2f\n\r",mail->speed,mail->accel,mail->brake);
ihexx 13:ab52f46c98ab 98 mailBox.free(mail);
ihexx 13:ab52f46c98ab 99 evt = mailBox.get(1);
ihexx 13:ab52f46c98ab 100 }
ihexx 12:90b5d8eae5ec 101
ihexx 13:ab52f46c98ab 102 executionTimer.stop();
ihexx 13:ab52f46c98ab 103 int exec_time = executionTimer.read_ms();
ihexx 12:90b5d8eae5ec 104
ihexx 13:ab52f46c98ab 105 #if DEBUG_MODE
ihexx 13:ab52f46c98ab 106 runTimeParams::liveAccess.lock();
ihexx 13:ab52f46c98ab 107 runTimeParams::debugLog += "Dequeue Mail," + to_string(exec_time) + ","
ihexx 13:ab52f46c98ab 108 + to_string(sleepTime) + ","
ihexx 13:ab52f46c98ab 109 + to_string(drift) + "\n\r";
ihexx 13:ab52f46c98ab 110 pc.printf(runTimeParams::debugLog.c_str());
ihexx 13:ab52f46c98ab 111 runTimeParams::debugLog = "";
ihexx 13:ab52f46c98ab 112 runTimeParams::liveAccess.unlock();
ihexx 13:ab52f46c98ab 113 #endif
ihexx 13:ab52f46c98ab 114
ihexx 13:ab52f46c98ab 115 executionTimer.reset();
ihexx 13:ab52f46c98ab 116 sleepTimer.reset();
ihexx 13:ab52f46c98ab 117 sleepTimer.start();
ihexx 13:ab52f46c98ab 118 dynamic_delay = const_delay - (exec_time + drift);
ihexx 13:ab52f46c98ab 119 Thread::wait(dynamic_delay);
ihexx 13:ab52f46c98ab 120
ihexx 13:ab52f46c98ab 121 }
ihexx 12:90b5d8eae5ec 122 }
ihexx 12:90b5d8eae5ec 123 }
ihexx 12:90b5d8eae5ec 124
ihexx 12:90b5d8eae5ec 125