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@9:de986e74bd93, 2015-02-12 (annotated)
- Committer:
- kenjiArai
- Date:
- Thu Feb 12 07:53:25 2015 +0000
- Revision:
- 9:de986e74bd93
- Parent:
- 8:4006b111c0d4
- Child:
- 10:1c0f58b9c048
use standard library mbed & mbed-rtos
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 | 1:a399a743d109 | 3 | * Test program for GR-PEACH |
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 | 8:4006b111c0d4 | 9 | * Revised: Feburary 8th, 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 | 4:76b3113c79ff | 19 | #include "mbed.h" |
kenjiArai | 4:76b3113c79ff | 20 | #include "rtos.h" |
kenjiArai | 4:76b3113c79ff | 21 | #include "L3GD20.h" |
kenjiArai | 4:76b3113c79ff | 22 | #include "LIS3DH.h" |
kenjiArai | 5:dccdaaa1e57b | 23 | #include "TextLCD.h" |
kenjiArai | 2:3747397a1618 | 24 | |
kenjiArai | 4:76b3113c79ff | 25 | // Definition ------------------------------------------------------------------------------------ |
kenjiArai | 4:76b3113c79ff | 26 | #define USE_COM // use Communication with PC(UART) |
kenjiArai | 5:dccdaaa1e57b | 27 | #define USE_I2C_LCD |
kenjiArai | 5:dccdaaa1e57b | 28 | #define USE_I2C_SENSOR |
kenjiArai | 4:76b3113c79ff | 29 | |
kenjiArai | 4:76b3113c79ff | 30 | // Com |
kenjiArai | 4:76b3113c79ff | 31 | #ifdef USE_COM |
kenjiArai | 4:76b3113c79ff | 32 | #define BAUD(x) pcx.baud(x) |
kenjiArai | 4:76b3113c79ff | 33 | #define GETC(x) pcx.getc(x) |
kenjiArai | 4:76b3113c79ff | 34 | #define PUTC(x) pcx.putc(x) |
kenjiArai | 4:76b3113c79ff | 35 | #define PRINTF(...) pcx.printf(__VA_ARGS__) |
kenjiArai | 4:76b3113c79ff | 36 | #define READABLE(x) pcx.readable(x) |
kenjiArai | 4:76b3113c79ff | 37 | #else |
kenjiArai | 4:76b3113c79ff | 38 | #define BAUD(x) {;} |
kenjiArai | 4:76b3113c79ff | 39 | #define GETC(x) {;} |
kenjiArai | 4:76b3113c79ff | 40 | #define PUTC(x) {;} |
kenjiArai | 4:76b3113c79ff | 41 | #define PRINTF(...) {;} |
kenjiArai | 4:76b3113c79ff | 42 | #define READABLE(x) {;} |
kenjiArai | 0:a17b3cf2f466 | 43 | #endif |
kenjiArai | 0:a17b3cf2f466 | 44 | |
kenjiArai | 4:76b3113c79ff | 45 | #define TIMEBASE 12000 |
kenjiArai | 4:76b3113c79ff | 46 | #define FIXED_STEPS 100 |
kenjiArai | 4:76b3113c79ff | 47 | |
kenjiArai | 4:76b3113c79ff | 48 | #define PI 3.1415926536 |
kenjiArai | 4:76b3113c79ff | 49 | #define RAD_TO_DEG 57.29578 |
kenjiArai | 5:dccdaaa1e57b | 50 | #define TIME_BASE_S 0.02 |
kenjiArai | 4:76b3113c79ff | 51 | #define TIME_BASE_MS ( TIME_BASE_S * 1000) |
kenjiArai | 4:76b3113c79ff | 52 | #define RATE 0.1 |
kenjiArai | 4:76b3113c79ff | 53 | |
kenjiArai | 4:76b3113c79ff | 54 | // Object ---------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 55 | // LED's |
kenjiArai | 4:76b3113c79ff | 56 | DigitalOut LEDs[4] = { |
kenjiArai | 4:76b3113c79ff | 57 | DigitalOut(LED1), DigitalOut(LED2), DigitalOut(LED3), DigitalOut(LED4) |
kenjiArai | 4:76b3113c79ff | 58 | }; |
kenjiArai | 4:76b3113c79ff | 59 | // Swiches |
kenjiArai | 4:76b3113c79ff | 60 | DigitalIn USER_SWITCH[2] = { |
kenjiArai | 5:dccdaaa1e57b | 61 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 4:76b3113c79ff | 62 | DigitalIn(P6_0), DigitalIn(P6_1) |
kenjiArai | 6:f14cce59e7fe | 63 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 4:76b3113c79ff | 64 | DigitalIn(PC_13), DigitalIn(A0) |
kenjiArai | 5:dccdaaa1e57b | 65 | #endif |
kenjiArai | 4:76b3113c79ff | 66 | }; |
kenjiArai | 5:dccdaaa1e57b | 67 | |
kenjiArai | 5:dccdaaa1e57b | 68 | // OS check |
kenjiArai | 5:dccdaaa1e57b | 69 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 5:dccdaaa1e57b | 70 | DigitalOut task0(P1_8); |
kenjiArai | 5:dccdaaa1e57b | 71 | DigitalOut task1(P1_9); |
kenjiArai | 6:f14cce59e7fe | 72 | #elif defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 5:dccdaaa1e57b | 73 | DigitalOut task0(A0); |
kenjiArai | 5:dccdaaa1e57b | 74 | DigitalOut task1(A1); |
kenjiArai | 5:dccdaaa1e57b | 75 | #endif |
kenjiArai | 5:dccdaaa1e57b | 76 | |
kenjiArai | 4:76b3113c79ff | 77 | // com |
kenjiArai | 4:76b3113c79ff | 78 | #ifdef USE_COM |
kenjiArai | 4:76b3113c79ff | 79 | Serial pcx(USBTX, USBRX); // Communication with Host |
kenjiArai | 4:76b3113c79ff | 80 | #endif |
kenjiArai | 4:76b3113c79ff | 81 | I2C i2c(D14,D15); |
kenjiArai | 4:76b3113c79ff | 82 | // Gyro |
kenjiArai | 4:76b3113c79ff | 83 | L3GX_GYRO gyro(i2c, L3GD20_V_CHIP_ADDR, L3GX_DR_95HZ, L3GX_BW_HI, L3GX_FS_250DPS); |
kenjiArai | 4:76b3113c79ff | 84 | // Acc |
kenjiArai | 4:76b3113c79ff | 85 | LIS3DH acc(i2c, LIS3DH_G_CHIP_ADDR, LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_8G); |
kenjiArai | 5:dccdaaa1e57b | 86 | #ifdef USE_I2C_LCD |
kenjiArai | 5:dccdaaa1e57b | 87 | // LCD |
kenjiArai | 5:dccdaaa1e57b | 88 | TextLCD_I2C_N lcd0(&i2c, 0x7c, TextLCD::LCD16x2); // LCD(Akizuki AQM0802A) |
kenjiArai | 5:dccdaaa1e57b | 89 | #endif |
kenjiArai | 4:76b3113c79ff | 90 | // Mutex |
kenjiArai | 4:76b3113c79ff | 91 | Mutex i2c_mutex; |
kenjiArai | 0:a17b3cf2f466 | 92 | |
kenjiArai | 4:76b3113c79ff | 93 | // RAM ------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 94 | Queue<uint32_t, 2> queue0; |
kenjiArai | 4:76b3113c79ff | 95 | float fa[3]; // Acc 0:X, 1:Y, 2:Z |
kenjiArai | 4:76b3113c79ff | 96 | float fg[3]; // Gyro 0:X, 1:Y, 2:Z |
kenjiArai | 4:76b3113c79ff | 97 | |
kenjiArai | 4:76b3113c79ff | 98 | /* Mail */ |
kenjiArai | 4:76b3113c79ff | 99 | typedef struct { |
kenjiArai | 4:76b3113c79ff | 100 | float voltage; /* AD result of measured voltage */ |
kenjiArai | 4:76b3113c79ff | 101 | float current; /* AD result of measured current */ |
kenjiArai | 4:76b3113c79ff | 102 | uint32_t counter; /* A counter value */ |
kenjiArai | 4:76b3113c79ff | 103 | } mail_t; |
kenjiArai | 4:76b3113c79ff | 104 | |
kenjiArai | 4:76b3113c79ff | 105 | Mail<mail_t, 16> mail_box; |
kenjiArai | 4:76b3113c79ff | 106 | |
kenjiArai | 8:4006b111c0d4 | 107 | uint8_t show_flag0; |
kenjiArai | 8:4006b111c0d4 | 108 | uint8_t show_flag1; |
kenjiArai | 5:dccdaaa1e57b | 109 | uint32_t count; |
kenjiArai | 5:dccdaaa1e57b | 110 | |
kenjiArai | 5:dccdaaa1e57b | 111 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 5:dccdaaa1e57b | 112 | uint8_t big_data[4096*1024]; |
kenjiArai | 5:dccdaaa1e57b | 113 | uint32_t big_data_index = 0; |
kenjiArai | 5:dccdaaa1e57b | 114 | #endif |
kenjiArai | 4:76b3113c79ff | 115 | |
kenjiArai | 4:76b3113c79ff | 116 | // ROM / Constant data --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 117 | |
kenjiArai | 4:76b3113c79ff | 118 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 119 | |
kenjiArai | 4:76b3113c79ff | 120 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 121 | extern int mon( void); |
kenjiArai | 4:76b3113c79ff | 122 | |
kenjiArai | 4:76b3113c79ff | 123 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 124 | // Control Program |
kenjiArai | 4:76b3113c79ff | 125 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 4:76b3113c79ff | 126 | void send_thread (void const *args) { |
kenjiArai | 4:76b3113c79ff | 127 | uint32_t i = 0; |
kenjiArai | 4:76b3113c79ff | 128 | while (true) { |
kenjiArai | 4:76b3113c79ff | 129 | i++; // fake data update |
kenjiArai | 4:76b3113c79ff | 130 | mail_t *mail = mail_box.alloc(); |
kenjiArai | 4:76b3113c79ff | 131 | mail->voltage = (i * 0.1) * 33; |
kenjiArai | 4:76b3113c79ff | 132 | mail->current = (i * 0.1) * 11; |
kenjiArai | 4:76b3113c79ff | 133 | mail->counter = i; |
kenjiArai | 4:76b3113c79ff | 134 | mail_box.put(mail); |
kenjiArai | 4:76b3113c79ff | 135 | Thread::wait(1000); |
kenjiArai | 4:76b3113c79ff | 136 | } |
kenjiArai | 4:76b3113c79ff | 137 | } |
kenjiArai | 4:76b3113c79ff | 138 | |
kenjiArai | 4:76b3113c79ff | 139 | void blink(void const *n) { |
kenjiArai | 4:76b3113c79ff | 140 | LEDs[(int)n] = !LEDs[(int)n]; |
kenjiArai | 4:76b3113c79ff | 141 | } |
kenjiArai | 4:76b3113c79ff | 142 | |
kenjiArai | 4:76b3113c79ff | 143 | // Read switch status |
kenjiArai | 4:76b3113c79ff | 144 | int read_sw(uint8_t n){ |
kenjiArai | 4:76b3113c79ff | 145 | if (USER_SWITCH[n] == 0){ return 1; |
kenjiArai | 4:76b3113c79ff | 146 | } else { return 0;} |
kenjiArai | 4:76b3113c79ff | 147 | } |
kenjiArai | 4:76b3113c79ff | 148 | |
kenjiArai | 4:76b3113c79ff | 149 | // Monitor program |
kenjiArai | 4:76b3113c79ff | 150 | void monitor(void const *args){ |
kenjiArai | 5:dccdaaa1e57b | 151 | Thread::wait(1000); |
kenjiArai | 4:76b3113c79ff | 152 | while (true){ |
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 | uint32_t i = 0; |
kenjiArai | 8:4006b111c0d4 | 159 | time_t seconds; |
kenjiArai | 8:4006b111c0d4 | 160 | char buf[64]; |
kenjiArai | 9:de986e74bd93 | 161 | #if 0 |
kenjiArai | 9:de986e74bd93 | 162 | struct tm t; |
kenjiArai | 8:4006b111c0d4 | 163 | |
kenjiArai | 8:4006b111c0d4 | 164 | t.tm_year = 15 + 100; |
kenjiArai | 8:4006b111c0d4 | 165 | t.tm_mon = 2 - 1; |
kenjiArai | 8:4006b111c0d4 | 166 | t.tm_mday = 7; |
kenjiArai | 8:4006b111c0d4 | 167 | t.tm_hour = 22; |
kenjiArai | 8:4006b111c0d4 | 168 | t.tm_min = 21; |
kenjiArai | 8:4006b111c0d4 | 169 | t.tm_sec = 20; |
kenjiArai | 8:4006b111c0d4 | 170 | seconds = mktime(&t); |
kenjiArai | 8:4006b111c0d4 | 171 | set_time(seconds); |
kenjiArai | 8:4006b111c0d4 | 172 | #endif |
kenjiArai | 8:4006b111c0d4 | 173 | while (true) { |
kenjiArai | 8:4006b111c0d4 | 174 | seconds = time(NULL); |
kenjiArai | 8:4006b111c0d4 | 175 | strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds)); |
kenjiArai | 8:4006b111c0d4 | 176 | if (show_flag1){ |
kenjiArai | 8:4006b111c0d4 | 177 | printf("[TASK1] %s, No:%5d, Ticker:%10u\r\n",buf, i++, us_ticker_read()); |
kenjiArai | 8:4006b111c0d4 | 178 | } |
kenjiArai | 8:4006b111c0d4 | 179 | Thread::wait(1000); |
kenjiArai | 8:4006b111c0d4 | 180 | } |
kenjiArai | 8:4006b111c0d4 | 181 | } |
kenjiArai | 8:4006b111c0d4 | 182 | |
kenjiArai | 4:76b3113c79ff | 183 | // Interrupt routine |
kenjiArai | 4:76b3113c79ff | 184 | void queue_isr0() { |
kenjiArai | 4:76b3113c79ff | 185 | queue0.put((uint32_t*)1); |
kenjiArai | 4:76b3113c79ff | 186 | } |
kenjiArai | 4:76b3113c79ff | 187 | |
kenjiArai | 4:76b3113c79ff | 188 | // Update sensor data |
kenjiArai | 4:76b3113c79ff | 189 | void update_angle(void const *args){ |
kenjiArai | 4:76b3113c79ff | 190 | while (true) { |
kenjiArai | 4:76b3113c79ff | 191 | osEvent evt = queue0.get(); |
kenjiArai | 4:76b3113c79ff | 192 | // ---->lock |
kenjiArai | 4:76b3113c79ff | 193 | i2c_mutex.lock(); |
kenjiArai | 5:dccdaaa1e57b | 194 | #ifdef USE_I2C_SENSOR |
kenjiArai | 4:76b3113c79ff | 195 | // read acceleration data from sensor |
kenjiArai | 4:76b3113c79ff | 196 | acc.read_data(fa); |
kenjiArai | 4:76b3113c79ff | 197 | // read gyroscope data from sensor |
kenjiArai | 4:76b3113c79ff | 198 | gyro.read_data(fg); |
kenjiArai | 5:dccdaaa1e57b | 199 | #else |
kenjiArai | 5:dccdaaa1e57b | 200 | fa[0] = fa[1] = fa[2] = 1.11f; |
kenjiArai | 5:dccdaaa1e57b | 201 | fg[0] = fg[1] = fg[2] = 1.11f; |
kenjiArai | 5:dccdaaa1e57b | 202 | #endif |
kenjiArai | 4:76b3113c79ff | 203 | // <----unlock |
kenjiArai | 4:76b3113c79ff | 204 | i2c_mutex.unlock(); |
kenjiArai | 5:dccdaaa1e57b | 205 | // debug |
kenjiArai | 5:dccdaaa1e57b | 206 | task0 = !task0; |
kenjiArai | 4:76b3113c79ff | 207 | } |
kenjiArai | 4:76b3113c79ff | 208 | } |
kenjiArai | 4:76b3113c79ff | 209 | |
kenjiArai | 4:76b3113c79ff | 210 | // Update sensor data |
kenjiArai | 4:76b3113c79ff | 211 | void display(void const *args){ |
kenjiArai | 5:dccdaaa1e57b | 212 | uint32_t n = 0; |
kenjiArai | 5:dccdaaa1e57b | 213 | |
kenjiArai | 4:76b3113c79ff | 214 | while (true) { |
kenjiArai | 5:dccdaaa1e57b | 215 | #ifdef USE_I2C_LCD |
kenjiArai | 5:dccdaaa1e57b | 216 | i2c_mutex.lock(); |
kenjiArai | 5:dccdaaa1e57b | 217 | lcd0.locate(0, 0); // 1st line top |
kenjiArai | 6:f14cce59e7fe | 218 | lcd0.printf(" G=%4.1f ", sqrt(fa[0]*fa[0] + fa[1]*fa[1] + fa[2]*fa[2])); |
kenjiArai | 5:dccdaaa1e57b | 219 | lcd0.locate(0, 1); // 2nd line top |
kenjiArai | 6:f14cce59e7fe | 220 | lcd0.printf("%8d",n++); |
kenjiArai | 5:dccdaaa1e57b | 221 | i2c_mutex.unlock(); |
kenjiArai | 5:dccdaaa1e57b | 222 | #endif |
kenjiArai | 4:76b3113c79ff | 223 | Thread::wait(500); |
kenjiArai | 5:dccdaaa1e57b | 224 | // debug |
kenjiArai | 5:dccdaaa1e57b | 225 | task1 = !task1; |
kenjiArai | 4:76b3113c79ff | 226 | } |
kenjiArai | 4:76b3113c79ff | 227 | } |
kenjiArai | 4:76b3113c79ff | 228 | |
kenjiArai | 4:76b3113c79ff | 229 | // Thread definition |
kenjiArai | 5:dccdaaa1e57b | 230 | osThreadDef(update_angle, osPriorityNormal, 1024); |
kenjiArai | 5:dccdaaa1e57b | 231 | osThreadDef(monitor, osPriorityNormal, 1024); |
kenjiArai | 5:dccdaaa1e57b | 232 | osThreadDef(display, osPriorityAboveNormal, 1024); |
kenjiArai | 8:4006b111c0d4 | 233 | osThreadDef(watch_time, osPriorityNormal, 1024); |
kenjiArai | 4:76b3113c79ff | 234 | |
kenjiArai | 4:76b3113c79ff | 235 | int main(void) { |
kenjiArai | 5:dccdaaa1e57b | 236 | PRINTF("\r\nstep1\r\n"); |
kenjiArai | 4:76b3113c79ff | 237 | |
kenjiArai | 4:76b3113c79ff | 238 | RtosTimer led_1_timer(blink, osTimerPeriodic, (void *)0); |
kenjiArai | 4:76b3113c79ff | 239 | RtosTimer led_2_timer(blink, osTimerPeriodic, (void *)1); |
kenjiArai | 4:76b3113c79ff | 240 | RtosTimer led_3_timer(blink, osTimerPeriodic, (void *)2); |
kenjiArai | 4:76b3113c79ff | 241 | RtosTimer led_4_timer(blink, osTimerPeriodic, (void *)3); |
kenjiArai | 4:76b3113c79ff | 242 | |
kenjiArai | 4:76b3113c79ff | 243 | PRINTF("step2\r\n"); |
kenjiArai | 4:76b3113c79ff | 244 | led_1_timer.start(2000); |
kenjiArai | 4:76b3113c79ff | 245 | led_2_timer.start(1000); |
kenjiArai | 4:76b3113c79ff | 246 | led_3_timer.start(500); |
kenjiArai | 4:76b3113c79ff | 247 | led_4_timer.start(250); |
kenjiArai | 4:76b3113c79ff | 248 | |
kenjiArai | 4:76b3113c79ff | 249 | PRINTF("step3\r\n"); |
kenjiArai | 4:76b3113c79ff | 250 | Thread thread(send_thread); |
kenjiArai | 4:76b3113c79ff | 251 | |
kenjiArai | 4:76b3113c79ff | 252 | PRINTF("step4\r\n"); |
kenjiArai | 4:76b3113c79ff | 253 | |
kenjiArai | 4:76b3113c79ff | 254 | // IRQ |
kenjiArai | 4:76b3113c79ff | 255 | Ticker ticker0; |
kenjiArai | 4:76b3113c79ff | 256 | Ticker ticker1; |
kenjiArai | 4:76b3113c79ff | 257 | ticker0.attach(queue_isr0, TIME_BASE_S); |
kenjiArai | 8:4006b111c0d4 | 258 | |
kenjiArai | 8:4006b111c0d4 | 259 | |
kenjiArai | 4:76b3113c79ff | 260 | PRINTF("step5\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 261 | // Starts threads |
kenjiArai | 5:dccdaaa1e57b | 262 | if (osThreadCreate(osThread(display), NULL) == NULL){ |
kenjiArai | 5:dccdaaa1e57b | 263 | PRINTF("ERROR4\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 264 | } |
kenjiArai | 5:dccdaaa1e57b | 265 | if (osThreadCreate(osThread(monitor), NULL) == NULL){ |
kenjiArai | 5:dccdaaa1e57b | 266 | PRINTF("ERROR3\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 267 | } |
kenjiArai | 5:dccdaaa1e57b | 268 | if (osThreadCreate(osThread(update_angle), NULL) == NULL){ |
kenjiArai | 5:dccdaaa1e57b | 269 | PRINTF("ERROR1\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 270 | } |
kenjiArai | 8:4006b111c0d4 | 271 | if (osThreadCreate(osThread(watch_time), NULL) == NULL){ |
kenjiArai | 8:4006b111c0d4 | 272 | printf("ERROR5\r\n"); |
kenjiArai | 8:4006b111c0d4 | 273 | } |
kenjiArai | 5:dccdaaa1e57b | 274 | // I2C LCD |
kenjiArai | 5:dccdaaa1e57b | 275 | #ifdef USE_I2C_LCD |
kenjiArai | 5:dccdaaa1e57b | 276 | // ---->lock |
kenjiArai | 5:dccdaaa1e57b | 277 | i2c_mutex.lock(); |
kenjiArai | 5:dccdaaa1e57b | 278 | lcd0.locate(0, 0); // 1st line top |
kenjiArai | 5:dccdaaa1e57b | 279 | lcd0.printf("I2C test"); |
kenjiArai | 5:dccdaaa1e57b | 280 | lcd0.locate(0, 1); // 2nd line top |
kenjiArai | 5:dccdaaa1e57b | 281 | lcd0.puts(" JH1PJL "); |
kenjiArai | 5:dccdaaa1e57b | 282 | lcd0.setContrast(0x14); |
kenjiArai | 5:dccdaaa1e57b | 283 | // <----unlock |
kenjiArai | 5:dccdaaa1e57b | 284 | i2c_mutex.unlock(); |
kenjiArai | 5:dccdaaa1e57b | 285 | #endif |
kenjiArai | 5:dccdaaa1e57b | 286 | count = 0; |
kenjiArai | 8:4006b111c0d4 | 287 | PRINTF("step6\r\n"); |
kenjiArai | 4:76b3113c79ff | 288 | while (true) { |
kenjiArai | 4:76b3113c79ff | 289 | osEvent evt = mail_box.get(); |
kenjiArai | 4:76b3113c79ff | 290 | if (evt.status == osEventMail) { |
kenjiArai | 4:76b3113c79ff | 291 | mail_t *mail = (mail_t*)evt.value.p; |
kenjiArai | 8:4006b111c0d4 | 292 | if (show_flag0){ |
kenjiArai | 8:4006b111c0d4 | 293 | PRINTF("[MAIN]\r\n"); |
kenjiArai | 4:76b3113c79ff | 294 | PRINTF("This is dummy!, "); |
kenjiArai | 4:76b3113c79ff | 295 | PRINTF("Volt: %.2f V, " , mail->voltage); |
kenjiArai | 4:76b3113c79ff | 296 | PRINTF("Current: %.2f A, " , mail->current); |
kenjiArai | 4:76b3113c79ff | 297 | PRINTF("# of cycles: %u\r\n", mail->counter); |
kenjiArai | 4:76b3113c79ff | 298 | } |
kenjiArai | 4:76b3113c79ff | 299 | mail_box.free(mail); |
kenjiArai | 4:76b3113c79ff | 300 | } |
kenjiArai | 5:dccdaaa1e57b | 301 | #if defined(TARGET_RZ_A1H) |
kenjiArai | 5:dccdaaa1e57b | 302 | for (uint32_t i = 0; i < 100; i++){ |
kenjiArai | 5:dccdaaa1e57b | 303 | big_data[big_data_index] = ++big_data_index; |
kenjiArai | 5:dccdaaa1e57b | 304 | if (big_data_index == (4096 * 1024)){ |
kenjiArai | 5:dccdaaa1e57b | 305 | big_data_index = 0; |
kenjiArai | 5:dccdaaa1e57b | 306 | } |
kenjiArai | 5:dccdaaa1e57b | 307 | } |
kenjiArai | 5:dccdaaa1e57b | 308 | #endif |
kenjiArai | 4:76b3113c79ff | 309 | } |
kenjiArai | 4:76b3113c79ff | 310 | } |
kenjiArai | 5:dccdaaa1e57b | 311 | |
kenjiArai | 5:dccdaaa1e57b | 312 | void mbed_die(void) { |
kenjiArai | 5:dccdaaa1e57b | 313 | PRINTF("Error, came from os_error()!\r\n"); |
kenjiArai | 5:dccdaaa1e57b | 314 | gpio_t led_1; gpio_init_out(&led_1, LED1); |
kenjiArai | 5:dccdaaa1e57b | 315 | gpio_t led_2; gpio_init_out(&led_2, LED2); |
kenjiArai | 5:dccdaaa1e57b | 316 | gpio_t led_3; gpio_init_out(&led_3, LED3); |
kenjiArai | 5:dccdaaa1e57b | 317 | gpio_t led_4; gpio_init_out(&led_4, LED4); |
kenjiArai | 5:dccdaaa1e57b | 318 | |
kenjiArai | 5:dccdaaa1e57b | 319 | while (1) { |
kenjiArai | 5:dccdaaa1e57b | 320 | gpio_write(&led_1, 1); |
kenjiArai | 5:dccdaaa1e57b | 321 | gpio_write(&led_2, 0); |
kenjiArai | 5:dccdaaa1e57b | 322 | gpio_write(&led_3, 0); |
kenjiArai | 5:dccdaaa1e57b | 323 | gpio_write(&led_4, 1); |
kenjiArai | 5:dccdaaa1e57b | 324 | wait_ms(100); |
kenjiArai | 5:dccdaaa1e57b | 325 | gpio_write(&led_1, 0); |
kenjiArai | 5:dccdaaa1e57b | 326 | gpio_write(&led_2, 1); |
kenjiArai | 5:dccdaaa1e57b | 327 | gpio_write(&led_3, 1); |
kenjiArai | 5:dccdaaa1e57b | 328 | gpio_write(&led_4, 0); |
kenjiArai | 5:dccdaaa1e57b | 329 | wait_ms(100); |
kenjiArai | 5:dccdaaa1e57b | 330 | } |
kenjiArai | 5:dccdaaa1e57b | 331 | } |