
.
Dependencies: SDHCFileSystem mbed
Revision 9:8396b76e42fc, committed 2012-12-04
- Comitter:
- TickTock
- Date:
- Tue Dec 04 19:49:26 2012 +0000
- Parent:
- 8:6872945e8e91
- Child:
- 10:663bff0a6144
- Commit message:
- moved dump out of RTC ISR. builds clean
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Dec 04 19:06:41 2012 +0000 +++ b/main.cpp Tue Dec 04 19:49:26 2012 +0000 @@ -91,8 +91,8 @@ extern "C" void mbed_reset(); time_t seconds ; -DigitalIn CD(p17); -DigitalIn PB1( p20 ); +DigitalIn CD(p17); +DigitalIn PB1( p20 ); SDFileSystem sd(p5, p6, p7, p8, "sd" ); // SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name) //Ticker ticker1; //Ticker ticker2; @@ -109,39 +109,14 @@ FILE *file; char fileName[32] = "" ; char writeBuffer[maxBufLen][13]; -int bufPointer = 0; - +int writePointer = 0; +int secsIdle = canTimeout; +bool canActive = false; Serial pc(USBTX, USBRX); // tx, rx default settings (9600 8N1) extern "C" void RTC_IRQHandler() { - static int i=0; - static int secsIdle=0; - timer.reset(); // zero ms at the-seconds-tick - if(i==bufPointer){ // no canbus messages logges - if (++secsIdle>canTimeout) { // canbus idle --> sleep to save power - __wfi(); - } - } else { - if (logOpen) { - file = fopen(fileName, "ab"); - if (file == NULL) { - logOpen = false; - pc.printf("Failed to append log file.\n\n"); - } else { - while (i != bufPointer) { - for (int j = 0; j<13; j++){ - fprintf(file,"%c",writeBuffer[i][j]); - } - if(++i >= maxBufLen) - i=0; - } - led3 = !led3; - fclose(file); - } - } - i=bufPointer; - secsIdle=0; - } + timer.reset(); // zero ms at the-seconds-tic + canActive=(++secsIdle<canTimeout); LPC_RTC->ILR |= (1<<0); // clear interrupt to prepare for next } @@ -150,7 +125,7 @@ //LPC_RTC->CIIR=0x02; // interrupts each minute LPC_RTC->CIIR=0x01; // interrupts each second LPC_RTC->CCR = 0x01; // Clock enable - NVIC_SetPriority( RTC_IRQn, 10 ); + //NVIC_SetPriority( RTC_IRQn, 10 ); NVIC_EnableIRQ( RTC_IRQn ); } @@ -195,44 +170,25 @@ void logCan (char mtype, CANMessage canRXmsg) { unsigned short ts = getTimeStamp(); - writeBuffer[bufPointer][0]=mtype; - writeBuffer[bufPointer][1]=ts>>8; - writeBuffer[bufPointer][2]=ts&0xff; - writeBuffer[bufPointer][3]=canRXmsg.id&0xff; - writeBuffer[bufPointer][4]=(canRXmsg.id>>8)+(canRXmsg.len<<4); + writeBuffer[writePointer][0]=mtype; + writeBuffer[writePointer][1]=ts>>8; + writeBuffer[writePointer][2]=ts&0xff; + writeBuffer[writePointer][3]=canRXmsg.id&0xff; + writeBuffer[writePointer][4]=(canRXmsg.id>>8)+(canRXmsg.len<<4); for (int i = 5; i<13; i++){ - writeBuffer[bufPointer][i]=canRXmsg.data[i-5]; + writeBuffer[writePointer][i]=canRXmsg.data[i-5]; } - if (++bufPointer >= maxBufLen) { - bufPointer = 0; + if (++writePointer >= maxBufLen) { + writePointer = 0; led4 = !led4; } } -/*void send1() { - static char counter = 0; // use for fake data - can1.write(CANMessage(0x350, &counter, 1)); - counter++; - can1.write(CANMessage(0x351, &counter, 1)); - counter++; - can1.write(CANMessage(0x352, &counter, 1)); - counter++; -} - -void send2() { - static char counter = 0; // use for fake data - can2.write(CANMessage(0x351, &counter, 1)); - counter++; - can2.write(CANMessage(0x351, &counter, 1)); - counter++; - can2.write(CANMessage(0x352, &counter, 1)); - counter++; -}*/ - void recieve1() { CANMessage msg1; unsigned short msgTime=getTimeStamp(); static int lastMsg1 = 0; + secsIdle=0; // reset deadman switch can1.read(msg1); if (msg1.id!=0x000) { if (msg1.data[0]>(lastMsg1+1)) { @@ -250,6 +206,7 @@ CANMessage msg2; unsigned short msgTime=getTimeStamp(); static int lastMsg2 = 0; + secsIdle=0; // reset deadman switch can2.read(msg2); if (msg2.id!=0x000) { if (msg2.data[0]>(lastMsg2+1)) { @@ -264,6 +221,7 @@ } int main() { + int readPointer=0; pc.baud(460800); // change serial interface to pc to 115200, 8N1 CANMessage tsMsg; can1.frequency(500000); @@ -298,6 +256,7 @@ mbed_reset(); } else { logOpen = true; + readPointer=writePointer; pc.printf("\nStarting Can Log %s\n\n\n\n",fileName); unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 tsMsg.id=0xfff; @@ -313,22 +272,43 @@ logCan(0,tsMsg); //write full timestamp fclose(file); } - //ticker1.attach(&send1, .0052); //start sending messages - //ticker2.attach(&send2, .0051); //start sending messages - - while ((PB1==1)&&(CD==1)){ + + do { + if (((writePointer+maxBufLen-readPointer)%maxBufLen)>(maxBufLen/2)||!canActive||(PB1==0)) { + if (logOpen) { + file = fopen(fileName, "ab"); + if (file == NULL) { + logOpen = false; + pc.printf("Failed to append log file.\n\n"); + } else { + while (readPointer != writePointer) { + for (int j = 0; j<13; j++){ + fprintf(file,"%c",writeBuffer[readPointer][j]); + } + if(++readPointer >= maxBufLen) + readPointer=0; + } + led3 = !led3; + fclose(file); + } + } + } + if (!canActive) { // canbus idle --> sleep to save power + LPC_RTC->CIIR=0x00; // block RTC interrupts + __wfi(); // freeze until can activity + LPC_RTC->CIIR=0x01; // interrupts each second + } wait(0.25); // Keep logging until button pushed or SDRAM removed - } - //ticker1.detach(); - //ticker2.detach(); + } while ((PB1==1)&&(CD==1)&&canActive); // keep going until button or SDram removed + logOpen=false; pc.printf("Stopping log\n\n"); - wait(1); if (CD==1) readLog(); } else { pc.printf("\nNo SDRAM Inserted.\n\n\n\n"); } wait(1); - } -} \ No newline at end of file + } //while (true) +} +