Увеличить частоту выполнения цикла
- Войдите на сайт для отправки комментариев
Втр, 26/04/2022 - 09:07
Всем привет.
Собираю логгер, на основе Arduino DUE и нескольких датчиков.
Сначала разобрался с приёмом данных с датчиков и несложных расчётов. На эти манипуляции цикл программы тратит 800-1000 мкс.
Потом из примеров я прикрутил логгирование этих данных на SD карту и временные затраты увеличились до немыслимых 26000-30000 мкс. Оставил запись на ночь и ,с ростом файла, увеличивалось и время выполнения вплоть до 60000 мкс.
Подскажите, как правильно записывать данные на карту, чтобы время основного цикла не увеличивалось так быстро ? Я так понимаю, что записывать нужно данные не каждый цикл, а через какое-то количество циклов или нет ?
Код показывайте.
Потом из примеров я прикрутил логгирование этих данных на SD карту и временные затраты увеличились до немыслимых 26000-30000 мкс. Оставил запись на ночь и ,с ростом файла, увеличивалось и время выполнения вплоть до 60000 мкс.
0.06 секунды на запись?
Это нормально.
Подскажите, как правильно записывать данные на карту, чтобы время основного цикла не увеличивалось так быстро ? Я так понимаю, что записывать нужно данные не каждый цикл, а через какое-то количество циклов или нет ?
Только отказываться от FAT и разрабатывать специально для своего случая собственную файловую систему.
Но для начала можете попробовать накапливать данные в буфере ровно по 512 байт и писать исключительно такими порциями.
Очевидно нужен процессор значитеьно быстрее, если хочишь писать логи за десятки мкс.
В лог писать мне и 10Гц хватит, а вот выполнение основного цикла получения данных с датчиков и простые расчеты хотелось бы 1кГц
значит надо так переписывать программу. чтобы запись на карту не блокировала считывание датчиков
Как это можно сделать, если все процессы в одном цикле происходят?
очевидно, писать на карту не в каждом "обороте" цикла, а, например, раз в сто оборотов... а еще правильнее - по времени. Изучайте миллис
Это прерывания? Или считаем итерации и на каждую 100-ю кидаю данные на карту?
Считайте данные, как набралось 512 байт - пишите
И чего ты тогда страдаешь, вместо того, чтобы делать так, как написал?
Боюсь, что цикл, в котором будет производиться запись, выполнится не за 1 мс, а за 25 мм. Как сделать, чтобы такого не происходило не знаю, опыта мало(
для этого надо использовать неблокирующую запись на карту. Но тут надо разбираться - умеет ли так библиотека SD и возможно ли это в принципе. Может оказаться. что это вообще невозможно - тогда придется смирится с тем, что запись занимает сколько занимает
тогда придется смирится с тем, что запись занимает сколько занимает
тогда придется делать #3
Понял, спасибо, попробую.
ESP32, там два ядра, запись перенести на 0 ядро видимо, да и частота там 240mhz