GIU\ZF
Dependencies: MCP23017 WattBob_TextLCD mbed-rtos mbed
Fork of rtos_basic by
tasks/sendMail.cpp@14:8a6c20435523, 2018-03-27 (annotated)
- Committer:
- ihexx
- Date:
- Tue Mar 27 16:11:18 2018 +0000
- Revision:
- 14:8a6c20435523
- Parent:
- 13:ab52f46c98ab
- Child:
- 15:524de2b2ef8e
fixed debug framework
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 | 13:ab52f46c98ab | 7 | namespace enqueueMail{ |
ihexx | 13:ab52f46c98ab | 8 | //Send speed, accelerometer and brake values to a 100 element MAIL queue |
ihexx | 12:90b5d8eae5ec | 9 | Thread thread; |
ihexx | 13:ab52f46c98ab | 10 | const float freq = 0.2; //hz |
ihexx | 12:90b5d8eae5ec | 11 | |
ihexx | 12:90b5d8eae5ec | 12 | //I/O |
ihexx | 12:90b5d8eae5ec | 13 | void runTask(){ |
ihexx | 14:8a6c20435523 | 14 | |
ihexx | 14:8a6c20435523 | 15 | |
ihexx | 13:ab52f46c98ab | 16 | Timer executionTimer,sleepTimer; |
ihexx | 13:ab52f46c98ab | 17 | executionTimer.reset(); |
ihexx | 13:ab52f46c98ab | 18 | sleepTimer.reset(); |
ihexx | 13:ab52f46c98ab | 19 | |
ihexx | 13:ab52f46c98ab | 20 | const int const_delay = int((1000.0f/freq)+0.5f); |
ihexx | 13:ab52f46c98ab | 21 | int dynamic_delay = const_delay; |
ihexx | 14:8a6c20435523 | 22 | int tick = 0; |
ihexx | 13:ab52f46c98ab | 23 | |
ihexx | 12:90b5d8eae5ec | 24 | while(1){ |
ihexx | 14:8a6c20435523 | 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 | 14:8a6c20435523 | 45 | tick++; |
ihexx | 13:ab52f46c98ab | 46 | executionTimer.stop(); |
ihexx | 13:ab52f46c98ab | 47 | int exec_time = executionTimer.read_ms(); |
ihexx | 13:ab52f46c98ab | 48 | |
ihexx | 13:ab52f46c98ab | 49 | #if DEBUG_MODE |
ihexx | 14:8a6c20435523 | 50 | const int debug_log_interval = int(freq/dequeueMail::freq); |
ihexx | 14:8a6c20435523 | 51 | if (!(tick%debug_log_interval)){ |
ihexx | 14:8a6c20435523 | 52 | runTimeParams::liveAccess.lock(); |
ihexx | 14:8a6c20435523 | 53 | runTimeParams::debugLog += "Enqueue Mail," + to_string(exec_time) + "," |
ihexx | 14:8a6c20435523 | 54 | + to_string(sleepTime) + "," |
ihexx | 14:8a6c20435523 | 55 | + to_string(drift) + "\n\r"; |
ihexx | 14:8a6c20435523 | 56 | runTimeParams::liveAccess.unlock(); |
ihexx | 14:8a6c20435523 | 57 | tick = 0; |
ihexx | 14:8a6c20435523 | 58 | } |
ihexx | 13:ab52f46c98ab | 59 | #endif |
ihexx | 13:ab52f46c98ab | 60 | |
ihexx | 13:ab52f46c98ab | 61 | executionTimer.reset(); |
ihexx | 13:ab52f46c98ab | 62 | sleepTimer.reset(); |
ihexx | 13:ab52f46c98ab | 63 | sleepTimer.start(); |
ihexx | 14:8a6c20435523 | 64 | |
ihexx | 13:ab52f46c98ab | 65 | dynamic_delay = const_delay - (exec_time + drift); |
ihexx | 13:ab52f46c98ab | 66 | Thread::wait(dynamic_delay); |
ihexx | 12:90b5d8eae5ec | 67 | } |
ihexx | 12:90b5d8eae5ec | 68 | |
ihexx | 12:90b5d8eae5ec | 69 | } |
ihexx | 12:90b5d8eae5ec | 70 | } |
ihexx | 12:90b5d8eae5ec | 71 | |
ihexx | 13:ab52f46c98ab | 72 | namespace dequeueMail{ |
ihexx | 13:ab52f46c98ab | 73 | //Dump contents of feature_7 MAIL queue to the serial connection to the PC |
ihexx | 12:90b5d8eae5ec | 74 | Thread thread; |
ihexx | 12:90b5d8eae5ec | 75 | const float freq = 0.05; |
ihexx | 13:ab52f46c98ab | 76 | |
ihexx | 12:90b5d8eae5ec | 77 | Serial pc(USBTX, USBRX); // tx, rx |
ihexx | 13:ab52f46c98ab | 78 | |
ihexx | 12:90b5d8eae5ec | 79 | |
ihexx | 12:90b5d8eae5ec | 80 | void runTask(){ |
ihexx | 13:ab52f46c98ab | 81 | Timer executionTimer,sleepTimer; |
ihexx | 13:ab52f46c98ab | 82 | executionTimer.reset(); |
ihexx | 13:ab52f46c98ab | 83 | sleepTimer.reset(); |
ihexx | 13:ab52f46c98ab | 84 | |
ihexx | 13:ab52f46c98ab | 85 | const int const_delay = int((1000.0f/freq)+0.5f); |
ihexx | 13:ab52f46c98ab | 86 | int dynamic_delay = const_delay; |
ihexx | 13:ab52f46c98ab | 87 | |
ihexx | 13:ab52f46c98ab | 88 | pc.printf("speed,acceleration,brake\n\r"); |
ihexx | 12:90b5d8eae5ec | 89 | |
ihexx | 13:ab52f46c98ab | 90 | while(true){ |
ihexx | 13:ab52f46c98ab | 91 | |
ihexx | 13:ab52f46c98ab | 92 | sleepTimer.stop(); |
ihexx | 13:ab52f46c98ab | 93 | executionTimer.start(); |
ihexx | 13:ab52f46c98ab | 94 | int sleepTime = sleepTimer.read_ms(); |
ihexx | 13:ab52f46c98ab | 95 | const int drift = ((sleepTime - dynamic_delay) > 0)? |
ihexx | 13:ab52f46c98ab | 96 | (sleepTime - dynamic_delay) : 0; |
ihexx | 13:ab52f46c98ab | 97 | |
ihexx | 13:ab52f46c98ab | 98 | /* Mail */ |
ihexx | 13:ab52f46c98ab | 99 | using namespace mailData; |
ihexx | 13:ab52f46c98ab | 100 | osEvent evt = mailBox.get(1); |
ihexx | 13:ab52f46c98ab | 101 | while (evt.status == osEventMail){ |
ihexx | 13:ab52f46c98ab | 102 | mail_t * mail = (mail_t*)evt.value.p; |
ihexx | 13:ab52f46c98ab | 103 | pc.printf("%.2f,%.2f,%.2f\n\r",mail->speed,mail->accel,mail->brake); |
ihexx | 13:ab52f46c98ab | 104 | mailBox.free(mail); |
ihexx | 13:ab52f46c98ab | 105 | evt = mailBox.get(1); |
ihexx | 13:ab52f46c98ab | 106 | } |
ihexx | 12:90b5d8eae5ec | 107 | |
ihexx | 13:ab52f46c98ab | 108 | executionTimer.stop(); |
ihexx | 13:ab52f46c98ab | 109 | int exec_time = executionTimer.read_ms(); |
ihexx | 12:90b5d8eae5ec | 110 | |
ihexx | 13:ab52f46c98ab | 111 | #if DEBUG_MODE |
ihexx | 13:ab52f46c98ab | 112 | runTimeParams::liveAccess.lock(); |
ihexx | 13:ab52f46c98ab | 113 | runTimeParams::debugLog += "Dequeue Mail," + to_string(exec_time) + "," |
ihexx | 13:ab52f46c98ab | 114 | + to_string(sleepTime) + "," |
ihexx | 13:ab52f46c98ab | 115 | + to_string(drift) + "\n\r"; |
ihexx | 13:ab52f46c98ab | 116 | pc.printf(runTimeParams::debugLog.c_str()); |
ihexx | 13:ab52f46c98ab | 117 | runTimeParams::debugLog = ""; |
ihexx | 13:ab52f46c98ab | 118 | runTimeParams::liveAccess.unlock(); |
ihexx | 13:ab52f46c98ab | 119 | #endif |
ihexx | 13:ab52f46c98ab | 120 | |
ihexx | 13:ab52f46c98ab | 121 | executionTimer.reset(); |
ihexx | 13:ab52f46c98ab | 122 | sleepTimer.reset(); |
ihexx | 13:ab52f46c98ab | 123 | sleepTimer.start(); |
ihexx | 13:ab52f46c98ab | 124 | dynamic_delay = const_delay - (exec_time + drift); |
ihexx | 13:ab52f46c98ab | 125 | Thread::wait(dynamic_delay); |
ihexx | 13:ab52f46c98ab | 126 | |
ihexx | 13:ab52f46c98ab | 127 | } |
ihexx | 12:90b5d8eae5ec | 128 | } |
ihexx | 12:90b5d8eae5ec | 129 | } |
ihexx | 12:90b5d8eae5ec | 130 | |
ihexx | 12:90b5d8eae5ec | 131 |