High speed logging example
Dependencies: Adafruit_RTCLib BNO055 SDFileSystem mbed
Diff: main.cpp
- Revision:
- 1:27070bac59e5
- Parent:
- 0:2953603cfeee
- Child:
- 2:aaa32a8342ab
--- a/main.cpp Mon Jan 22 23:32:54 2018 +0000 +++ b/main.cpp Tue Jan 23 06:21:12 2018 +0000 @@ -17,9 +17,10 @@ #define PAGE_SIZE 4096 #define HEADER_SIZE 10 +#define CHUNK_SIZE (PAGE_SIZE-HEADER_SIZE) #define PACKET_SIZE 8 #define BAUD_RATE 921600 -#define BUF_SIZE (3*PAGE_SIZE) +#define BUF_SIZE (16*PAGE_SIZE) Serial serial4(D8, D2); DigitalOut test(PC_8); @@ -29,9 +30,8 @@ char fname[255]; char current_time[64]; -int index = 0; -unsigned char *front, *back, *tmp; -unsigned char buf1[BUF_SIZE], buf2[BUF_SIZE]; +int start = 0, end = 0; +unsigned char buf[BUF_SIZE]; unsigned char hdr[HEADER_SIZE] = {0xff, 0xff,'M','A','N','B','L','O','R','T'}; void printDT(char *pre, DateTime &dt) @@ -70,18 +70,13 @@ void rx_callback() { while(serial4.readable()) { - if (index < BUF_SIZE) { - front[index] = serial4.getc(); - index++; - } else { - front[0] = serial4.getc(); - index = 1; - } + buf[end] = serial4.getc(); + end++; + if (end == BUF_SIZE) end = 0; } } int main() { - front = buf1, back = buf2; test = 0; SDFileSystem sd(DI, DO, SCK, CS, "sd"); @@ -124,6 +119,7 @@ printf("Firmware version v%d.%0d\r\n",imu.ID.sw[0],imu.ID.sw[1]); printf("Bootloader version v%d\r\n\r\n",imu.ID.bootload); } + imu.setmode(OPERATION_MODE_NDOF); imu.set_accel_units(MPERSPERS); @@ -131,21 +127,18 @@ serial4.attach(rx_callback); for (;;) { - if (index >= PAGE_SIZE-HEADER_SIZE) { - if (index > PAGE_SIZE-HEADER_SIZE) { - printf("%d\n", index); + int length = end - start; + if (length < 0) length += BUF_SIZE; + if (length >= CHUNK_SIZE) { + fwrite(hdr, 1, HEADER_SIZE, fp); + if (start+CHUNK_SIZE-1 < BUF_SIZE) { + fwrite(buf+start, 1, CHUNK_SIZE, fp); + } else { + fwrite(buf+start, 1, BUF_SIZE-start+1, fp); + fwrite(buf, 1, CHUNK_SIZE-(BUF_SIZE-start+1), fp); } - test2 = flag2; - flag2 = !flag2; - tmp = front; - front = back; - back = tmp; - index = 0; - test = 1; - fwrite(hdr, 1, HEADER_SIZE, fp); - fwrite(back, 1, PAGE_SIZE-HEADER_SIZE, fp); fflush(fp); - test = 0; + start += CHUNK_SIZE; } } }