C чекго бы это? Есть таймер на 6 минут. По нему и будут заноситься
регулярно данные с датчиков. Никто не будет постоянно лазить в WEB
интерфейсе. Контроллер только и будет заниматься приемом данных
99.9% времени. Мало того в прерываниях приемника 433 Мгц, которые,
естественно, будут отключаться при обновления страницы. Кстати,
идею, с файлом в RAM друган реализовал, но при этом такого
наворотил... Пришлось попросить откатиться на зад и быть попроще :)
В данный момент выдал
такое:
1. Статический массив
cpp
static int8_t data_buffer[BUFFER_SIZE] = {0}; // Уже заполнен нулями
Не нужно выделять память динамически, не нужно инициализировать.
2. Кольцевой буфер
cpp
static int write_index = 0; // Индекс для записи
// При добавлении новых данных:
data_buffer[write_index * NUM_COLS + col] = value;
write_index = (write_index + 1) % NUM_ROWS; // Циклический сдвиг
3. Функция добавления данных
cpp
void addDataToBuffer(int8_t d1, int8_t d2, int8_t d3, int8_t d4,
int8_t d5, int8_t d6, int8_t d7, int8_t d8) {
// Записывает 8 байт в текущую позицию
// Автоматически сдвигает индекс
}
4. Создание temp.log
Создается только при обновлении страницы:
cpp
if (path == "/" || path == "/index.html") {
createTempLogFromBuffer(); // Создает файл из данных буфера
}
5. Правильный порядок данных
При создании CSV файла данные записываются от самых старых к новым:
cpp
int buffer_index = (write_index + row) % NUM_ROWS; // Правильный порядок
Использование:
Сторонняя процедура вызывает addDataToBuffer() для добавления данных
Пользователь обновляет страницу http://ip/
Автоматически создается temp.log с текущими данными буфера
Просмотр CSV: http://ip/temp.log
Пример вызова из сторонней процедуры:
cpp
// Где-то в другом файле или в loop()
void someExternalFunction() {
// Получаем 8 значений откуда-то
int8_t val1 = readSensor1();
int8_t val2 = readSensor2();
// ...
// Добавляем в буфер
addDataToBuffer(val1, val2, val3, val4, val5, val6, val7, val8);
}