This is sample program for Nucleo L152RE (and F401RE & F411RE) mbed-rtos. You need to modify mbed-src and mbed-rtos before compile it.
Dependencies: mbed-rtos mbed-src SetRTC
Fork of GR-PEACH_test_on_rtos_works_well by
Please refer below link.
/users/kenjiArai/notebook/necleo-l152re-rtos-sample-also-for-f401re--f411re-/
main.cpp@10:1c0f58b9c048, 2015-05-16 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat May 16 00:43:39 2015 +0000
- Revision:
- 10:1c0f58b9c048
- Parent:
- 9:de986e74bd93
- Child:
- 13:d0d1da1fae4c
Sample program for mbed-src usage sample. You need to modify both mbed-rtos and mbed-src before compile it.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 1:a399a743d109 | 1 | /* |
kenjiArai | 1:a399a743d109 | 2 | * mbed Application program for the mbed |
kenjiArai | 10:1c0f58b9c048 | 3 | * RTOS Test program for Nucleo L152RE |
kenjiArai | 1:a399a743d109 | 4 | * |
kenjiArai | 8:4006b111c0d4 | 5 | * Copyright (c) 2014,'15 Kenji Arai / JH1PJL |
kenjiArai | 1:a399a743d109 | 6 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 1:a399a743d109 | 7 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 1:a399a743d109 | 8 | * Created: November 29th, 2014 |
kenjiArai | 10:1c0f58b9c048 | 9 | * Revised: May 16th, 2015 |
kenjiArai | 1:a399a743d109 | 10 | * |
kenjiArai | 1:a399a743d109 | 11 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 1:a399a743d109 | 12 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 1:a399a743d109 | 13 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 1:a399a743d109 | 14 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 1:a399a743d109 | 15 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 1:a399a743d109 | 16 | */ |
kenjiArai | 1:a399a743d109 | 17 | |
kenjiArai | 4:76b3113c79ff | 18 | // Include --------------------------------------------------------------------------------------- |
kenjiArai | 10:1c0f58b9c048 | 19 | #include "mbed.h" |
kenjiArai | 10:1c0f58b9c048 | 20 | #include "rtos.h" |
kenjiArai | 10:1c0f58b9c048 | 21 | #include "SetRTC.h" // Own lib. / RTC control |
kenjiArai | 2:3747397a1618 | 22 | |
kenjiArai | 4:76b3113c79ff | 23 | // Definition ------------------------------------------------------------------------------------ |
kenjiArai | 10:1c0f58b9c048 | 24 | #define DO_DEBUG 1 |
kenjiArai | 10:1c0f58b9c048 | 25 | |
kenjiArai | 10:1c0f58b9c048 | 26 | #if DO_DEBUG |
kenjiArai | 10:1c0f58b9c048 | 27 | #define DEBUG_LINE printf("line:%d\r\n", __LINE__); |
kenjiArai | 10:1c0f58b9c048 | 28 | #else |
kenjiArai | 10:1c0f58b9c048 | 29 | #define DEBUG_LINE {;} |
kenjiArai | 10:1c0f58b9c048 | 30 | #endif |
kenjiArai | 4:76b3113c79ff | 31 | |
kenjiArai | 4:76b3113c79ff | 32 | // Com |
kenjiArai | 10:1c0f58b9c048 | 33 | #if 1 |
kenjiArai | 10:1c0f58b9c048 | 34 | #define BAUD(x) pc.baud(x) |
kenjiArai | 10:1c0f58b9c048 | 35 | #define GETC(x) pc.getc(x) |
kenjiArai | 10:1c0f58b9c048 | 36 | #define PUTC(x) pc.putc(x) |
kenjiArai | 10:1c0f58b9c048 | 37 | #define PUTS(x) pc.puts(x) |
kenjiArai | 10:1c0f58b9c048 | 38 | #define PRINTF(...) pc.printf(__VA_ARGS__) |
kenjiArai | 10:1c0f58b9c048 | 39 | #define READABLE(x) pc.readable(x) |
kenjiArai | 4:76b3113c79ff | 40 | #else |
kenjiArai | 10:1c0f58b9c048 | 41 | #define BAUD(x) {;} |
kenjiArai | 10:1c0f58b9c048 | 42 | #define GETC(x) {;} |
kenjiArai | 10:1c0f58b9c048 | 43 | #define PUTC(x) {;} |
kenjiArai | 10:1c0f58b9c048 | 44 | #define PUTS(x) {;} |
kenjiArai | 10:1c0f58b9c048 | 45 | #define PRINTF(...) {;} |
kenjiArai | 10:1c0f58b9c048 | 46 | #define READABLE(x) {;} |
kenjiArai | 0:a17b3cf2f466 | 47 | #endif |
kenjiArai | 0:a17b3cf2f466 | 48 | |
kenjiArai | 10:1c0f58b9c048 | 49 | #if 0 |
kenjiArai | 4:76b3113c79ff | 50 | #define TIMEBASE 12000 |
kenjiArai | 4:76b3113c79ff | 51 | #define FIXED_STEPS 100 |
kenjiArai | 4:76b3113c79ff | 52 | |
kenjiArai | 4:76b3113c79ff | 53 | #define PI 3.1415926536 |
kenjiArai | 4:76b3113c79ff | 54 | #define RAD_TO_DEG 57.29578 |
kenjiArai | 4:76b3113c79ff | 55 | #define TIME_BASE_MS ( TIME_BASE_S * 1000) |
kenjiArai | 4:76b3113c79ff | 56 | #define RATE 0.1 |
kenjiArai | 10:1c0f58b9c048 | 57 | #endif |
kenjiArai | 10:1c0f58b9c048 | 58 | |
kenjiArai | 10:1c0f58b9c048 | 59 | #define TIME_BASE_S 0.02 |
kenjiArai | 10:1c0f58b9c048 | 60 | |
kenjiArai | 10:1c0f58b9c048 | 61 | #define step_one (0.0625f) |
kenjiArai | 4:76b3113c79ff | 62 | |
kenjiArai | 4:76b3113c79ff | 63 | // Object ---------------------------------------------------------------------------------------- |
kenjiArai | 10:1c0f58b9c048 | 64 | // LED's !! DON'T USE LED1(PA_5) because PA_5 uses for DAC |
kenjiArai | 10:1c0f58b9c048 | 65 | DigitalOut LEDs[3] = { |
kenjiArai | 10:1c0f58b9c048 | 66 | DigitalOut(PC_10), DigitalOut(PC_11), DigitalOut(PC_12) |
kenjiArai | 4:76b3113c79ff | 67 | }; |
kenjiArai | 5:dccdaaa1e57b | 68 | // OS check |
kenjiArai | 10:1c0f58b9c048 | 69 | DigitalOut task0(PC_2); |
kenjiArai | 10:1c0f58b9c048 | 70 | DigitalOut task1(PC_3); |
kenjiArai | 10:1c0f58b9c048 | 71 | // Swiches |
kenjiArai | 10:1c0f58b9c048 | 72 | DigitalIn usr_sw(PC_13); |
kenjiArai | 10:1c0f58b9c048 | 73 | // DAC to ADC |
kenjiArai | 10:1c0f58b9c048 | 74 | #if defined(TARGET_NUCLEO_L152RE) |
kenjiArai | 10:1c0f58b9c048 | 75 | AnalogOut dac0(PA_4); |
kenjiArai | 10:1c0f58b9c048 | 76 | AnalogOut dac1(PA_5); |
kenjiArai | 5:dccdaaa1e57b | 77 | #endif |
kenjiArai | 10:1c0f58b9c048 | 78 | AnalogIn adc1(A1); |
kenjiArai | 10:1c0f58b9c048 | 79 | AnalogIn adc3(A3); |
kenjiArai | 10:1c0f58b9c048 | 80 | // I2C |
kenjiArai | 10:1c0f58b9c048 | 81 | I2C i2c1(D14,D15); // SDA, SCL |
kenjiArai | 4:76b3113c79ff | 82 | // com |
kenjiArai | 10:1c0f58b9c048 | 83 | Serial pc(USBTX, USBRX); // Communication with Host |
kenjiArai | 4:76b3113c79ff | 84 | // Mutex |
kenjiArai | 10:1c0f58b9c048 | 85 | Mutex uart_mutex; |
kenjiArai | 4:76b3113c79ff | 86 | Mutex i2c_mutex; |
kenjiArai | 0:a17b3cf2f466 | 87 | |
kenjiArai | 4:76b3113c79ff | 88 | // RAM ------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 89 | Queue<uint32_t, 2> queue0; |
kenjiArai | 10:1c0f58b9c048 | 90 | |
kenjiArai | 10:1c0f58b9c048 | 91 | float fg[3]; |
kenjiArai | 10:1c0f58b9c048 | 92 | float fa[3]; |
kenjiArai | 10:1c0f58b9c048 | 93 | |
kenjiArai | 10:1c0f58b9c048 | 94 | float analog[2]; |
kenjiArai | 4:76b3113c79ff | 95 | |
kenjiArai | 4:76b3113c79ff | 96 | /* Mail */ |
kenjiArai | 4:76b3113c79ff | 97 | typedef struct { |
kenjiArai | 4:76b3113c79ff | 98 | float voltage; /* AD result of measured voltage */ |
kenjiArai | 4:76b3113c79ff | 99 | float current; /* AD result of measured current */ |
kenjiArai | 4:76b3113c79ff | 100 | uint32_t counter; /* A counter value */ |
kenjiArai | 4:76b3113c79ff | 101 | } mail_t; |
kenjiArai | 4:76b3113c79ff | 102 | |
kenjiArai | 4:76b3113c79ff | 103 | Mail<mail_t, 16> mail_box; |
kenjiArai | 4:76b3113c79ff | 104 | |
kenjiArai | 8:4006b111c0d4 | 105 | uint8_t show_flag0; |
kenjiArai | 8:4006b111c0d4 | 106 | uint8_t show_flag1; |
kenjiArai | 5:dccdaaa1e57b | 107 | uint32_t count; |
kenjiArai | 5:dccdaaa1e57b | 108 | |
kenjiArai | 4:76b3113c79ff | 109 | // ROM / Constant data --------------------------------------------------------------------------- |
kenjiArai | 10:1c0f58b9c048 | 110 | const float out_data[16] = {step_one * 15, step_one * 14, step_one * 13, step_one * 12, step_one * 11, |
kenjiArai | 10:1c0f58b9c048 | 111 | step_one * 10, step_one * 9, step_one * 8, step_one * 7, step_one * 6, |
kenjiArai | 10:1c0f58b9c048 | 112 | step_one * 5, step_one * 4, step_one * 3, step_one * 2, step_one * 1, 0}; |
kenjiArai | 10:1c0f58b9c048 | 113 | |
kenjiArai | 4:76b3113c79ff | 114 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 115 | |
kenjiArai | 4:76b3113c79ff | 116 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 117 | extern int mon( void); |
kenjiArai | 4:76b3113c79ff | 118 | |
kenjiArai | 4:76b3113c79ff | 119 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 120 | // Control Program |
kenjiArai | 4:76b3113c79ff | 121 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 122 | void send_thread (void const *args) { |
kenjiArai | 4:76b3113c79ff | 123 | uint32_t i = 0; |
kenjiArai | 4:76b3113c79ff | 124 | while (true) { |
kenjiArai | 4:76b3113c79ff | 125 | i++; // fake data update |
kenjiArai | 4:76b3113c79ff | 126 | mail_t *mail = mail_box.alloc(); |
kenjiArai | 4:76b3113c79ff | 127 | mail->voltage = (i * 0.1) * 33; |
kenjiArai | 4:76b3113c79ff | 128 | mail->current = (i * 0.1) * 11; |
kenjiArai | 4:76b3113c79ff | 129 | mail->counter = i; |
kenjiArai | 4:76b3113c79ff | 130 | mail_box.put(mail); |
kenjiArai | 4:76b3113c79ff | 131 | Thread::wait(1000); |
kenjiArai | 4:76b3113c79ff | 132 | } |
kenjiArai | 4:76b3113c79ff | 133 | } |
kenjiArai | 4:76b3113c79ff | 134 | |
kenjiArai | 4:76b3113c79ff | 135 | void blink(void const *n) { |
kenjiArai | 4:76b3113c79ff | 136 | LEDs[(int)n] = !LEDs[(int)n]; |
kenjiArai | 4:76b3113c79ff | 137 | } |
kenjiArai | 4:76b3113c79ff | 138 | |
kenjiArai | 4:76b3113c79ff | 139 | // Read switch status |
kenjiArai | 10:1c0f58b9c048 | 140 | int read_sw(){ |
kenjiArai | 10:1c0f58b9c048 | 141 | if (usr_sw.read()){ |
kenjiArai | 10:1c0f58b9c048 | 142 | return 0; |
kenjiArai | 10:1c0f58b9c048 | 143 | } else { |
kenjiArai | 10:1c0f58b9c048 | 144 | return 1; |
kenjiArai | 10:1c0f58b9c048 | 145 | } |
kenjiArai | 4:76b3113c79ff | 146 | } |
kenjiArai | 4:76b3113c79ff | 147 | |
kenjiArai | 4:76b3113c79ff | 148 | // Monitor program |
kenjiArai | 4:76b3113c79ff | 149 | void monitor(void const *args){ |
kenjiArai | 10:1c0f58b9c048 | 150 | Thread::wait(100); |
kenjiArai | 4:76b3113c79ff | 151 | while (true){ |
kenjiArai | 10:1c0f58b9c048 | 152 | DEBUG_LINE |
kenjiArai | 4:76b3113c79ff | 153 | mon(); |
kenjiArai | 0:a17b3cf2f466 | 154 | } |
kenjiArai | 0:a17b3cf2f466 | 155 | } |
kenjiArai | 4:76b3113c79ff | 156 | |
kenjiArai | 8:4006b111c0d4 | 157 | void watch_time (void const *args) { |
kenjiArai | 8:4006b111c0d4 | 158 | time_t seconds; |
kenjiArai | 8:4006b111c0d4 | 159 | char buf[64]; |
kenjiArai | 8:4006b111c0d4 | 160 | |
kenjiArai | 8:4006b111c0d4 | 161 | while (true) { |
kenjiArai | 8:4006b111c0d4 | 162 | seconds = time(NULL); |
kenjiArai | 8:4006b111c0d4 | 163 | strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds)); |
kenjiArai | 8:4006b111c0d4 | 164 | if (show_flag1){ |
kenjiArai | 10:1c0f58b9c048 | 165 | // printf("[TASK1] %s, No:%5d, Ticker:%10u\r\n",buf, i++, us_ticker_read()); |
kenjiArai | 8:4006b111c0d4 | 166 | } |
kenjiArai | 8:4006b111c0d4 | 167 | Thread::wait(1000); |
kenjiArai | 8:4006b111c0d4 | 168 | } |
kenjiArai | 8:4006b111c0d4 | 169 | } |
kenjiArai | 8:4006b111c0d4 | 170 | |
kenjiArai | 4:76b3113c79ff | 171 | // Interrupt routine |
kenjiArai | 4:76b3113c79ff | 172 | void queue_isr0() { |
kenjiArai | 4:76b3113c79ff | 173 | queue0.put((uint32_t*)1); |
kenjiArai | 4:76b3113c79ff | 174 | } |
kenjiArai | 4:76b3113c79ff | 175 | |
kenjiArai | 4:76b3113c79ff | 176 | // Update sensor data |
kenjiArai | 10:1c0f58b9c048 | 177 | void update_sensor(void const *args){ // No need to connect I2C line |
kenjiArai | 10:1c0f58b9c048 | 178 | char cmd[2]; |
kenjiArai | 10:1c0f58b9c048 | 179 | uint8_t i = 0; |
kenjiArai | 10:1c0f58b9c048 | 180 | |
kenjiArai | 10:1c0f58b9c048 | 181 | DEBUG_LINE |
kenjiArai | 10:1c0f58b9c048 | 182 | osDelay(1000); |
kenjiArai | 10:1c0f58b9c048 | 183 | i2c1.frequency(50000); |
kenjiArai | 4:76b3113c79ff | 184 | while (true) { |
kenjiArai | 4:76b3113c79ff | 185 | osEvent evt = queue0.get(); |
kenjiArai | 4:76b3113c79ff | 186 | // ---->lock |
kenjiArai | 4:76b3113c79ff | 187 | i2c_mutex.lock(); |
kenjiArai | 10:1c0f58b9c048 | 188 | cmd[0] = 0x55; |
kenjiArai | 10:1c0f58b9c048 | 189 | cmd[1] = 0xaa; |
kenjiArai | 10:1c0f58b9c048 | 190 | i2c1.write(0xa4, cmd, 2); |
kenjiArai | 10:1c0f58b9c048 | 191 | if (i2c1.read(0xa4, cmd, 2)){ |
kenjiArai | 10:1c0f58b9c048 | 192 | fa[0] = fa[1] = fa[2] = 1.11f + (++i / 100); |
kenjiArai | 10:1c0f58b9c048 | 193 | fg[0] = fg[1] = fg[2] = 2.22f + (++i / 100); |
kenjiArai | 10:1c0f58b9c048 | 194 | } else { |
kenjiArai | 10:1c0f58b9c048 | 195 | fa[0] = fa[1] = fa[2] = -0.01f - (++i / 100); |
kenjiArai | 10:1c0f58b9c048 | 196 | fg[0] = fg[1] = fg[2] = 0.01f + (++i / 100); |
kenjiArai | 10:1c0f58b9c048 | 197 | } |
kenjiArai | 4:76b3113c79ff | 198 | // <----unlock |
kenjiArai | 4:76b3113c79ff | 199 | i2c_mutex.unlock(); |
kenjiArai | 5:dccdaaa1e57b | 200 | // debug |
kenjiArai | 5:dccdaaa1e57b | 201 | task0 = !task0; |
kenjiArai | 10:1c0f58b9c048 | 202 | osDelay(1000); |
kenjiArai | 4:76b3113c79ff | 203 | } |
kenjiArai | 4:76b3113c79ff | 204 | } |
kenjiArai | 4:76b3113c79ff | 205 | |
kenjiArai | 4:76b3113c79ff | 206 | // Update sensor data |
kenjiArai | 10:1c0f58b9c048 | 207 | void adc(void const *args){ |
kenjiArai | 4:76b3113c79ff | 208 | while (true) { |
kenjiArai | 10:1c0f58b9c048 | 209 | #if defined(TARGET_NUCLEO_L152RE) |
kenjiArai | 10:1c0f58b9c048 | 210 | analog[0] = adc1.read(); |
kenjiArai | 10:1c0f58b9c048 | 211 | analog[1] = adc3.read(); |
kenjiArai | 10:1c0f58b9c048 | 212 | #else |
kenjiArai | 10:1c0f58b9c048 | 213 | analog[0] = 1.2f; |
kenjiArai | 10:1c0f58b9c048 | 214 | analog[1] = 3.4f; |
kenjiArai | 5:dccdaaa1e57b | 215 | #endif |
kenjiArai | 10:1c0f58b9c048 | 216 | osDelay(500); // miliseconds |
kenjiArai | 5:dccdaaa1e57b | 217 | task1 = !task1; |
kenjiArai | 4:76b3113c79ff | 218 | } |
kenjiArai | 4:76b3113c79ff | 219 | } |
kenjiArai | 4:76b3113c79ff | 220 | |
kenjiArai | 10:1c0f58b9c048 | 221 | // Update sensor data |
kenjiArai | 10:1c0f58b9c048 | 222 | void pwm_and_dac(void const *args){ |
kenjiArai | 10:1c0f58b9c048 | 223 | uint8_t i = 0; |
kenjiArai | 10:1c0f58b9c048 | 224 | while (true) { |
kenjiArai | 10:1c0f58b9c048 | 225 | #if defined(TARGET_NUCLEO_L152RE) |
kenjiArai | 10:1c0f58b9c048 | 226 | dac0.write(out_data[i & 0x0f]); |
kenjiArai | 10:1c0f58b9c048 | 227 | dac1.write(out_data[i & 0x0f]); |
kenjiArai | 10:1c0f58b9c048 | 228 | #endif |
kenjiArai | 10:1c0f58b9c048 | 229 | osDelay(500); // miliseconds |
kenjiArai | 10:1c0f58b9c048 | 230 | i++; |
kenjiArai | 10:1c0f58b9c048 | 231 | } |
kenjiArai | 10:1c0f58b9c048 | 232 | } |
kenjiArai | 10:1c0f58b9c048 | 233 | |
kenjiArai | 4:76b3113c79ff | 234 | // Thread definition |
kenjiArai | 10:1c0f58b9c048 | 235 | osThreadDef(update_sensor, osPriorityNormal, 1024); |
kenjiArai | 5:dccdaaa1e57b | 236 | osThreadDef(monitor, osPriorityNormal, 1024); |
kenjiArai | 8:4006b111c0d4 | 237 | osThreadDef(watch_time, osPriorityNormal, 1024); |
kenjiArai | 10:1c0f58b9c048 | 238 | osThreadDef(adc, osPriorityAboveNormal, 1024); |
kenjiArai | 10:1c0f58b9c048 | 239 | osThreadDef(pwm_and_dac, osPriorityAboveNormal, 1024); |
kenjiArai | 4:76b3113c79ff | 240 | |
kenjiArai | 4:76b3113c79ff | 241 | int main(void) { |
kenjiArai | 10:1c0f58b9c048 | 242 | osDelay(1000); // wait 1sec |
kenjiArai | 10:1c0f58b9c048 | 243 | // PUTS("\x1b[2J\x1b[H"); |
kenjiArai | 10:1c0f58b9c048 | 244 | PUTS("\r\nCreated on "__DATE__ " " __TIME__ " (UTC)\r\n""\r\n"); |
kenjiArai | 10:1c0f58b9c048 | 245 | DEBUG_LINE |
kenjiArai | 10:1c0f58b9c048 | 246 | if (SetRTC(0) == 1) { |
kenjiArai | 10:1c0f58b9c048 | 247 | PRINTF("Use External CLK (Good for RTC)\r\n"); |
kenjiArai | 10:1c0f58b9c048 | 248 | } else { |
kenjiArai | 10:1c0f58b9c048 | 249 | PRINTF("Use Internal CLK (Bad for RTC)\r\n"); |
kenjiArai | 10:1c0f58b9c048 | 250 | } |
kenjiArai | 10:1c0f58b9c048 | 251 | DEBUG_LINE |
kenjiArai | 10:1c0f58b9c048 | 252 | time_enter_mode(); |
kenjiArai | 10:1c0f58b9c048 | 253 | DEBUG_LINE |
kenjiArai | 4:76b3113c79ff | 254 | RtosTimer led_1_timer(blink, osTimerPeriodic, (void *)0); |
kenjiArai | 4:76b3113c79ff | 255 | RtosTimer led_2_timer(blink, osTimerPeriodic, (void *)1); |
kenjiArai | 4:76b3113c79ff | 256 | RtosTimer led_3_timer(blink, osTimerPeriodic, (void *)2); |
kenjiArai | 10:1c0f58b9c048 | 257 | DEBUG_LINE |
kenjiArai | 4:76b3113c79ff | 258 | led_1_timer.start(2000); |
kenjiArai | 4:76b3113c79ff | 259 | led_2_timer.start(1000); |
kenjiArai | 4:76b3113c79ff | 260 | led_3_timer.start(500); |
kenjiArai | 10:1c0f58b9c048 | 261 | DEBUG_LINE |
kenjiArai | 4:76b3113c79ff | 262 | Thread thread(send_thread); |
kenjiArai | 10:1c0f58b9c048 | 263 | DEBUG_LINE |
kenjiArai | 4:76b3113c79ff | 264 | // IRQ |
kenjiArai | 4:76b3113c79ff | 265 | Ticker ticker0; |
kenjiArai | 4:76b3113c79ff | 266 | Ticker ticker1; |
kenjiArai | 4:76b3113c79ff | 267 | ticker0.attach(queue_isr0, TIME_BASE_S); |
kenjiArai | 10:1c0f58b9c048 | 268 | DEBUG_LINE |
kenjiArai | 10:1c0f58b9c048 | 269 | #if 0 |
kenjiArai | 10:1c0f58b9c048 | 270 | /// Create a thread and add it to Active Threads and set it to state READY |
kenjiArai | 10:1c0f58b9c048 | 271 | osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument) { |
kenjiArai | 10:1c0f58b9c048 | 272 | if (__exceptional_mode()) return NULL; // Not allowed in ISR |
kenjiArai | 10:1c0f58b9c048 | 273 | if ((__get_mode() != MODE_USR) && (os_running == 0)) { |
kenjiArai | 10:1c0f58b9c048 | 274 | // Privileged and not running |
kenjiArai | 10:1c0f58b9c048 | 275 | return svcThreadCreate(thread_def, argument); |
kenjiArai | 10:1c0f58b9c048 | 276 | } else { |
kenjiArai | 10:1c0f58b9c048 | 277 | return __svcThreadCreate(thread_def, argument); |
kenjiArai | 10:1c0f58b9c048 | 278 | } |
kenjiArai | 10:1c0f58b9c048 | 279 | } |
kenjiArai | 10:1c0f58b9c048 | 280 | #endif |
kenjiArai | 5:dccdaaa1e57b | 281 | // Starts threads |
kenjiArai | 10:1c0f58b9c048 | 282 | if (osThreadCreate(osThread(monitor), NULL) == NULL){ |
kenjiArai | 10:1c0f58b9c048 | 283 | PRINTF("ERROR/monitor() thread\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 284 | } |
kenjiArai | 10:1c0f58b9c048 | 285 | DEBUG_LINE |
kenjiArai | 10:1c0f58b9c048 | 286 | if (osThreadCreate(osThread(update_sensor), NULL) == NULL){ |
kenjiArai | 10:1c0f58b9c048 | 287 | PRINTF("ERROR/update_sensor() thread\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 288 | } |
kenjiArai | 10:1c0f58b9c048 | 289 | DEBUG_LINE |
kenjiArai | 8:4006b111c0d4 | 290 | if (osThreadCreate(osThread(watch_time), NULL) == NULL){ |
kenjiArai | 10:1c0f58b9c048 | 291 | printf("ERROR/watch_time() thread\r\n"); |
kenjiArai | 10:1c0f58b9c048 | 292 | } |
kenjiArai | 10:1c0f58b9c048 | 293 | DEBUG_LINE |
kenjiArai | 10:1c0f58b9c048 | 294 | if (osThreadCreate(osThread(adc), NULL) == NULL){ |
kenjiArai | 10:1c0f58b9c048 | 295 | PRINTF("ERROR/print4com() therad\r\n"); |
kenjiArai | 8:4006b111c0d4 | 296 | } |
kenjiArai | 10:1c0f58b9c048 | 297 | DEBUG_LINE |
kenjiArai | 10:1c0f58b9c048 | 298 | if (osThreadCreate(osThread(pwm_and_dac), NULL) == NULL){ |
kenjiArai | 10:1c0f58b9c048 | 299 | PRINTF("ERROR/print4com() therad\r\n"); |
kenjiArai | 10:1c0f58b9c048 | 300 | } |
kenjiArai | 10:1c0f58b9c048 | 301 | DEBUG_LINE |
kenjiArai | 5:dccdaaa1e57b | 302 | count = 0; |
kenjiArai | 10:1c0f58b9c048 | 303 | DEBUG_LINE |
kenjiArai | 4:76b3113c79ff | 304 | while (true) { |
kenjiArai | 4:76b3113c79ff | 305 | osEvent evt = mail_box.get(); |
kenjiArai | 10:1c0f58b9c048 | 306 | //DEBUG_LINE |
kenjiArai | 4:76b3113c79ff | 307 | if (evt.status == osEventMail) { |
kenjiArai | 4:76b3113c79ff | 308 | mail_t *mail = (mail_t*)evt.value.p; |
kenjiArai | 8:4006b111c0d4 | 309 | if (show_flag0){ |
kenjiArai | 8:4006b111c0d4 | 310 | PRINTF("[MAIN]\r\n"); |
kenjiArai | 4:76b3113c79ff | 311 | PRINTF("This is dummy!, "); |
kenjiArai | 4:76b3113c79ff | 312 | PRINTF("Volt: %.2f V, " , mail->voltage); |
kenjiArai | 4:76b3113c79ff | 313 | PRINTF("Current: %.2f A, " , mail->current); |
kenjiArai | 4:76b3113c79ff | 314 | PRINTF("# of cycles: %u\r\n", mail->counter); |
kenjiArai | 4:76b3113c79ff | 315 | } |
kenjiArai | 4:76b3113c79ff | 316 | mail_box.free(mail); |
kenjiArai | 4:76b3113c79ff | 317 | } |
kenjiArai | 4:76b3113c79ff | 318 | } |
kenjiArai | 4:76b3113c79ff | 319 | } |
kenjiArai | 5:dccdaaa1e57b | 320 | |
kenjiArai | 10:1c0f58b9c048 | 321 | // rtos error routine |
kenjiArai | 5:dccdaaa1e57b | 322 | void mbed_die(void) { |
kenjiArai | 5:dccdaaa1e57b | 323 | PRINTF("Error, came from os_error()!\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 324 | gpio_t led_1; gpio_init_out(&led_1, LED1); |
kenjiArai | 10:1c0f58b9c048 | 325 | gpio_t led_2; gpio_init_out(&led_2, PC_10); |
kenjiArai | 10:1c0f58b9c048 | 326 | gpio_t led_3; gpio_init_out(&led_3, PC_11); |
kenjiArai | 10:1c0f58b9c048 | 327 | gpio_t led_4; gpio_init_out(&led_4, PC_12); |
kenjiArai | 5:dccdaaa1e57b | 328 | |
kenjiArai | 5:dccdaaa1e57b | 329 | while (1) { |
kenjiArai | 5:dccdaaa1e57b | 330 | gpio_write(&led_1, 1); |
kenjiArai | 5:dccdaaa1e57b | 331 | gpio_write(&led_2, 0); |
kenjiArai | 5:dccdaaa1e57b | 332 | gpio_write(&led_3, 0); |
kenjiArai | 5:dccdaaa1e57b | 333 | gpio_write(&led_4, 1); |
kenjiArai | 5:dccdaaa1e57b | 334 | wait_ms(100); |
kenjiArai | 5:dccdaaa1e57b | 335 | gpio_write(&led_1, 0); |
kenjiArai | 5:dccdaaa1e57b | 336 | gpio_write(&led_2, 1); |
kenjiArai | 5:dccdaaa1e57b | 337 | gpio_write(&led_3, 1); |
kenjiArai | 5:dccdaaa1e57b | 338 | gpio_write(&led_4, 0); |
kenjiArai | 5:dccdaaa1e57b | 339 | wait_ms(100); |
kenjiArai | 5:dccdaaa1e57b | 340 | } |
kenjiArai | 5:dccdaaa1e57b | 341 | } |