ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
15 марта
1575973 Топик полностью
Гyдвинволшебник (Вчера, 23:31, просмотров: 28) ответил jlm на будет прерывистая запись, по тем или иным причинам, ваш алгоритм за сутки построит.
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);
}