JGCtoGdT
Dependencies: ConfigFile MODSERIAL_uVision Watchdog mbed-rtos mbed
main.cpp@0:2e1b2d9fa0de, 2013-05-05 (annotated)
- Committer:
- JavierGC
- Date:
- Sun May 05 16:39:34 2013 +0000
- Revision:
- 0:2e1b2d9fa0de
JGCtoGdT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JavierGC | 0:2e1b2d9fa0de | 1 | #include "mbed.h" |
JavierGC | 0:2e1b2d9fa0de | 2 | #include "MODSERIAL.h" |
JavierGC | 0:2e1b2d9fa0de | 3 | #include "rtos.h" |
JavierGC | 0:2e1b2d9fa0de | 4 | #include "Watchdog.h" |
JavierGC | 0:2e1b2d9fa0de | 5 | #include "ConfigFile.h" |
JavierGC | 0:2e1b2d9fa0de | 6 | |
JavierGC | 0:2e1b2d9fa0de | 7 | Watchdog wd; |
JavierGC | 0:2e1b2d9fa0de | 8 | |
JavierGC | 0:2e1b2d9fa0de | 9 | extern "C" void mbed_reset(); |
JavierGC | 0:2e1b2d9fa0de | 10 | |
JavierGC | 0:2e1b2d9fa0de | 11 | char InitialMessage[50]; |
JavierGC | 0:2e1b2d9fa0de | 12 | |
JavierGC | 0:2e1b2d9fa0de | 13 | DigitalOut ledCAN1(LED1); |
JavierGC | 0:2e1b2d9fa0de | 14 | DigitalOut ledCAN2(LED2); |
JavierGC | 0:2e1b2d9fa0de | 15 | DigitalOut led3(LED3); |
JavierGC | 0:2e1b2d9fa0de | 16 | DigitalOut ledPC(LED4); |
JavierGC | 0:2e1b2d9fa0de | 17 | |
JavierGC | 0:2e1b2d9fa0de | 18 | |
JavierGC | 0:2e1b2d9fa0de | 19 | time_t ctTime; |
JavierGC | 0:2e1b2d9fa0de | 20 | struct tm * timeinfo; |
JavierGC | 0:2e1b2d9fa0de | 21 | |
JavierGC | 0:2e1b2d9fa0de | 22 | Ticker SpkTick; |
JavierGC | 0:2e1b2d9fa0de | 23 | Timer myT; |
JavierGC | 0:2e1b2d9fa0de | 24 | |
JavierGC | 0:2e1b2d9fa0de | 25 | |
JavierGC | 0:2e1b2d9fa0de | 26 | void LoadPCMail(char comm, char *mess); |
JavierGC | 0:2e1b2d9fa0de | 27 | |
JavierGC | 0:2e1b2d9fa0de | 28 | /************* Frequency ****************/ |
JavierGC | 0:2e1b2d9fa0de | 29 | InterruptIn Freq1(p15); |
JavierGC | 0:2e1b2d9fa0de | 30 | InterruptIn Freq2(p16); |
JavierGC | 0:2e1b2d9fa0de | 31 | InterruptIn Freq3(p17); |
JavierGC | 0:2e1b2d9fa0de | 32 | Timer F1; |
JavierGC | 0:2e1b2d9fa0de | 33 | Timer F2; |
JavierGC | 0:2e1b2d9fa0de | 34 | Timer F3; |
JavierGC | 0:2e1b2d9fa0de | 35 | |
JavierGC | 0:2e1b2d9fa0de | 36 | int Period1,Period2,Period3; |
JavierGC | 0:2e1b2d9fa0de | 37 | |
JavierGC | 0:2e1b2d9fa0de | 38 | void Freq1_Meas(void) |
JavierGC | 0:2e1b2d9fa0de | 39 | { |
JavierGC | 0:2e1b2d9fa0de | 40 | Period1=F1.read_us(); |
JavierGC | 0:2e1b2d9fa0de | 41 | F1.reset(); |
JavierGC | 0:2e1b2d9fa0de | 42 | } |
JavierGC | 0:2e1b2d9fa0de | 43 | void Freq2_Meas(void) |
JavierGC | 0:2e1b2d9fa0de | 44 | { |
JavierGC | 0:2e1b2d9fa0de | 45 | Period2=F2.read_us(); |
JavierGC | 0:2e1b2d9fa0de | 46 | F2.reset(); |
JavierGC | 0:2e1b2d9fa0de | 47 | } |
JavierGC | 0:2e1b2d9fa0de | 48 | void Freq3_Meas(void) |
JavierGC | 0:2e1b2d9fa0de | 49 | { |
JavierGC | 0:2e1b2d9fa0de | 50 | Period3=F3.read_us(); |
JavierGC | 0:2e1b2d9fa0de | 51 | F3.reset(); |
JavierGC | 0:2e1b2d9fa0de | 52 | } |
JavierGC | 0:2e1b2d9fa0de | 53 | /************* End Frequency ************/ |
JavierGC | 0:2e1b2d9fa0de | 54 | |
JavierGC | 0:2e1b2d9fa0de | 55 | /************* PWM ****************/ |
JavierGC | 0:2e1b2d9fa0de | 56 | PwmOut PwmO1(LED3); |
JavierGC | 0:2e1b2d9fa0de | 57 | /************* End PWM ************/ |
JavierGC | 0:2e1b2d9fa0de | 58 | |
JavierGC | 0:2e1b2d9fa0de | 59 | /************* CAN ***********************/ |
JavierGC | 0:2e1b2d9fa0de | 60 | #define CAN_MaxMailElements 16 |
JavierGC | 0:2e1b2d9fa0de | 61 | #define CANMessWait 1//ms |
JavierGC | 0:2e1b2d9fa0de | 62 | #define MessSizeCAN 128 |
JavierGC | 0:2e1b2d9fa0de | 63 | |
JavierGC | 0:2e1b2d9fa0de | 64 | typedef struct { |
JavierGC | 0:2e1b2d9fa0de | 65 | char command; /* command to execute */ |
JavierGC | 0:2e1b2d9fa0de | 66 | CANMessage mess; |
JavierGC | 0:2e1b2d9fa0de | 67 | } CAN_mail_t; |
JavierGC | 0:2e1b2d9fa0de | 68 | /************* CAN 1 *********************/ |
JavierGC | 0:2e1b2d9fa0de | 69 | CAN can1(p9,p10); |
JavierGC | 0:2e1b2d9fa0de | 70 | int CAN1Freq=1000000; |
JavierGC | 0:2e1b2d9fa0de | 71 | |
JavierGC | 0:2e1b2d9fa0de | 72 | Mail<CAN_mail_t, CAN_MaxMailElements> CAN1_mail; |
JavierGC | 0:2e1b2d9fa0de | 73 | int CAN1MailNum; |
JavierGC | 0:2e1b2d9fa0de | 74 | |
JavierGC | 0:2e1b2d9fa0de | 75 | void LoadCAN1Mail(char command, CANMessage mess) //para cargar mensajes de trabajo al proceso paralelo CAN1_thread_proc |
JavierGC | 0:2e1b2d9fa0de | 76 | { |
JavierGC | 0:2e1b2d9fa0de | 77 | while(CAN1MailNum>=CAN_MaxMailElements) { |
JavierGC | 0:2e1b2d9fa0de | 78 | Thread::wait(CANMessWait); |
JavierGC | 0:2e1b2d9fa0de | 79 | } |
JavierGC | 0:2e1b2d9fa0de | 80 | CAN_mail_t *mail = CAN1_mail.alloc(); |
JavierGC | 0:2e1b2d9fa0de | 81 | mail->command = command; |
JavierGC | 0:2e1b2d9fa0de | 82 | mail->mess=mess; |
JavierGC | 0:2e1b2d9fa0de | 83 | CAN1_mail.put(mail); |
JavierGC | 0:2e1b2d9fa0de | 84 | CAN1MailNum++; |
JavierGC | 0:2e1b2d9fa0de | 85 | } |
JavierGC | 0:2e1b2d9fa0de | 86 | |
JavierGC | 0:2e1b2d9fa0de | 87 | void messageFromCAN1() |
JavierGC | 0:2e1b2d9fa0de | 88 | { |
JavierGC | 0:2e1b2d9fa0de | 89 | ledCAN1=true; |
JavierGC | 0:2e1b2d9fa0de | 90 | CANMessage msg; |
JavierGC | 0:2e1b2d9fa0de | 91 | can1.read(msg); |
JavierGC | 0:2e1b2d9fa0de | 92 | LoadCAN1Mail(10,msg); |
JavierGC | 0:2e1b2d9fa0de | 93 | } |
JavierGC | 0:2e1b2d9fa0de | 94 | |
JavierGC | 0:2e1b2d9fa0de | 95 | void CAN1_thread_proc(void const *args) //proceso paralelo de gestión CAN1 |
JavierGC | 0:2e1b2d9fa0de | 96 | { |
JavierGC | 0:2e1b2d9fa0de | 97 | char tmp[MessSizeCAN]; |
JavierGC | 0:2e1b2d9fa0de | 98 | while(true) { |
JavierGC | 0:2e1b2d9fa0de | 99 | osEvent evt = CAN1_mail.get(osWaitForever); |
JavierGC | 0:2e1b2d9fa0de | 100 | if (evt.status == osEventMail) { |
JavierGC | 0:2e1b2d9fa0de | 101 | CAN_mail_t *mail = (CAN_mail_t*)evt.value.p; |
JavierGC | 0:2e1b2d9fa0de | 102 | |
JavierGC | 0:2e1b2d9fa0de | 103 | switch (mail->command) { |
JavierGC | 0:2e1b2d9fa0de | 104 | case 0: //request Reset CAN |
JavierGC | 0:2e1b2d9fa0de | 105 | can1.reset(); |
JavierGC | 0:2e1b2d9fa0de | 106 | LoadPCMail(1,"Reset CAN1"); |
JavierGC | 0:2e1b2d9fa0de | 107 | break; |
JavierGC | 0:2e1b2d9fa0de | 108 | case 1: //set frequency |
JavierGC | 0:2e1b2d9fa0de | 109 | can1.frequency(mail->mess.id); |
JavierGC | 0:2e1b2d9fa0de | 110 | LoadPCMail(1,"Set Frequency CAN1"); |
JavierGC | 0:2e1b2d9fa0de | 111 | break; |
JavierGC | 0:2e1b2d9fa0de | 112 | case 10: //Read from CAN |
JavierGC | 0:2e1b2d9fa0de | 113 | snprintf(tmp,MessSizeCAN,"ID=%i;TYPE=%i;FORMAT=%i;LEN=%d;DATA[0]=%u;DATA[1]=%u;DATA[2]=%u;DATA[3]=%u;DATA[4]=%u;DATA[5]=%u;DATA[6]=%u;DATA[7]=%u",mail->mess.id,mail->mess.type,mail->mess.format,mail->mess.len,mail->mess.data[0],mail->mess.data[1],mail->mess.data[2],mail->mess.data[3],mail->mess.data[4],mail->mess.data[5],mail->mess.data[6],mail->mess.data[7]); |
JavierGC | 0:2e1b2d9fa0de | 114 | LoadPCMail(2,tmp); |
JavierGC | 0:2e1b2d9fa0de | 115 | break; |
JavierGC | 0:2e1b2d9fa0de | 116 | case 20: //Write to CAN |
JavierGC | 0:2e1b2d9fa0de | 117 | can1.write(mail->mess); |
JavierGC | 0:2e1b2d9fa0de | 118 | LoadPCMail(1,"Write to CAN1"); |
JavierGC | 0:2e1b2d9fa0de | 119 | break; |
JavierGC | 0:2e1b2d9fa0de | 120 | default: // request to send message from code |
JavierGC | 0:2e1b2d9fa0de | 121 | break; |
JavierGC | 0:2e1b2d9fa0de | 122 | } |
JavierGC | 0:2e1b2d9fa0de | 123 | CAN1_mail.free(mail); |
JavierGC | 0:2e1b2d9fa0de | 124 | CAN1MailNum--; |
JavierGC | 0:2e1b2d9fa0de | 125 | ledCAN1=false; |
JavierGC | 0:2e1b2d9fa0de | 126 | } |
JavierGC | 0:2e1b2d9fa0de | 127 | } |
JavierGC | 0:2e1b2d9fa0de | 128 | } |
JavierGC | 0:2e1b2d9fa0de | 129 | /************* END CAN 1 ****************/ |
JavierGC | 0:2e1b2d9fa0de | 130 | /************* CAN 2 ********************/ |
JavierGC | 0:2e1b2d9fa0de | 131 | CAN can2(p30,p29); |
JavierGC | 0:2e1b2d9fa0de | 132 | int CAN2Freq=1000000; |
JavierGC | 0:2e1b2d9fa0de | 133 | |
JavierGC | 0:2e1b2d9fa0de | 134 | Mail<CAN_mail_t, CAN_MaxMailElements> CAN2_mail; |
JavierGC | 0:2e1b2d9fa0de | 135 | int CAN2MailNum; |
JavierGC | 0:2e1b2d9fa0de | 136 | |
JavierGC | 0:2e1b2d9fa0de | 137 | void LoadCAN2Mail(char command, CANMessage mess) //para cargar mensajes de trabajo al proceso paralelo CAN1_thread_proc |
JavierGC | 0:2e1b2d9fa0de | 138 | { |
JavierGC | 0:2e1b2d9fa0de | 139 | while(CAN2MailNum>=CAN_MaxMailElements) { |
JavierGC | 0:2e1b2d9fa0de | 140 | Thread::wait(CANMessWait); |
JavierGC | 0:2e1b2d9fa0de | 141 | } |
JavierGC | 0:2e1b2d9fa0de | 142 | CAN_mail_t *mail = CAN2_mail.alloc(); |
JavierGC | 0:2e1b2d9fa0de | 143 | mail->command = command; |
JavierGC | 0:2e1b2d9fa0de | 144 | mail->mess=mess; |
JavierGC | 0:2e1b2d9fa0de | 145 | CAN2_mail.put(mail); |
JavierGC | 0:2e1b2d9fa0de | 146 | CAN2MailNum++; |
JavierGC | 0:2e1b2d9fa0de | 147 | } |
JavierGC | 0:2e1b2d9fa0de | 148 | void messageFromCAN2() |
JavierGC | 0:2e1b2d9fa0de | 149 | { |
JavierGC | 0:2e1b2d9fa0de | 150 | ledCAN2=true; |
JavierGC | 0:2e1b2d9fa0de | 151 | CANMessage msg; |
JavierGC | 0:2e1b2d9fa0de | 152 | can2.read(msg); |
JavierGC | 0:2e1b2d9fa0de | 153 | LoadCAN2Mail(10,msg); |
JavierGC | 0:2e1b2d9fa0de | 154 | } |
JavierGC | 0:2e1b2d9fa0de | 155 | void CAN2_thread_proc(void const *args) //proceso paralelo de gestión CAN1 |
JavierGC | 0:2e1b2d9fa0de | 156 | { |
JavierGC | 0:2e1b2d9fa0de | 157 | char tmp[MessSizeCAN]; |
JavierGC | 0:2e1b2d9fa0de | 158 | while(true) { |
JavierGC | 0:2e1b2d9fa0de | 159 | osEvent evt = CAN2_mail.get(osWaitForever); |
JavierGC | 0:2e1b2d9fa0de | 160 | if (evt.status == osEventMail) { |
JavierGC | 0:2e1b2d9fa0de | 161 | CAN_mail_t *mail = (CAN_mail_t*)evt.value.p; |
JavierGC | 0:2e1b2d9fa0de | 162 | |
JavierGC | 0:2e1b2d9fa0de | 163 | switch (mail->command) { |
JavierGC | 0:2e1b2d9fa0de | 164 | case 0: //request Reset CAN |
JavierGC | 0:2e1b2d9fa0de | 165 | can2.reset(); |
JavierGC | 0:2e1b2d9fa0de | 166 | LoadPCMail(1,"Reset CAN2"); |
JavierGC | 0:2e1b2d9fa0de | 167 | break; |
JavierGC | 0:2e1b2d9fa0de | 168 | case 1: //set frequency |
JavierGC | 0:2e1b2d9fa0de | 169 | can2.frequency(mail->mess.id); |
JavierGC | 0:2e1b2d9fa0de | 170 | LoadPCMail(1,"Set Frequency CAN2"); |
JavierGC | 0:2e1b2d9fa0de | 171 | break; |
JavierGC | 0:2e1b2d9fa0de | 172 | case 10: //Read from CAN |
JavierGC | 0:2e1b2d9fa0de | 173 | snprintf(tmp,MessSizeCAN,"ID=%i;TYPE=%i;FORMAT=%i;LEN=%d;DATA[0]=%u;DATA[1]=%u;DATA[2]=%u;DATA[3]=%u;DATA[4]=%u;DATA[5]=%u;DATA[6]=%u;DATA[7]=%u",mail->mess.id,mail->mess.type,mail->mess.format,mail->mess.len,mail->mess.data[0],mail->mess.data[1],mail->mess.data[2],mail->mess.data[3],mail->mess.data[4],mail->mess.data[5],mail->mess.data[6],mail->mess.data[7]); |
JavierGC | 0:2e1b2d9fa0de | 174 | LoadPCMail(3,tmp); |
JavierGC | 0:2e1b2d9fa0de | 175 | break; |
JavierGC | 0:2e1b2d9fa0de | 176 | case 20: //Write to CAN |
JavierGC | 0:2e1b2d9fa0de | 177 | can2.write(mail->mess); |
JavierGC | 0:2e1b2d9fa0de | 178 | LoadPCMail(1,"Write to CAN2"); |
JavierGC | 0:2e1b2d9fa0de | 179 | break; |
JavierGC | 0:2e1b2d9fa0de | 180 | default: // request to send message from code |
JavierGC | 0:2e1b2d9fa0de | 181 | break; |
JavierGC | 0:2e1b2d9fa0de | 182 | } |
JavierGC | 0:2e1b2d9fa0de | 183 | CAN2_mail.free(mail); |
JavierGC | 0:2e1b2d9fa0de | 184 | CAN2MailNum--; |
JavierGC | 0:2e1b2d9fa0de | 185 | ledCAN2=false; |
JavierGC | 0:2e1b2d9fa0de | 186 | } |
JavierGC | 0:2e1b2d9fa0de | 187 | } |
JavierGC | 0:2e1b2d9fa0de | 188 | } |
JavierGC | 0:2e1b2d9fa0de | 189 | /************* END CAN 2 ****************/ |
JavierGC | 0:2e1b2d9fa0de | 190 | /************* END CAN ******************/ |
JavierGC | 0:2e1b2d9fa0de | 191 | |
JavierGC | 0:2e1b2d9fa0de | 192 | /************* RS232 PC ******************/ |
JavierGC | 0:2e1b2d9fa0de | 193 | #define TxBuffer_NumMess 16 |
JavierGC | 0:2e1b2d9fa0de | 194 | #define RxBuffer_NumMess 16 |
JavierGC | 0:2e1b2d9fa0de | 195 | #define MessSizePC 128 |
JavierGC | 0:2e1b2d9fa0de | 196 | #define TxBuffer TxBuffer_NumMess*MessSizePC |
JavierGC | 0:2e1b2d9fa0de | 197 | #define RxBuffer RxBuffer_NumMess*MessSizePC |
JavierGC | 0:2e1b2d9fa0de | 198 | #define PC_MaxMailElements 16 |
JavierGC | 0:2e1b2d9fa0de | 199 | #define PCMessWait MessSizePC*10/9.6 //ms |
JavierGC | 0:2e1b2d9fa0de | 200 | |
JavierGC | 0:2e1b2d9fa0de | 201 | MODSERIAL pc(USBTX, USBRX,TxBuffer,RxBuffer); |
JavierGC | 0:2e1b2d9fa0de | 202 | bool LOGPC; |
JavierGC | 0:2e1b2d9fa0de | 203 | int BaudRate; |
JavierGC | 0:2e1b2d9fa0de | 204 | double TxBufferWait; |
JavierGC | 0:2e1b2d9fa0de | 205 | char ChEnd; |
JavierGC | 0:2e1b2d9fa0de | 206 | |
JavierGC | 0:2e1b2d9fa0de | 207 | typedef struct { |
JavierGC | 0:2e1b2d9fa0de | 208 | char command; /* command to execute */ |
JavierGC | 0:2e1b2d9fa0de | 209 | char message[MessSizePC]; /* arguments */ |
JavierGC | 0:2e1b2d9fa0de | 210 | } PC_mail_t; |
JavierGC | 0:2e1b2d9fa0de | 211 | |
JavierGC | 0:2e1b2d9fa0de | 212 | Mail<PC_mail_t, PC_MaxMailElements> PC_mail; |
JavierGC | 0:2e1b2d9fa0de | 213 | int PCMailNum; |
JavierGC | 0:2e1b2d9fa0de | 214 | |
JavierGC | 0:2e1b2d9fa0de | 215 | void TLogSTR(char *Tstr) |
JavierGC | 0:2e1b2d9fa0de | 216 | { |
JavierGC | 0:2e1b2d9fa0de | 217 | ctTime = time(NULL); |
JavierGC | 0:2e1b2d9fa0de | 218 | timeinfo = localtime ( &ctTime ); |
JavierGC | 0:2e1b2d9fa0de | 219 | timeinfo->tm_hour=(timeinfo->tm_hour+1)%24; |
JavierGC | 0:2e1b2d9fa0de | 220 | strftime (Tstr,MessSizePC,"%H:%M:%S",timeinfo); |
JavierGC | 0:2e1b2d9fa0de | 221 | } |
JavierGC | 0:2e1b2d9fa0de | 222 | |
JavierGC | 0:2e1b2d9fa0de | 223 | void LoadPCMail(char comm, char *mess) //para cargar mensajes de trabajo al proceso paralelo ComPC_thread_proc |
JavierGC | 0:2e1b2d9fa0de | 224 | { |
JavierGC | 0:2e1b2d9fa0de | 225 | while(PCMailNum>=PC_MaxMailElements) { |
JavierGC | 0:2e1b2d9fa0de | 226 | Thread::wait(PCMessWait); |
JavierGC | 0:2e1b2d9fa0de | 227 | } |
JavierGC | 0:2e1b2d9fa0de | 228 | if(comm!=1 || LOGPC) { |
JavierGC | 0:2e1b2d9fa0de | 229 | PC_mail_t *mail = PC_mail.alloc(); |
JavierGC | 0:2e1b2d9fa0de | 230 | mail->command = comm; |
JavierGC | 0:2e1b2d9fa0de | 231 | snprintf(mail->message,MessSizePC,"%s",mess); |
JavierGC | 0:2e1b2d9fa0de | 232 | PC_mail.put(mail); |
JavierGC | 0:2e1b2d9fa0de | 233 | PCMailNum++; |
JavierGC | 0:2e1b2d9fa0de | 234 | } |
JavierGC | 0:2e1b2d9fa0de | 235 | } |
JavierGC | 0:2e1b2d9fa0de | 236 | |
JavierGC | 0:2e1b2d9fa0de | 237 | void messageFromPC(MODSERIAL_IRQ_INFO *q) //trabajo solicitado desde PC |
JavierGC | 0:2e1b2d9fa0de | 238 | { |
JavierGC | 0:2e1b2d9fa0de | 239 | ledPC=true; |
JavierGC | 0:2e1b2d9fa0de | 240 | MODSERIAL *sys = q->serial; |
JavierGC | 0:2e1b2d9fa0de | 241 | char temp[MessSizePC]; |
JavierGC | 0:2e1b2d9fa0de | 242 | |
JavierGC | 0:2e1b2d9fa0de | 243 | int i=sys->move(temp,MessSizePC,ChEnd); |
JavierGC | 0:2e1b2d9fa0de | 244 | if (temp[i-2]=='\r') { |
JavierGC | 0:2e1b2d9fa0de | 245 | i-=2; |
JavierGC | 0:2e1b2d9fa0de | 246 | } else { |
JavierGC | 0:2e1b2d9fa0de | 247 | i-=1; |
JavierGC | 0:2e1b2d9fa0de | 248 | } |
JavierGC | 0:2e1b2d9fa0de | 249 | temp[i]=0; |
JavierGC | 0:2e1b2d9fa0de | 250 | LoadPCMail(0,temp); |
JavierGC | 0:2e1b2d9fa0de | 251 | } |
JavierGC | 0:2e1b2d9fa0de | 252 | |
JavierGC | 0:2e1b2d9fa0de | 253 | int ComPC_Write(char *mess) //sólo para usarse en ComPC_thread_proc |
JavierGC | 0:2e1b2d9fa0de | 254 | { |
JavierGC | 0:2e1b2d9fa0de | 255 | int i=strlen(mess); |
JavierGC | 0:2e1b2d9fa0de | 256 | if(i>0) { |
JavierGC | 0:2e1b2d9fa0de | 257 | while((TxBuffer-pc.txBufferGetCount())<i) { |
JavierGC | 0:2e1b2d9fa0de | 258 | Thread::wait(TxBufferWait); |
JavierGC | 0:2e1b2d9fa0de | 259 | } |
JavierGC | 0:2e1b2d9fa0de | 260 | return pc.printf(mess); |
JavierGC | 0:2e1b2d9fa0de | 261 | } |
JavierGC | 0:2e1b2d9fa0de | 262 | return 0; |
JavierGC | 0:2e1b2d9fa0de | 263 | } |
JavierGC | 0:2e1b2d9fa0de | 264 | |
JavierGC | 0:2e1b2d9fa0de | 265 | void ComPC_thread_proc(void const *args) //proceso paralelo de gestión PC: tareas solicitadas y envío a PC |
JavierGC | 0:2e1b2d9fa0de | 266 | { |
JavierGC | 0:2e1b2d9fa0de | 267 | |
JavierGC | 0:2e1b2d9fa0de | 268 | while(true) { |
JavierGC | 0:2e1b2d9fa0de | 269 | osEvent evt = PC_mail.get(osWaitForever); |
JavierGC | 0:2e1b2d9fa0de | 270 | if (evt.status == osEventMail) { |
JavierGC | 0:2e1b2d9fa0de | 271 | PC_mail_t *mail = (PC_mail_t*)evt.value.p; |
JavierGC | 0:2e1b2d9fa0de | 272 | |
JavierGC | 0:2e1b2d9fa0de | 273 | char mess[MessSizePC]; |
JavierGC | 0:2e1b2d9fa0de | 274 | char Tstr[20]; |
JavierGC | 0:2e1b2d9fa0de | 275 | TLogSTR(Tstr); |
JavierGC | 0:2e1b2d9fa0de | 276 | switch (mail->command) { |
JavierGC | 0:2e1b2d9fa0de | 277 | case 0: //request from PC |
JavierGC | 0:2e1b2d9fa0de | 278 | CANMessage CanMess; |
JavierGC | 0:2e1b2d9fa0de | 279 | switch (mail->message[0]) { |
JavierGC | 0:2e1b2d9fa0de | 280 | case 'T': |
JavierGC | 0:2e1b2d9fa0de | 281 | float seconds; |
JavierGC | 0:2e1b2d9fa0de | 282 | sscanf(&mail->message[1],"%f",&seconds); |
JavierGC | 0:2e1b2d9fa0de | 283 | set_time((double)seconds); |
JavierGC | 0:2e1b2d9fa0de | 284 | time_t ctTime; |
JavierGC | 0:2e1b2d9fa0de | 285 | ctTime = time(NULL); |
JavierGC | 0:2e1b2d9fa0de | 286 | snprintf(mess,MessSizePC,"%s",ctime(&ctTime)); |
JavierGC | 0:2e1b2d9fa0de | 287 | LoadPCMail(1,mess); |
JavierGC | 0:2e1b2d9fa0de | 288 | break; |
JavierGC | 0:2e1b2d9fa0de | 289 | case 'C': //CAN |
JavierGC | 0:2e1b2d9fa0de | 290 | switch (mail->message[1]) { |
JavierGC | 0:2e1b2d9fa0de | 291 | case '1': //CAN1, Send from PC a Message to CAN1 |
JavierGC | 0:2e1b2d9fa0de | 292 | switch (mail->message[2]) { |
JavierGC | 0:2e1b2d9fa0de | 293 | case 'R': //reset CAN |
JavierGC | 0:2e1b2d9fa0de | 294 | LoadCAN1Mail(0,CanMess); |
JavierGC | 0:2e1b2d9fa0de | 295 | snprintf (mess,MessSizePC,"ACK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 296 | break; |
JavierGC | 0:2e1b2d9fa0de | 297 | case 'F': //set Frequency CAN |
JavierGC | 0:2e1b2d9fa0de | 298 | sscanf(&mail->message[3],"%i",&CanMess.id); |
JavierGC | 0:2e1b2d9fa0de | 299 | LoadCAN1Mail(1,CanMess); |
JavierGC | 0:2e1b2d9fa0de | 300 | snprintf (mess,MessSizePC,"ACK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 301 | break; |
JavierGC | 0:2e1b2d9fa0de | 302 | case 'W': //Write CAN |
JavierGC | 0:2e1b2d9fa0de | 303 | sscanf(&mail->message[3],"%i;%i;%i;%u;%u;%u;%u;%u;%u;%u;%u;%u",&CanMess.id,&CanMess.type,&CanMess.format,&CanMess.len,&CanMess.data[0],&CanMess.data[1],&CanMess.data[2],&CanMess.data[3],&CanMess.data[4],&CanMess.data[5],&CanMess.data[6],&CanMess.data[7]); |
JavierGC | 0:2e1b2d9fa0de | 304 | LoadCAN1Mail(20,CanMess); |
JavierGC | 0:2e1b2d9fa0de | 305 | snprintf (mess,MessSizePC,"ACK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 306 | break; |
JavierGC | 0:2e1b2d9fa0de | 307 | default: |
JavierGC | 0:2e1b2d9fa0de | 308 | snprintf (mess,MessSizePC,"NAK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 309 | break; |
JavierGC | 0:2e1b2d9fa0de | 310 | } |
JavierGC | 0:2e1b2d9fa0de | 311 | break; |
JavierGC | 0:2e1b2d9fa0de | 312 | case '2': //CAN2, Send from PC a Message to CAN2 |
JavierGC | 0:2e1b2d9fa0de | 313 | switch (mail->message[2]) { |
JavierGC | 0:2e1b2d9fa0de | 314 | case 'R': //reset CAN |
JavierGC | 0:2e1b2d9fa0de | 315 | LoadCAN2Mail(0,CanMess); |
JavierGC | 0:2e1b2d9fa0de | 316 | snprintf (mess,MessSizePC,"ACK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 317 | break; |
JavierGC | 0:2e1b2d9fa0de | 318 | case 'F': //set Frequency CAN |
JavierGC | 0:2e1b2d9fa0de | 319 | sscanf(&mail->message[3],"%i",&CanMess.id); |
JavierGC | 0:2e1b2d9fa0de | 320 | LoadCAN2Mail(1,CanMess); |
JavierGC | 0:2e1b2d9fa0de | 321 | snprintf (mess,MessSizePC,"ACK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 322 | break; |
JavierGC | 0:2e1b2d9fa0de | 323 | case 'W': //Write CAN |
JavierGC | 0:2e1b2d9fa0de | 324 | sscanf(&mail->message[3],"%i;%i;%i;%u;%u;%u;%u;%u;%u;%u;%u;%u",&CanMess.id,&CanMess.type,&CanMess.format,&CanMess.len,&CanMess.data[0],&CanMess.data[1],&CanMess.data[2],&CanMess.data[3],&CanMess.data[4],&CanMess.data[5],&CanMess.data[6],&CanMess.data[7]); |
JavierGC | 0:2e1b2d9fa0de | 325 | LoadCAN2Mail(20,CanMess); |
JavierGC | 0:2e1b2d9fa0de | 326 | snprintf (mess,MessSizePC,"ACK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 327 | break; |
JavierGC | 0:2e1b2d9fa0de | 328 | default: |
JavierGC | 0:2e1b2d9fa0de | 329 | snprintf (mess,MessSizePC,"NAK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 330 | break; |
JavierGC | 0:2e1b2d9fa0de | 331 | } |
JavierGC | 0:2e1b2d9fa0de | 332 | break; |
JavierGC | 0:2e1b2d9fa0de | 333 | default: |
JavierGC | 0:2e1b2d9fa0de | 334 | snprintf (mess,MessSizePC,"NAK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 335 | break; |
JavierGC | 0:2e1b2d9fa0de | 336 | } |
JavierGC | 0:2e1b2d9fa0de | 337 | break; |
JavierGC | 0:2e1b2d9fa0de | 338 | case 'F': //Frequencies |
JavierGC | 0:2e1b2d9fa0de | 339 | switch (mail->message[1]) { |
JavierGC | 0:2e1b2d9fa0de | 340 | case '1': //Freq1, Get Freq11 |
JavierGC | 0:2e1b2d9fa0de | 341 | snprintf(mess,MessSizePC,"F1= %i usec\r\n",Period1); |
JavierGC | 0:2e1b2d9fa0de | 342 | break; |
JavierGC | 0:2e1b2d9fa0de | 343 | case '2': //Freq2, Get Freq2 |
JavierGC | 0:2e1b2d9fa0de | 344 | snprintf(mess,MessSizePC,"F2= %i usec\r\n",Period2); |
JavierGC | 0:2e1b2d9fa0de | 345 | break; |
JavierGC | 0:2e1b2d9fa0de | 346 | case '3': //Freq3, Get Freq3 |
JavierGC | 0:2e1b2d9fa0de | 347 | snprintf(mess,MessSizePC,"F3= %i usec\r\n",Period3); |
JavierGC | 0:2e1b2d9fa0de | 348 | break; |
JavierGC | 0:2e1b2d9fa0de | 349 | default: |
JavierGC | 0:2e1b2d9fa0de | 350 | snprintf (mess,MessSizePC,"NAK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 351 | break; |
JavierGC | 0:2e1b2d9fa0de | 352 | } |
JavierGC | 0:2e1b2d9fa0de | 353 | break; |
JavierGC | 0:2e1b2d9fa0de | 354 | case 'P': |
JavierGC | 0:2e1b2d9fa0de | 355 | float duty=0; |
JavierGC | 0:2e1b2d9fa0de | 356 | int periodus=0; |
JavierGC | 0:2e1b2d9fa0de | 357 | switch (mail->message[1]) { |
JavierGC | 0:2e1b2d9fa0de | 358 | case '1': |
JavierGC | 0:2e1b2d9fa0de | 359 | sscanf(&mail->message[2],"%f;%i",&duty,&periodus); |
JavierGC | 0:2e1b2d9fa0de | 360 | PwmO1.write(duty); |
JavierGC | 0:2e1b2d9fa0de | 361 | PwmO1.period_us(periodus); |
JavierGC | 0:2e1b2d9fa0de | 362 | snprintf (mess,MessSizePC,"ACK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 363 | break; |
JavierGC | 0:2e1b2d9fa0de | 364 | default: |
JavierGC | 0:2e1b2d9fa0de | 365 | snprintf (mess,MessSizePC,"NAK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 366 | break; |
JavierGC | 0:2e1b2d9fa0de | 367 | } |
JavierGC | 0:2e1b2d9fa0de | 368 | break; |
JavierGC | 0:2e1b2d9fa0de | 369 | case 'R': |
JavierGC | 0:2e1b2d9fa0de | 370 | if(strcmp(mail->message,"REBOOT")==0) { |
JavierGC | 0:2e1b2d9fa0de | 371 | mbed_reset();//wd.Configure(2.0); |
JavierGC | 0:2e1b2d9fa0de | 372 | } else { |
JavierGC | 0:2e1b2d9fa0de | 373 | snprintf (mess,MessSizePC,"NAK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 374 | } |
JavierGC | 0:2e1b2d9fa0de | 375 | break; |
JavierGC | 0:2e1b2d9fa0de | 376 | case 'r': |
JavierGC | 0:2e1b2d9fa0de | 377 | if(strcmp(mail->message,"reboot")==0) { |
JavierGC | 0:2e1b2d9fa0de | 378 | mbed_reset();//wd.Configure(2.0); |
JavierGC | 0:2e1b2d9fa0de | 379 | } else { |
JavierGC | 0:2e1b2d9fa0de | 380 | snprintf (mess,MessSizePC,"NAK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 381 | } |
JavierGC | 0:2e1b2d9fa0de | 382 | break; |
JavierGC | 0:2e1b2d9fa0de | 383 | default: |
JavierGC | 0:2e1b2d9fa0de | 384 | snprintf (mess,MessSizePC,"NAK(%s):%s\r\n",Tstr, mail->message); |
JavierGC | 0:2e1b2d9fa0de | 385 | break; |
JavierGC | 0:2e1b2d9fa0de | 386 | } |
JavierGC | 0:2e1b2d9fa0de | 387 | break; |
JavierGC | 0:2e1b2d9fa0de | 388 | case 1: //Send LOG to PC |
JavierGC | 0:2e1b2d9fa0de | 389 | if(LOGPC) { |
JavierGC | 0:2e1b2d9fa0de | 390 | snprintf(mess,MessSizePC,"LOG(%s):%s\r\n",Tstr ,mail->message); |
JavierGC | 0:2e1b2d9fa0de | 391 | } else { |
JavierGC | 0:2e1b2d9fa0de | 392 | mess[0]=0; |
JavierGC | 0:2e1b2d9fa0de | 393 | } |
JavierGC | 0:2e1b2d9fa0de | 394 | break; |
JavierGC | 0:2e1b2d9fa0de | 395 | case 2: //Send to PC a Message from CAN1 |
JavierGC | 0:2e1b2d9fa0de | 396 | snprintf(mess,MessSizePC,"CAN1:%s\r\n",mail->message); |
JavierGC | 0:2e1b2d9fa0de | 397 | break; |
JavierGC | 0:2e1b2d9fa0de | 398 | case 3: //Send to PC a Message from CAN2 |
JavierGC | 0:2e1b2d9fa0de | 399 | snprintf(mess,MessSizePC,"CAN2:%s\r\n",mail->message); |
JavierGC | 0:2e1b2d9fa0de | 400 | break; |
JavierGC | 0:2e1b2d9fa0de | 401 | default: |
JavierGC | 0:2e1b2d9fa0de | 402 | break; |
JavierGC | 0:2e1b2d9fa0de | 403 | } |
JavierGC | 0:2e1b2d9fa0de | 404 | PC_mail.free(mail); |
JavierGC | 0:2e1b2d9fa0de | 405 | PCMailNum--; |
JavierGC | 0:2e1b2d9fa0de | 406 | ledPC=false; |
JavierGC | 0:2e1b2d9fa0de | 407 | ComPC_Write(mess); |
JavierGC | 0:2e1b2d9fa0de | 408 | } |
JavierGC | 0:2e1b2d9fa0de | 409 | } |
JavierGC | 0:2e1b2d9fa0de | 410 | } |
JavierGC | 0:2e1b2d9fa0de | 411 | /************* END RS232 PC **************/ |
JavierGC | 0:2e1b2d9fa0de | 412 | |
JavierGC | 0:2e1b2d9fa0de | 413 | void GetConfig() |
JavierGC | 0:2e1b2d9fa0de | 414 | { |
JavierGC | 0:2e1b2d9fa0de | 415 | |
JavierGC | 0:2e1b2d9fa0de | 416 | #define CfgNumParam 6 |
JavierGC | 0:2e1b2d9fa0de | 417 | #define CfgSizeParam 50 |
JavierGC | 0:2e1b2d9fa0de | 418 | |
JavierGC | 0:2e1b2d9fa0de | 419 | pc.format(8,Serial::Even,1); |
JavierGC | 0:2e1b2d9fa0de | 420 | pc.baud(115200); |
JavierGC | 0:2e1b2d9fa0de | 421 | ConfigFile cfg; |
JavierGC | 0:2e1b2d9fa0de | 422 | LocalFileSystem local("local"); |
JavierGC | 0:2e1b2d9fa0de | 423 | |
JavierGC | 0:2e1b2d9fa0de | 424 | int i; |
JavierGC | 0:2e1b2d9fa0de | 425 | char value[CfgNumParam][CfgSizeParam]; |
JavierGC | 0:2e1b2d9fa0de | 426 | char CfgK[CfgNumParam][CfgSizeParam]= {"InitialMessage","BaudRate","ChEnd","LOGPC","CAN1Freq","CAN2Freq"}; |
JavierGC | 0:2e1b2d9fa0de | 427 | |
JavierGC | 0:2e1b2d9fa0de | 428 | pc.printf("\r\n* * *\r\n* * *\r\n"); |
JavierGC | 0:2e1b2d9fa0de | 429 | |
JavierGC | 0:2e1b2d9fa0de | 430 | if (!cfg.read("/local/config.cfg")) { |
JavierGC | 0:2e1b2d9fa0de | 431 | error("\r\nFailure to read a configuration file"); |
JavierGC | 0:2e1b2d9fa0de | 432 | } |
JavierGC | 0:2e1b2d9fa0de | 433 | char Tstr[10]; |
JavierGC | 0:2e1b2d9fa0de | 434 | for (i=0; i<CfgNumParam; i++) { |
JavierGC | 0:2e1b2d9fa0de | 435 | if (cfg.getValue(CfgK[i], &value[i][0], sizeof(value[i]))) { |
JavierGC | 0:2e1b2d9fa0de | 436 | TLogSTR(Tstr); |
JavierGC | 0:2e1b2d9fa0de | 437 | pc.printf("CFG_Param(%s): '%s'='%s'\r\n", Tstr,CfgK[i], value[i]); |
JavierGC | 0:2e1b2d9fa0de | 438 | } else { |
JavierGC | 0:2e1b2d9fa0de | 439 | error("Failure Reading '%s'\r\n", CfgK[i]); |
JavierGC | 0:2e1b2d9fa0de | 440 | } |
JavierGC | 0:2e1b2d9fa0de | 441 | } |
JavierGC | 0:2e1b2d9fa0de | 442 | strcpy(InitialMessage,value[0]); |
JavierGC | 0:2e1b2d9fa0de | 443 | BaudRate=atoi(value[1]); |
JavierGC | 0:2e1b2d9fa0de | 444 | ChEnd=(char)atoi(value[2]); |
JavierGC | 0:2e1b2d9fa0de | 445 | LOGPC=(bool)atoi(value[3]); |
JavierGC | 0:2e1b2d9fa0de | 446 | CAN1Freq=atoi(value[4]); |
JavierGC | 0:2e1b2d9fa0de | 447 | CAN2Freq=atoi(value[5]); |
JavierGC | 0:2e1b2d9fa0de | 448 | |
JavierGC | 0:2e1b2d9fa0de | 449 | TxBufferWait= 10000*MessSizePC/BaudRate; |
JavierGC | 0:2e1b2d9fa0de | 450 | |
JavierGC | 0:2e1b2d9fa0de | 451 | pc.printf("* * *\r\n* * *\r\n"); |
JavierGC | 0:2e1b2d9fa0de | 452 | |
JavierGC | 0:2e1b2d9fa0de | 453 | while(!pc.txBufferEmpty()) { |
JavierGC | 0:2e1b2d9fa0de | 454 | Thread::wait(100); |
JavierGC | 0:2e1b2d9fa0de | 455 | }; |
JavierGC | 0:2e1b2d9fa0de | 456 | } |
JavierGC | 0:2e1b2d9fa0de | 457 | |
JavierGC | 0:2e1b2d9fa0de | 458 | int main() |
JavierGC | 0:2e1b2d9fa0de | 459 | { |
JavierGC | 0:2e1b2d9fa0de | 460 | |
JavierGC | 0:2e1b2d9fa0de | 461 | //char tempMessPC[MessSizePC]; |
JavierGC | 0:2e1b2d9fa0de | 462 | PCMailNum=0; |
JavierGC | 0:2e1b2d9fa0de | 463 | GetConfig(); |
JavierGC | 0:2e1b2d9fa0de | 464 | |
JavierGC | 0:2e1b2d9fa0de | 465 | // ************ PC ^^^^^^^^^^^^^ |
JavierGC | 0:2e1b2d9fa0de | 466 | pc.baud(BaudRate); |
JavierGC | 0:2e1b2d9fa0de | 467 | Thread ComPC_thread (ComPC_thread_proc,NULL,osPriorityBelowNormal); |
JavierGC | 0:2e1b2d9fa0de | 468 | pc.attach(&messageFromPC, MODSERIAL::RxAutoDetect); |
JavierGC | 0:2e1b2d9fa0de | 469 | pc.autoDetectChar(ChEnd); |
JavierGC | 0:2e1b2d9fa0de | 470 | |
JavierGC | 0:2e1b2d9fa0de | 471 | // ************ PC_end ^^^^^^^^^^^^^ |
JavierGC | 0:2e1b2d9fa0de | 472 | |
JavierGC | 0:2e1b2d9fa0de | 473 | LoadPCMail(1,""); |
JavierGC | 0:2e1b2d9fa0de | 474 | LoadPCMail(1,""); |
JavierGC | 0:2e1b2d9fa0de | 475 | LoadPCMail(1,""); |
JavierGC | 0:2e1b2d9fa0de | 476 | LoadPCMail(1,"*****************************"); |
JavierGC | 0:2e1b2d9fa0de | 477 | LoadPCMail(1,InitialMessage); |
JavierGC | 0:2e1b2d9fa0de | 478 | LoadPCMail(1,"*****************************"); |
JavierGC | 0:2e1b2d9fa0de | 479 | LoadPCMail(1,""); |
JavierGC | 0:2e1b2d9fa0de | 480 | LoadPCMail(1,""); |
JavierGC | 0:2e1b2d9fa0de | 481 | LoadPCMail(1,""); |
JavierGC | 0:2e1b2d9fa0de | 482 | |
JavierGC | 0:2e1b2d9fa0de | 483 | // ************ CAN1 ^^^^^^^^^^^ |
JavierGC | 0:2e1b2d9fa0de | 484 | Thread CAN1_thread (CAN1_thread_proc,NULL,osPriorityNormal); |
JavierGC | 0:2e1b2d9fa0de | 485 | can1.frequency(CAN1Freq); |
JavierGC | 0:2e1b2d9fa0de | 486 | can1.attach(&messageFromCAN1); |
JavierGC | 0:2e1b2d9fa0de | 487 | // ************ CAN1_end ^^^^^^^ |
JavierGC | 0:2e1b2d9fa0de | 488 | |
JavierGC | 0:2e1b2d9fa0de | 489 | // ************ CAN2 ^^^^^^^^^^^ |
JavierGC | 0:2e1b2d9fa0de | 490 | Thread CAN2_thread (CAN2_thread_proc,NULL,osPriorityNormal); |
JavierGC | 0:2e1b2d9fa0de | 491 | can2.frequency(CAN2Freq); |
JavierGC | 0:2e1b2d9fa0de | 492 | can2.attach(&messageFromCAN2); |
JavierGC | 0:2e1b2d9fa0de | 493 | // ************ CAN2_end ^^^^^^^ |
JavierGC | 0:2e1b2d9fa0de | 494 | |
JavierGC | 0:2e1b2d9fa0de | 495 | // ************ WD ************* |
JavierGC | 0:2e1b2d9fa0de | 496 | wd.WatchdogCausedReset(); |
JavierGC | 0:2e1b2d9fa0de | 497 | wd.Configure(5.0); |
JavierGC | 0:2e1b2d9fa0de | 498 | // ************ WD_end ********* |
JavierGC | 0:2e1b2d9fa0de | 499 | |
JavierGC | 0:2e1b2d9fa0de | 500 | // ************ Interrupts Freqs |
JavierGC | 0:2e1b2d9fa0de | 501 | F1.start(); |
JavierGC | 0:2e1b2d9fa0de | 502 | F2.start(); |
JavierGC | 0:2e1b2d9fa0de | 503 | F3.start(); |
JavierGC | 0:2e1b2d9fa0de | 504 | Period1=0; |
JavierGC | 0:2e1b2d9fa0de | 505 | Period2=0; |
JavierGC | 0:2e1b2d9fa0de | 506 | Period3=0; |
JavierGC | 0:2e1b2d9fa0de | 507 | |
JavierGC | 0:2e1b2d9fa0de | 508 | Freq1.rise(Freq1_Meas); |
JavierGC | 0:2e1b2d9fa0de | 509 | Freq2.rise(Freq2_Meas); |
JavierGC | 0:2e1b2d9fa0de | 510 | Freq3.rise(Freq3_Meas); |
JavierGC | 0:2e1b2d9fa0de | 511 | |
JavierGC | 0:2e1b2d9fa0de | 512 | // ************ End Interrupts Freqs |
JavierGC | 0:2e1b2d9fa0de | 513 | |
JavierGC | 0:2e1b2d9fa0de | 514 | while(true) { |
JavierGC | 0:2e1b2d9fa0de | 515 | //Thread::wait(osWaitForever); |
JavierGC | 0:2e1b2d9fa0de | 516 | wd.Service(); |
JavierGC | 0:2e1b2d9fa0de | 517 | Thread::wait(1000); |
JavierGC | 0:2e1b2d9fa0de | 518 | } |
JavierGC | 0:2e1b2d9fa0de | 519 | } |