Главный цикл контроллера AVR у меня выглядит так:
Переменная data_ready изменяется в обработчике прерывания.
Хочу узнать сколько ещё ресурсов остаётся свободно. Для этого думаю изменить второй цикл таким образом:
Поскольку приход данных от датчиков переходит с известной частотой, я уверен, что прерывание происходит N раз в секунду. Значит я могу в нём каждую секунду сбрасывать счётчик, а его значение переносить в другую переменную.
Потом остаётся лишь узнать загрузку контроллера по формуле ЗначениеСчётчика * КоличествоТактовЦикла / ЧастотаКонтроллера.
Проблема в том, чтобы определить сколько тактов занимает одна итерация цикла, увеличивающего 64-битную переменную (частота контроллера 16 Мгц, так что вдруг переполнится 32-битный) и проверяющую флаг прихода данных.
Раздел: Песочница или Вопрос-Ответ
volatile bool data_ready = false;
...
while (1) {
while (!data_ready);
read_data();
process_data();
}
Переменная data_ready изменяется в обработчике прерывания.
Хочу узнать сколько ещё ресурсов остаётся свободно. Для этого думаю изменить второй цикл таким образом:
unsigned long long counter = 0;
...
while (!data_ready) counter++;
Поскольку приход данных от датчиков переходит с известной частотой, я уверен, что прерывание происходит N раз в секунду. Значит я могу в нём каждую секунду сбрасывать счётчик, а его значение переносить в другую переменную.
Потом остаётся лишь узнать загрузку контроллера по формуле ЗначениеСчётчика * КоличествоТактовЦикла / ЧастотаКонтроллера.
Проблема в том, чтобы определить сколько тактов занимает одна итерация цикла, увеличивающего 64-битную переменную (частота контроллера 16 Мгц, так что вдруг переполнится 32-битный) и проверяющую флаг прихода данных.
Раздел: Песочница или Вопрос-Ответ