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:
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?

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 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 }