Перейти к содержанию

Определение Загрузки Контроллера


Гость Гость

Рекомендуемые сообщения

Главный цикл контроллера AVR у меня выглядит так:

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-битный) и проверяющую флаг прихода данных.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Да уж, удивили :)

Понятие "загрузка" для МК вообще неуместно,если он периодически не входит в спящий режим. Если входит,то можно ещё как-то подсчитать процент работы ядра в единицу времени. А у вас он работает всегда, причём большую часть времени в цикле ожидания:

while (!data_ready);

Если нужно узнать число тактов - загляните в дизасм и посчитайте. Или вообще сделайте цикл ассемблерной вставкой.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Поскольку приход данных от датчиков переходит с известной частотой

...

Проблема в том, чтобы определить сколько тактов занимает одна итерация цикла

Если будут известны эти величины, то зачем ещё огород городить? Всё и так подсчитать можно.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Если будут известны эти величины, то зачем ещё огород городить? Всё и так подсчитать можно.

Не известно сколько времени занимает чтение и обработка данных, а также происходят другие прерывания, также отнимающие время контроллера.

Я говорил сколько времени одна итерация цикла ожидания данных и инкрементирования счётчика.

Понятие "загрузка" для МК вообще неуместно,если он периодически не входит в спящий режим.

Я понимаю. Спящий режим не используется в данном случае. Однако обработка данных достаточно ресурсоёмка и было бы не плохо знать насколько текущая реализация загружает контроллер (процент времени, который контроллер тупо ждёт данные и не занят), чтобы видеть необходимость оптимизации и возможность усложнения алгоритмов.

Или вообще сделайте цикл ассемблерной вставкой.

Я не знаком с Assembler для AVR, только с Си. Можете помочь сделать простую ассемблерную вставку, которая инкрементирует 64-битную переменную, затем проверяет булевную переменную и если она false переходит на начало цикла (иначе - выход из вставки на основной код)?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Может сделать проще? В начале обработки сбросить и запустить таймер, а в конце обработки остановить его.

Никогда не спорьте с дураком - люди могут не заметить между вами разницы

Ссылка на комментарий
Поделиться на другие сайты

Можно выполнить как порекомендовал Григорий, а можно и здесь посмотреть для расширения горизонта сознания...

Не квалифицированный, но везучий электрик знает в лицо всех архангелов.

Прогресс сделал розетки недоступными для большинства детей. Умирают только самые одаренные.

Ссылка на комментарий
Поделиться на другие сайты

Мне нужно узнать длительность цикла ожидания. Это будет гораздо удобнее, чем вымерять длительности всех обработчиков прерываний и основного кода.

Ссылка на комментарий
Поделиться на другие сайты

Написал такой код (счётчик стал 32-битным, потому что даже на частоте 20 МГц он не переполнится за 1 секунду при таком количестве команд):

asm("wait_loop:");
asm("lds r2, perf_counter"); // 2
asm("lds r3, perf_counter + 1"); // 2
asm("lds r4, perf_counter + 2"); // 2
asm("lds r5, perf_counter + 3"); // 2
asm("add r2, $1"); // 1
asm("adc r3, $0"); // 1
asm("adc r4, $0"); // 1
asm("adc r5, $0"); // 1
asm("sts perf_counter, r2"); // 2
asm("sts perf_counter, r3"); // 2
asm("sts perf_counter, r4"); // 2
asm("sts perf_counter, r5"); // 2
asm("lds r2, data_ready"); // 2
asm("tst r2"); // 1
asm("breq wait_loop"); // 1?

Можно ли его сделать лучше? И не совсем понимаю сколько тактов будет длиться последняя функция (в справочнике написано 1 или 2).

Ссылка на комментарий
Поделиться на другие сайты

Мне нужно узнать длительность цикла ожидания. Это будет гораздо удобнее, чем вымерять длительности всех обработчиков прерываний и основного кода.
Чем замер время работы программы отличается от замера время её простоя? В любом случае нужно писать доп. прогу и считать...
в справочнике написано 1 или 2

Будет зависеть от величины смещения адреса...

Изменено пользователем Лалюна

Не квалифицированный, но везучий электрик знает в лицо всех архангелов.

Прогресс сделал розетки недоступными для большинства детей. Умирают только самые одаренные.

Ссылка на комментарий
Поделиться на другие сайты

всем доброго времени суток. дайте пожалйста ответ имеет ли програмная инжинерия отношение к микроконтроллем (их программированием (именно созданием программ и прошивкой м/к) проектированием схем и тп) заранее благодарен

Изменено пользователем vitalya.2211
Ссылка на комментарий
Поделиться на другие сайты

BREQ label

Cycles: 1 if condition is false

2 if condition is true

ADD/ADC не умеет складывать регистр и переменную, только два регистра. Луше так:

где - то в инициализации

eor r6,r6

eor r7,r7

inc r6

а в цикле

add r2,r6

adc r3,r7

adc r4,r7

adc r5,r7

А вообще лучше сразу выделить под счетчик 4 регистра, и 2 временных, чтоб каждый раз не загружать-выгружать.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...