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

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


Гость Гость

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

Главный цикл контроллера 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

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

...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Написал такой код (счётчик стал 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 пользователей онлайн

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

    • Ну так теперь фигня вопрос. Проверить, что кнопки невозможно замкнуть одновременно, да определить, на какой ток транзисторы нужны. По характеристикам мотора или по максимально-допустимому току диодов D1-D4. Навскидку, моторчик низковольтный, диоды тоже. Транзисторы тогда на PBSS4350 можно заменить. Они на Али почти задаром продаются.
    • Сами же понимаете, что так не может быть. Или нет "сквозняка", или схема неправильно собрана, элементы не те, битые и пр., и схема защиты не работает. Проверьте сначала работу защёлки защиты при питании от 15 В, отпаяв R19 и подавая туда медленно увеличивающееся напряжение до 1,5 - 2 В (можно с потенциометра ом на 100-500). Добейтесь, чтобы работала. Порог срабатывания измерьте. Пересчитайте в ток через резистор 0,1 Ом. Соответствует ли "правильному"? Проверьте, что у этого резистора сопротивление действительно 0,1 Ом. Запаяйте 0,1 Ом обратно. Напишите, какая лампочка. А то мало ли какая, может она не от "сквозняка", а от броска тока заряда С18 С16 мигает. Транзисторы ключей проверьте. Впаяйте вместо первичной трансформатора резистор ом 150 - 300, чтобы ток с ключей в этот "эквивалент трансформатора" не больше 50-100 мА был. Посмотрите форму напряжения на выходе ключей, в точке соединения С16 и С18, на питании после лампочки. Ищите, где ляп. Умозрительно подсказать можно только по каким-то измеренным данным. Кроме вас никто их не добудет. В общем, как в анекдоте: - Молодой человек, ну делайте же уже хоть что-нибудь!
    • Ну так можно увеличить глубину ООС, тем самым понизив чувствительность и повысив линейность
    • Судя по этой картинке   в трухе передней панели под выступающие болты и шишки паек ЗК динамиков выковыряныфрезерованы выемки, иначе бы динамики так плотно не прилегали бы к ДВП.    А оно тебе надо? "Работает - не мешай"(с)/это уже аксиома, не требующая доказательств/ , пытаясь сделать лучше, чем сделано на заводе. Сanton-ят, т.е. поют, и лучше, чем есть, тебе не сделать. Ну перенесёшь ты динамики наружу, а что тебе это даст? Кроме того, что при попытке их продать(а продавать их когда-нибудь придётся, т.к. эта акустика бюджетного сегмента без потуг на высший класс Hi-Fi) , тебе придётся объяснять потенциальному покупателю причину, по которой какой-то умник заколхозил такую переделку с акустикой, ты ничего хорошего не получишь. Задуманная тобой переделка - это по сути возня ради возни. 
    • Малыш, чушь пока здесь мелешь только ты. Сидел бы лучше в своей оффтопной теме, лепил бы на своём 3D-пинтере куколок, и не лез бы в те темы, в которых ты - ноль. 
    • Там нашел. Вроде купил.  Спасибо всем
×
×
  • Создать...