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 Kenji Arai

Please refer below link.
/users/kenjiArai/notebook/necleo-l152re-rtos-sample-also-for-f401re--f411re-/

Committer:
kenjiArai
Date:
Wed May 20 10:49:02 2015 +0000
Revision:
13:d0d1da1fae4c
Parent:
10:1c0f58b9c048
change L152 System clock (PLL VCO=96MHz) ->32MHz Clock

Who changed what in which revision?

UserRevisionLine numberNew 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 13:d0d1da1fae4c 9 * Revised: May 20th, 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 #define TIME_BASE_S 0.02
kenjiArai 10:1c0f58b9c048 50
kenjiArai 10:1c0f58b9c048 51 #define step_one (0.0625f)
kenjiArai 4:76b3113c79ff 52
kenjiArai 4:76b3113c79ff 53 // Object ----------------------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 54 // LED's !! DON'T USE LED1(PA_5) because PA_5 uses for DAC
kenjiArai 10:1c0f58b9c048 55 DigitalOut LEDs[3] = {
kenjiArai 10:1c0f58b9c048 56 DigitalOut(PC_10), DigitalOut(PC_11), DigitalOut(PC_12)
kenjiArai 4:76b3113c79ff 57 };
kenjiArai 5:dccdaaa1e57b 58 // OS check
kenjiArai 10:1c0f58b9c048 59 DigitalOut task0(PC_2);
kenjiArai 10:1c0f58b9c048 60 DigitalOut task1(PC_3);
kenjiArai 10:1c0f58b9c048 61 // Swiches
kenjiArai 10:1c0f58b9c048 62 DigitalIn usr_sw(PC_13);
kenjiArai 10:1c0f58b9c048 63 // DAC to ADC
kenjiArai 10:1c0f58b9c048 64 #if defined(TARGET_NUCLEO_L152RE)
kenjiArai 10:1c0f58b9c048 65 AnalogOut dac0(PA_4);
kenjiArai 10:1c0f58b9c048 66 AnalogOut dac1(PA_5);
kenjiArai 5:dccdaaa1e57b 67 #endif
kenjiArai 10:1c0f58b9c048 68 AnalogIn adc1(A1);
kenjiArai 10:1c0f58b9c048 69 AnalogIn adc3(A3);
kenjiArai 10:1c0f58b9c048 70 // I2C
kenjiArai 10:1c0f58b9c048 71 I2C i2c1(D14,D15); // SDA, SCL
kenjiArai 4:76b3113c79ff 72 // com
kenjiArai 10:1c0f58b9c048 73 Serial pc(USBTX, USBRX); // Communication with Host
kenjiArai 4:76b3113c79ff 74 // Mutex
kenjiArai 10:1c0f58b9c048 75 Mutex uart_mutex;
kenjiArai 4:76b3113c79ff 76 Mutex i2c_mutex;
kenjiArai 0:a17b3cf2f466 77
kenjiArai 4:76b3113c79ff 78 // RAM -------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 79 Queue<uint32_t, 2> queue0;
kenjiArai 10:1c0f58b9c048 80
kenjiArai 10:1c0f58b9c048 81 float fg[3];
kenjiArai 10:1c0f58b9c048 82 float fa[3];
kenjiArai 10:1c0f58b9c048 83
kenjiArai 10:1c0f58b9c048 84 float analog[2];
kenjiArai 4:76b3113c79ff 85
kenjiArai 4:76b3113c79ff 86 /* Mail */
kenjiArai 4:76b3113c79ff 87 typedef struct {
kenjiArai 4:76b3113c79ff 88 float voltage; /* AD result of measured voltage */
kenjiArai 4:76b3113c79ff 89 float current; /* AD result of measured current */
kenjiArai 4:76b3113c79ff 90 uint32_t counter; /* A counter value */
kenjiArai 4:76b3113c79ff 91 } mail_t;
kenjiArai 4:76b3113c79ff 92
kenjiArai 4:76b3113c79ff 93 Mail<mail_t, 16> mail_box;
kenjiArai 4:76b3113c79ff 94
kenjiArai 8:4006b111c0d4 95 uint8_t show_flag0;
kenjiArai 8:4006b111c0d4 96 uint8_t show_flag1;
kenjiArai 5:dccdaaa1e57b 97 uint32_t count;
kenjiArai 5:dccdaaa1e57b 98
kenjiArai 4:76b3113c79ff 99 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 10:1c0f58b9c048 100 const float out_data[16] = {step_one * 15, step_one * 14, step_one * 13, step_one * 12, step_one * 11,
kenjiArai 10:1c0f58b9c048 101 step_one * 10, step_one * 9, step_one * 8, step_one * 7, step_one * 6,
kenjiArai 10:1c0f58b9c048 102 step_one * 5, step_one * 4, step_one * 3, step_one * 2, step_one * 1, 0};
kenjiArai 10:1c0f58b9c048 103
kenjiArai 4:76b3113c79ff 104 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 105
kenjiArai 4:76b3113c79ff 106 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 107 extern int mon( void);
kenjiArai 4:76b3113c79ff 108
kenjiArai 4:76b3113c79ff 109 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 110 // Control Program
kenjiArai 4:76b3113c79ff 111 //-------------------------------------------------------------------------------------------------
kenjiArai 4:76b3113c79ff 112 void send_thread (void const *args) {
kenjiArai 4:76b3113c79ff 113 uint32_t i = 0;
kenjiArai 4:76b3113c79ff 114 while (true) {
kenjiArai 4:76b3113c79ff 115 i++; // fake data update
kenjiArai 4:76b3113c79ff 116 mail_t *mail = mail_box.alloc();
kenjiArai 4:76b3113c79ff 117 mail->voltage = (i * 0.1) * 33;
kenjiArai 4:76b3113c79ff 118 mail->current = (i * 0.1) * 11;
kenjiArai 4:76b3113c79ff 119 mail->counter = i;
kenjiArai 4:76b3113c79ff 120 mail_box.put(mail);
kenjiArai 4:76b3113c79ff 121 Thread::wait(1000);
kenjiArai 4:76b3113c79ff 122 }
kenjiArai 4:76b3113c79ff 123 }
kenjiArai 4:76b3113c79ff 124
kenjiArai 4:76b3113c79ff 125 void blink(void const *n) {
kenjiArai 4:76b3113c79ff 126 LEDs[(int)n] = !LEDs[(int)n];
kenjiArai 4:76b3113c79ff 127 }
kenjiArai 4:76b3113c79ff 128
kenjiArai 4:76b3113c79ff 129 // Read switch status
kenjiArai 10:1c0f58b9c048 130 int read_sw(){
kenjiArai 10:1c0f58b9c048 131 if (usr_sw.read()){
kenjiArai 10:1c0f58b9c048 132 return 0;
kenjiArai 10:1c0f58b9c048 133 } else {
kenjiArai 10:1c0f58b9c048 134 return 1;
kenjiArai 10:1c0f58b9c048 135 }
kenjiArai 4:76b3113c79ff 136 }
kenjiArai 4:76b3113c79ff 137
kenjiArai 4:76b3113c79ff 138 // Monitor program
kenjiArai 4:76b3113c79ff 139 void monitor(void const *args){
kenjiArai 10:1c0f58b9c048 140 Thread::wait(100);
kenjiArai 4:76b3113c79ff 141 while (true){
kenjiArai 10:1c0f58b9c048 142 DEBUG_LINE
kenjiArai 4:76b3113c79ff 143 mon();
kenjiArai 0:a17b3cf2f466 144 }
kenjiArai 0:a17b3cf2f466 145 }
kenjiArai 4:76b3113c79ff 146
kenjiArai 8:4006b111c0d4 147 void watch_time (void const *args) {
kenjiArai 8:4006b111c0d4 148 time_t seconds;
kenjiArai 8:4006b111c0d4 149 char buf[64];
kenjiArai 8:4006b111c0d4 150
kenjiArai 8:4006b111c0d4 151 while (true) {
kenjiArai 8:4006b111c0d4 152 seconds = time(NULL);
kenjiArai 8:4006b111c0d4 153 strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
kenjiArai 8:4006b111c0d4 154 if (show_flag1){
kenjiArai 10:1c0f58b9c048 155 // printf("[TASK1] %s, No:%5d, Ticker:%10u\r\n",buf, i++, us_ticker_read());
kenjiArai 8:4006b111c0d4 156 }
kenjiArai 8:4006b111c0d4 157 Thread::wait(1000);
kenjiArai 8:4006b111c0d4 158 }
kenjiArai 8:4006b111c0d4 159 }
kenjiArai 8:4006b111c0d4 160
kenjiArai 4:76b3113c79ff 161 // Interrupt routine
kenjiArai 4:76b3113c79ff 162 void queue_isr0() {
kenjiArai 4:76b3113c79ff 163 queue0.put((uint32_t*)1);
kenjiArai 4:76b3113c79ff 164 }
kenjiArai 4:76b3113c79ff 165
kenjiArai 4:76b3113c79ff 166 // Update sensor data
kenjiArai 10:1c0f58b9c048 167 void update_sensor(void const *args){ // No need to connect I2C line
kenjiArai 10:1c0f58b9c048 168 char cmd[2];
kenjiArai 10:1c0f58b9c048 169 uint8_t i = 0;
kenjiArai 10:1c0f58b9c048 170
kenjiArai 10:1c0f58b9c048 171 DEBUG_LINE
kenjiArai 10:1c0f58b9c048 172 osDelay(1000);
kenjiArai 10:1c0f58b9c048 173 i2c1.frequency(50000);
kenjiArai 4:76b3113c79ff 174 while (true) {
kenjiArai 4:76b3113c79ff 175 osEvent evt = queue0.get();
kenjiArai 4:76b3113c79ff 176 // ---->lock
kenjiArai 4:76b3113c79ff 177 i2c_mutex.lock();
kenjiArai 10:1c0f58b9c048 178 cmd[0] = 0x55;
kenjiArai 10:1c0f58b9c048 179 cmd[1] = 0xaa;
kenjiArai 10:1c0f58b9c048 180 i2c1.write(0xa4, cmd, 2);
kenjiArai 10:1c0f58b9c048 181 if (i2c1.read(0xa4, cmd, 2)){
kenjiArai 10:1c0f58b9c048 182 fa[0] = fa[1] = fa[2] = 1.11f + (++i / 100);
kenjiArai 10:1c0f58b9c048 183 fg[0] = fg[1] = fg[2] = 2.22f + (++i / 100);
kenjiArai 10:1c0f58b9c048 184 } else {
kenjiArai 10:1c0f58b9c048 185 fa[0] = fa[1] = fa[2] = -0.01f - (++i / 100);
kenjiArai 10:1c0f58b9c048 186 fg[0] = fg[1] = fg[2] = 0.01f + (++i / 100);
kenjiArai 10:1c0f58b9c048 187 }
kenjiArai 4:76b3113c79ff 188 // <----unlock
kenjiArai 4:76b3113c79ff 189 i2c_mutex.unlock();
kenjiArai 5:dccdaaa1e57b 190 // debug
kenjiArai 5:dccdaaa1e57b 191 task0 = !task0;
kenjiArai 10:1c0f58b9c048 192 osDelay(1000);
kenjiArai 4:76b3113c79ff 193 }
kenjiArai 4:76b3113c79ff 194 }
kenjiArai 4:76b3113c79ff 195
kenjiArai 4:76b3113c79ff 196 // Update sensor data
kenjiArai 10:1c0f58b9c048 197 void adc(void const *args){
kenjiArai 4:76b3113c79ff 198 while (true) {
kenjiArai 10:1c0f58b9c048 199 #if defined(TARGET_NUCLEO_L152RE)
kenjiArai 10:1c0f58b9c048 200 analog[0] = adc1.read();
kenjiArai 10:1c0f58b9c048 201 analog[1] = adc3.read();
kenjiArai 10:1c0f58b9c048 202 #else
kenjiArai 10:1c0f58b9c048 203 analog[0] = 1.2f;
kenjiArai 10:1c0f58b9c048 204 analog[1] = 3.4f;
kenjiArai 5:dccdaaa1e57b 205 #endif
kenjiArai 10:1c0f58b9c048 206 osDelay(500); // miliseconds
kenjiArai 5:dccdaaa1e57b 207 task1 = !task1;
kenjiArai 4:76b3113c79ff 208 }
kenjiArai 4:76b3113c79ff 209 }
kenjiArai 4:76b3113c79ff 210
kenjiArai 10:1c0f58b9c048 211 // Update sensor data
kenjiArai 10:1c0f58b9c048 212 void pwm_and_dac(void const *args){
kenjiArai 10:1c0f58b9c048 213 uint8_t i = 0;
kenjiArai 10:1c0f58b9c048 214 while (true) {
kenjiArai 10:1c0f58b9c048 215 #if defined(TARGET_NUCLEO_L152RE)
kenjiArai 10:1c0f58b9c048 216 dac0.write(out_data[i & 0x0f]);
kenjiArai 10:1c0f58b9c048 217 dac1.write(out_data[i & 0x0f]);
kenjiArai 10:1c0f58b9c048 218 #endif
kenjiArai 10:1c0f58b9c048 219 osDelay(500); // miliseconds
kenjiArai 10:1c0f58b9c048 220 i++;
kenjiArai 10:1c0f58b9c048 221 }
kenjiArai 10:1c0f58b9c048 222 }
kenjiArai 10:1c0f58b9c048 223
kenjiArai 4:76b3113c79ff 224 // Thread definition
kenjiArai 10:1c0f58b9c048 225 osThreadDef(update_sensor, osPriorityNormal, 1024);
kenjiArai 5:dccdaaa1e57b 226 osThreadDef(monitor, osPriorityNormal, 1024);
kenjiArai 8:4006b111c0d4 227 osThreadDef(watch_time, osPriorityNormal, 1024);
kenjiArai 10:1c0f58b9c048 228 osThreadDef(adc, osPriorityAboveNormal, 1024);
kenjiArai 10:1c0f58b9c048 229 osThreadDef(pwm_and_dac, osPriorityAboveNormal, 1024);
kenjiArai 4:76b3113c79ff 230
kenjiArai 4:76b3113c79ff 231 int main(void) {
kenjiArai 10:1c0f58b9c048 232 osDelay(1000); // wait 1sec
kenjiArai 10:1c0f58b9c048 233 // PUTS("\x1b[2J\x1b[H");
kenjiArai 10:1c0f58b9c048 234 PUTS("\r\nCreated on "__DATE__ " " __TIME__ " (UTC)\r\n""\r\n");
kenjiArai 10:1c0f58b9c048 235 DEBUG_LINE
kenjiArai 10:1c0f58b9c048 236 if (SetRTC(0) == 1) {
kenjiArai 10:1c0f58b9c048 237 PRINTF("Use External CLK (Good for RTC)\r\n");
kenjiArai 10:1c0f58b9c048 238 } else {
kenjiArai 10:1c0f58b9c048 239 PRINTF("Use Internal CLK (Bad for RTC)\r\n");
kenjiArai 10:1c0f58b9c048 240 }
kenjiArai 10:1c0f58b9c048 241 DEBUG_LINE
kenjiArai 10:1c0f58b9c048 242 time_enter_mode();
kenjiArai 10:1c0f58b9c048 243 DEBUG_LINE
kenjiArai 4:76b3113c79ff 244 RtosTimer led_1_timer(blink, osTimerPeriodic, (void *)0);
kenjiArai 4:76b3113c79ff 245 RtosTimer led_2_timer(blink, osTimerPeriodic, (void *)1);
kenjiArai 4:76b3113c79ff 246 RtosTimer led_3_timer(blink, osTimerPeriodic, (void *)2);
kenjiArai 10:1c0f58b9c048 247 DEBUG_LINE
kenjiArai 4:76b3113c79ff 248 led_1_timer.start(2000);
kenjiArai 4:76b3113c79ff 249 led_2_timer.start(1000);
kenjiArai 4:76b3113c79ff 250 led_3_timer.start(500);
kenjiArai 10:1c0f58b9c048 251 DEBUG_LINE
kenjiArai 4:76b3113c79ff 252 Thread thread(send_thread);
kenjiArai 10:1c0f58b9c048 253 DEBUG_LINE
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 10:1c0f58b9c048 258 DEBUG_LINE
kenjiArai 10:1c0f58b9c048 259 #if 0
kenjiArai 10:1c0f58b9c048 260 /// Create a thread and add it to Active Threads and set it to state READY
kenjiArai 10:1c0f58b9c048 261 osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument) {
kenjiArai 10:1c0f58b9c048 262 if (__exceptional_mode()) return NULL; // Not allowed in ISR
kenjiArai 10:1c0f58b9c048 263 if ((__get_mode() != MODE_USR) && (os_running == 0)) {
kenjiArai 10:1c0f58b9c048 264 // Privileged and not running
kenjiArai 10:1c0f58b9c048 265 return svcThreadCreate(thread_def, argument);
kenjiArai 10:1c0f58b9c048 266 } else {
kenjiArai 10:1c0f58b9c048 267 return __svcThreadCreate(thread_def, argument);
kenjiArai 10:1c0f58b9c048 268 }
kenjiArai 10:1c0f58b9c048 269 }
kenjiArai 10:1c0f58b9c048 270 #endif
kenjiArai 5:dccdaaa1e57b 271 // Starts threads
kenjiArai 10:1c0f58b9c048 272 if (osThreadCreate(osThread(monitor), NULL) == NULL){
kenjiArai 10:1c0f58b9c048 273 PRINTF("ERROR/monitor() thread\r\n");
kenjiArai 5:dccdaaa1e57b 274 }
kenjiArai 10:1c0f58b9c048 275 DEBUG_LINE
kenjiArai 10:1c0f58b9c048 276 if (osThreadCreate(osThread(update_sensor), NULL) == NULL){
kenjiArai 10:1c0f58b9c048 277 PRINTF("ERROR/update_sensor() thread\r\n");
kenjiArai 5:dccdaaa1e57b 278 }
kenjiArai 10:1c0f58b9c048 279 DEBUG_LINE
kenjiArai 8:4006b111c0d4 280 if (osThreadCreate(osThread(watch_time), NULL) == NULL){
kenjiArai 10:1c0f58b9c048 281 printf("ERROR/watch_time() thread\r\n");
kenjiArai 10:1c0f58b9c048 282 }
kenjiArai 10:1c0f58b9c048 283 DEBUG_LINE
kenjiArai 10:1c0f58b9c048 284 if (osThreadCreate(osThread(adc), NULL) == NULL){
kenjiArai 10:1c0f58b9c048 285 PRINTF("ERROR/print4com() therad\r\n");
kenjiArai 8:4006b111c0d4 286 }
kenjiArai 10:1c0f58b9c048 287 DEBUG_LINE
kenjiArai 10:1c0f58b9c048 288 if (osThreadCreate(osThread(pwm_and_dac), NULL) == NULL){
kenjiArai 10:1c0f58b9c048 289 PRINTF("ERROR/print4com() therad\r\n");
kenjiArai 10:1c0f58b9c048 290 }
kenjiArai 10:1c0f58b9c048 291 DEBUG_LINE
kenjiArai 5:dccdaaa1e57b 292 count = 0;
kenjiArai 10:1c0f58b9c048 293 DEBUG_LINE
kenjiArai 4:76b3113c79ff 294 while (true) {
kenjiArai 4:76b3113c79ff 295 osEvent evt = mail_box.get();
kenjiArai 10:1c0f58b9c048 296 //DEBUG_LINE
kenjiArai 4:76b3113c79ff 297 if (evt.status == osEventMail) {
kenjiArai 4:76b3113c79ff 298 mail_t *mail = (mail_t*)evt.value.p;
kenjiArai 8:4006b111c0d4 299 if (show_flag0){
kenjiArai 8:4006b111c0d4 300 PRINTF("[MAIN]\r\n");
kenjiArai 4:76b3113c79ff 301 PRINTF("This is dummy!, ");
kenjiArai 4:76b3113c79ff 302 PRINTF("Volt: %.2f V, " , mail->voltage);
kenjiArai 4:76b3113c79ff 303 PRINTF("Current: %.2f A, " , mail->current);
kenjiArai 4:76b3113c79ff 304 PRINTF("# of cycles: %u\r\n", mail->counter);
kenjiArai 4:76b3113c79ff 305 }
kenjiArai 4:76b3113c79ff 306 mail_box.free(mail);
kenjiArai 4:76b3113c79ff 307 }
kenjiArai 4:76b3113c79ff 308 }
kenjiArai 4:76b3113c79ff 309 }
kenjiArai 5:dccdaaa1e57b 310
kenjiArai 10:1c0f58b9c048 311 // rtos error routine
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 10:1c0f58b9c048 315 gpio_t led_2; gpio_init_out(&led_2, PC_10);
kenjiArai 10:1c0f58b9c048 316 gpio_t led_3; gpio_init_out(&led_3, PC_11);
kenjiArai 10:1c0f58b9c048 317 gpio_t led_4; gpio_init_out(&led_4, PC_12);
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 }