GIU\ZF
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
Fork of rtos_basic by
tasks/sendMail.cpp@13:ab52f46c98ab, 2018-03-27 (annotated)
- 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?
User | Revision | Line number | New 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 |