Ich versuche, Sky mote (MSP430 F1611 + CC2420) zu verwenden, um die Daten vom I2C-Sensor mit einer Abtastfrequenz von 100 Hz zu lesen und die Daten auf die serielle Schnittstelle (USB) zu schreiben. Ich habe ein paar Tests durchgeführt und festgestellt, dass die gesamten Ausgangsdaten eine Abtastfrequenz von 78 Hz haben. Ich habe rtimer verwendet, um meinen Sampling- und Druckcode zu profilieren, und festgestellt, dass die Druckfunktion den gesamten Prozess verlangsamt. Hier sind einige Profiling-Ausgaben:
start 50628
15490,f074,20,3b8c,ffab,49,ffcf,fb70
end 51189
start 51293
15491,f0a8,fff4,3ba4,ffc6,24,ffd8,fb90
end 51880
start 51984
15492,f094,20,3b30,ffa7,5b,fff3,fb70
end 52544
start 52647
15493,f118,bc,3ce0,ffab,70,fffc,fb90
end 53207
start 53311
15494,f030,1b0,3b44,ffa9,1f7,1f,fb80
end 53871
Der Rtimer hat 4098*8 Ticks für eine Sekunde. Hier können wir deutlich sehen, dass der Druck etwa 560 Ticks (17 ms) dauert. Wenn die Abtastfrequenz 100 Hz beträgt, sollte die Druckfunktion innerhalb von 10 ms (327 Ticks) abgeschlossen sein.
Das eingebettete System, das ich verwende, ist Contiki OS und die Baudrate beträgt 115200 (maximale Baudrate). Das Sensorbeispiel enthält 112-Bit-Signed-Int.
Hier ist mein Code:
mpu_data_union samples;
int m=mpu_sample_all(&samples);
printf("start %u\n",RTIMER_NOW());
printf("%lu,%x,%x,%x,%x,%x,%x,%x\n",
counterxx,samples.data.accel_x,samples.data.accel_y,
samples.data.accel_z,samples.data.gyro_x,
samples.data.gyro_y,samples.data.gyro_z,
samples.data.temperature);
printf("end %u\n",RTIMER_NOW());
Ich hoffe, dass einige Leute mit Erfahrung in der Optimierung von printf oder UART im Allgemeinen einige Vorschläge machen können.
Verwenden Sie erstens einen seriellen USB-CDC-Anschluss oder einen UART, der einen UART-> USB-Konverter speist? Im letzteren Fall ist Ihre Baudrate möglicherweise zu niedrig.
Sie können die Ausgabe von Hex-Werten optimieren, indem Sie davon ausgehen, dass Sie immer 4 Zeichen drucken möchten. Dann ist es ein einfacher Fall, für jedes Nibble ein Zeichen zu erzeugen. Eine Nachschlagetabelle wäre wahrscheinlich die schnellste Option.
nidhin
pjc50
John u
Olin Lathrop