Shows problem with holding down enter/return in terminal that causes MODSERIAL to backlog characters .
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #define True 1 00002 #define False 0 00003 #include "mbed.h" 00004 #include "MODSERIAL.h" 00005 00006 00007 00008 MODSERIAL pc(USBTX,USBRX,512); 00009 Ticker tmer; 00010 DigitalOut rUSB(p14); 00011 00012 00013 float FirmVer=1.6; 00014 char buf[513]; 00015 volatile int sFlag=0; 00016 int Diagnostic=0; 00017 00018 00019 00020 struct tm t; 00021 time_t seconds; 00022 00023 int HoldOFF; 00024 00025 00026 void update_cfg(); 00027 void save_cfg(); 00028 void restore_cfg(); 00029 void ADCInit(); 00030 void DACInit(); 00031 void SerialInit(); 00032 void EEInit(); 00033 void RTCInit(); 00034 void ADCint(); 00035 void DACwr(int Ch, int Val); 00036 void parse(); 00037 00038 void PIDcalc(int eCh, int sCh, int Cntl); 00039 void SysInit(); 00040 00041 void rxCallback(MODSERIAL_IRQ_INFO *info); 00042 void flushSerialBuffer(void); 00043 extern "C" void HardFault_Handler() 00044 { 00045 pc.printf("Error Hard Fault!\n"); 00046 //NVIC_SystemReset(); 00047 } 00048 extern "C" void NMI_Handler() 00049 { 00050 pc.printf("Error NMI Fault!\n"); 00051 //NVIC_SystemReset(); 00052 } 00053 extern "C" void MemManage_Handler() 00054 { 00055 pc.printf("Error MemManage Fault!\n"); 00056 //NVIC_SystemReset(); 00057 } 00058 extern "C" void BusFault_Handler() 00059 { 00060 pc.printf("Error BusFault Fault!\n"); 00061 //NVIC_SystemReset(); 00062 } 00063 extern "C" void UsageFault_Handler() 00064 { 00065 pc.printf("Error UsageFault Fault!\n"); 00066 //NVIC_SystemReset(); 00067 } 00068 00069 int main() 00070 { 00071 rUSB=1; 00072 00073 FirmVer=1.6; //Firmware Version 00074 SerialInit(); 00075 SysInit(); 00076 RTCInit(); 00077 HoldOFF=0; 00078 flushSerialBuffer(); 00079 00080 while (1) { 00081 wait(.1); 00082 if (sFlag==1) { 00083 // NVIC_DisableIRQ(UART0_IRQn); //added to fix lockup 9-27-11 00084 int nNum = pc.move(buf,512); 00085 buf[nNum] = '\0'; 00086 pc.printf("\n\r%s\n\r",buf); 00087 parse(); 00088 sFlag=0; 00089 // NVIC_EnableIRQ(UART0_IRQn); //added to fix lockup 9-27-11 00090 } 00091 seconds = time(NULL); 00092 00093 00094 } 00095 } 00096 00097 void flushSerialBuffer(void) 00098 { 00099 char char1 = 0; 00100 while (pc.readable()) { 00101 char1 = pc.getc(); 00102 } 00103 return; 00104 } 00105 00106 void SysInit() 00107 { 00108 00109 } 00110 00111 void RTCInit() 00112 { 00113 00114 t.tm_sec = 00; // 0-59 00115 t.tm_min = 00; // 0-59 00116 t.tm_hour = 12; // 0-23 00117 t.tm_mday = 12; // 1-31 00118 t.tm_mon = 5; // 0-11 00119 t.tm_year = 109; // year since 1900 00120 seconds = mktime(&t); 00121 set_time(seconds); 00122 00123 } 00124 00125 00126 00127 00128 00129 void ADCint() 00130 { 00131 00132 if (Diagnostic==0) { 00133 PIDcalc(0, 1, 0); 00134 PIDcalc(2, 3, 1); 00135 } 00136 00137 } 00138 00139 void PIDcalc(int eCh, int sCh, int Cntl) 00140 { 00141 00142 } 00143 00144 00145 00146 void SerialInit() 00147 { 00148 pc.baud(115200); 00149 pc.autoDetectChar('\r'); 00150 pc.attach(&rxCallback, MODSERIAL::RxAutoDetect); 00151 00152 } 00153 00154 void rxCallback(MODSERIAL_IRQ_INFO *info) 00155 { 00156 sFlag=1; 00157 } 00158 00159 void parse() 00160 { 00161 00162 char *pos; 00163 char key[]="Tt"; 00164 pos=strpbrk(buf,key); 00165 if (pos) { 00166 //__NVIC_DisableIRQ(UART0_IRQn); 00167 // pc.printf("%c",0x0c); 00168 pc.printf("hello you pressed T\n\r"); 00169 //__NVIC_EnableIRQ(UART0_IRQn); 00170 } else { 00171 char key[]="Rr"; 00172 pos=strpbrk(buf,key); 00173 if (pos) { 00174 //__NVIC_DisableIRQ(UART0_IRQn); 00175 // pc.printf("%c",0x0c); 00176 pc.printf("hello you pressed R\n\r"); 00177 //__NVIC_EnableIRQ(UART0_IRQn); 00178 } else { 00179 char key[]="sS"; 00180 pos=strpbrk(buf,key); 00181 if (pos) { 00182 pc.printf("hello you pressed S\n\r"); 00183 } else { 00184 char key[]="pP"; 00185 pos=strpbrk(buf,key); 00186 if (pos) { 00187 pc.printf("hello you pressed P\n\r"); 00188 } else { 00189 char key[]="dD"; 00190 pos=strpbrk(buf,key); 00191 if (pos) { 00192 pc.printf("hello you pressed D\n\r"); 00193 } else { 00194 char key[]="iI"; 00195 pos=strpbrk(buf,key); 00196 if (pos) { 00197 pc.printf("hello you pressed I\n\r"); 00198 } else { 00199 char key[]="qQ"; 00200 pos=strpbrk(buf,key); 00201 if (pos) { 00202 pc.printf("hello you pressed q\n\r"); 00203 } else { 00204 //__NVIC_DisableIRQ(UART0_IRQn); 00205 pc.printf("\n\rErr. %s\n\r",buf); 00206 //__NVIC_EnableIRQ(UART0_IRQn); 00207 } 00208 } 00209 } 00210 } 00211 } 00212 } 00213 } 00214 }
Generated on Mon Jul 25 2022 06:03:47 by
1.7.2