mirror of
https://github.com/okalachev/flix.git
synced 2025-07-27 17:49:33 +00:00
Improve logging code
Make it easer to add and remove log entries
This commit is contained in:
parent
299c8a6a02
commit
7ae5457bb4
70
flix/log.ino
70
flix/log.ino
@ -3,36 +3,58 @@
|
|||||||
|
|
||||||
// In-RAM logging
|
// In-RAM logging
|
||||||
|
|
||||||
|
#include "vector.h"
|
||||||
|
|
||||||
#define LOG_RATE 100
|
#define LOG_RATE 100
|
||||||
#define LOG_DURATION 10
|
#define LOG_DURATION 10
|
||||||
#define LOG_PERIOD 1.0 / LOG_RATE
|
#define LOG_PERIOD 1.0 / LOG_RATE
|
||||||
#define LOG_SIZE LOG_DURATION * LOG_RATE
|
#define LOG_SIZE LOG_DURATION * LOG_RATE
|
||||||
#define LOG_COLUMNS 14
|
|
||||||
|
|
||||||
float logBuffer[LOG_SIZE][LOG_COLUMNS]; // * 4 (float)
|
Vector attitudeEuler;
|
||||||
int logPointer = 0;
|
Vector attitudeTargetEuler;
|
||||||
|
|
||||||
|
struct LogEntry {
|
||||||
|
const char *name;
|
||||||
|
float *value;
|
||||||
|
};
|
||||||
|
|
||||||
|
LogEntry logEntries[] = {
|
||||||
|
{"t", &t},
|
||||||
|
{"rates.x", &rates.x},
|
||||||
|
{"rates.y", &rates.y},
|
||||||
|
{"rates.z", &rates.z},
|
||||||
|
{"ratesTarget.x", &ratesTarget.x},
|
||||||
|
{"ratesTarget.y", &ratesTarget.y},
|
||||||
|
{"ratesTarget.z", &ratesTarget.z},
|
||||||
|
{"attitude.x", &attitudeEuler.x},
|
||||||
|
{"attitude.y", &attitudeEuler.y},
|
||||||
|
{"attitude.z", &attitudeEuler.z},
|
||||||
|
{"attitudeTarget.x", &attitudeTargetEuler.x},
|
||||||
|
{"attitudeTarget.y", &attitudeTargetEuler.y},
|
||||||
|
{"attitudeTarget.z", &attitudeTargetEuler.z},
|
||||||
|
{"thrustTarget", &thrustTarget}
|
||||||
|
};
|
||||||
|
|
||||||
|
const int logColumns = sizeof(logEntries) / sizeof(logEntries[0]);
|
||||||
|
float logBuffer[LOG_SIZE][logColumns];
|
||||||
|
|
||||||
|
void prepareLogData() {
|
||||||
|
attitudeEuler = attitude.toEulerZYX();
|
||||||
|
attitudeTargetEuler = attitudeTarget.toEulerZYX();
|
||||||
|
}
|
||||||
|
|
||||||
void logData() {
|
void logData() {
|
||||||
if (!armed) return;
|
if (!armed) return;
|
||||||
|
static int logPointer = 0;
|
||||||
static float logTime = 0;
|
static float logTime = 0;
|
||||||
if (t - logTime < LOG_PERIOD) return;
|
if (t - logTime < LOG_PERIOD) return;
|
||||||
logTime = t;
|
logTime = t;
|
||||||
|
|
||||||
logBuffer[logPointer][0] = t;
|
prepareLogData();
|
||||||
logBuffer[logPointer][1] = rates.x;
|
|
||||||
logBuffer[logPointer][2] = rates.y;
|
for (int i = 0; i < logColumns; i++) {
|
||||||
logBuffer[logPointer][3] = rates.z;
|
logBuffer[logPointer][i] = *logEntries[i].value;
|
||||||
logBuffer[logPointer][4] = ratesTarget.x;
|
}
|
||||||
logBuffer[logPointer][5] = ratesTarget.y;
|
|
||||||
logBuffer[logPointer][6] = ratesTarget.z;
|
|
||||||
logBuffer[logPointer][7] = attitude.toEulerZYX().x;
|
|
||||||
logBuffer[logPointer][8] = attitude.toEulerZYX().y;
|
|
||||||
logBuffer[logPointer][9] = attitude.toEulerZYX().z;
|
|
||||||
logBuffer[logPointer][10] = attitudeTarget.toEulerZYX().x;
|
|
||||||
logBuffer[logPointer][11] = attitudeTarget.toEulerZYX().y;
|
|
||||||
logBuffer[logPointer][12] = attitudeTarget.toEulerZYX().z;
|
|
||||||
logBuffer[logPointer][13] = thrustTarget;
|
|
||||||
|
|
||||||
logPointer++;
|
logPointer++;
|
||||||
if (logPointer >= LOG_SIZE) {
|
if (logPointer >= LOG_SIZE) {
|
||||||
@ -41,13 +63,15 @@ void logData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void dumpLog() {
|
void dumpLog() {
|
||||||
Serial.printf("t,rates.x,rates.y,rates.z,ratesTarget.x,ratesTarget.y,ratesTarget.z,"
|
// Print header
|
||||||
"attitude.x,attitude.y,attitude.z,attitudeTarget.x,attitudeTarget.y,attitudeTarget.z,thrustTarget\n");
|
for (int i = 0; i < logColumns; i++) {
|
||||||
|
Serial.printf("%s%s", logEntries[i].name, i < logColumns - 1 ? "," : "\n");
|
||||||
|
}
|
||||||
|
// Print data
|
||||||
for (int i = 0; i < LOG_SIZE; i++) {
|
for (int i = 0; i < LOG_SIZE; i++) {
|
||||||
if (logBuffer[i][0] == 0) continue; // skip empty records
|
if (logBuffer[i][0] == 0) continue; // skip empty records
|
||||||
for (int j = 0; j < LOG_COLUMNS - 1; j++) {
|
for (int j = 0; j < logColumns; j++) {
|
||||||
Serial.printf("%f,", logBuffer[i][j]);
|
Serial.printf("%g%s", logBuffer[i][j], j < logColumns - 1 ? "," : "\n");
|
||||||
}
|
}
|
||||||
Serial.printf("%f\n", logBuffer[i][LOG_COLUMNS - 1]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user