Дурак и микроконтроллер

Тема в разделе "Микроконтроллеры AVR", создана пользователем itsterit, 1 май 2020.

?

хотите знать что и когда делает микроконтроллер?

  1. да, хочу!!

  2. нет, зачем мне это!

Результаты будут видны только после голосования.
  1. itsterit

    itsterit Нерд

    привет✋, нашёл я статью - http://easyelectronics.ru/avr-uchebnyj-kurs-ocenka-zagruzki-kontrollera.html, мне показалось таковая реализация мониторинга проста и эффективна.
    !нО, не писал бы я сюда если бы у меня не возникли вопросы. А именно как это реализовать на практике, в теории то оно ВСЁ идеально. т.е по сути для подобного мониторинга стоит всего-то перед выполнением задачи в монитор порты вывести "1" и в конце программы сделать вывод "0", это позволило бы средствами самой Ардино иде мониторить график работы процессора. (оооооочень утрированно).

    так вот малоли у кого есть исходник или правки реализации. буду благодарен каждому толковому комментарию, спасибо.
     
  2. SergeiL

    SergeiL Оракул Модератор

    Ну тут не все так просто.
    В статье описан вариант с диспетчером задач, или очередью сообщений.
    В многозадачных системах все задачи ждут событий, нет событий задача стоит в его ожидании, механизмы - разные: обменники, семафоры, каналы, очереди, и т.д. У задач есть приоритеты, самый низкий - у задачи idle. Поэтому, чем больше процессорного времени достается idle тем меньше загрузка системы.
    Если idle время не выделяется - загрузка слишком высокая. Тут данный вариант - проходит.

    А вот с применением стандартного, для обычных ардунщиков стиля написания программы, для МК все несколько не так.
    Большей частью все, не столь критичное к быстродействию, - запихивается в loop.
    Тут мы можем в начале loop() просто считывать значение millis() или micros(), и вывести в порт максимальное, минимальное и среднее значение за какое-то кол-во циклов loop. Сразу станет ясно насколько тяжел код loop, и не только loop.
    Есть же еще прерывания. А вот тут нужно быть как можно аккуратнее.
    Так как слишком длинный код в прерывании, может не успеть доработать до возникновения следующего прерывания.
    Например в прерываниях по таймеру, я обычно смотрю регистры таймера перед выходом из прерывания, чтобы понять, через сколько он щелкнет снова и прикинуть запас по времени.
     
  3. parovoZZ

    parovoZZ Гуру

    статья очень старая и неактуальная. Неактуальная она и для 8-ми и 16-ти битных МК, которые программируются в "лоб". Для оценки энергоэффективности работы МК (про график работы процессора МК здесь говорить глупо - у 8-ми и 16-ти битных МК проц всегда нагружен на 100%, или 0% - состояние IDLE) существуют различные амперметры. Для MSP430 я уже про такие рассказывал. У SiLabs EnergyProfiler, но по ощущениям, он хуже, чем у TI. У других производителей тоже есть такие штуки. В ардуине такой функции нет.
    Если мы говорим про встроенные RTOS системы, то есть прекрасный инструмент uc/Probe. Но он оцениает не энергопотребление, а именно загрузку процессора активными задачами (IDLE задача в простых процессорах тупо исполняет 'nop', т.е. ядро всё равно загружено). У segger тоже есть такой инструмент, но называется - не помню))
     
  4. SergeiL

    SergeiL Оракул Модератор

    Да не об этом речь то ...
     
  5. parovoZZ

    parovoZZ Гуру

    а о чем?
     
  6. itsterit

    itsterit Нерд

    честно говоря меня мало интересует энергопотребление мк)))

    хочется просто знать что и когда делает процессор(как на том примере), выводя всю информацию в плоттер.

    лично мне кажется это очень удобно для отладки большой программы)
     
  7. itsterit

    itsterit Нерд


    если не сложно можно простой пример ))

    сПасибоо
     
  8. NMi

    NMi Нерд

    Название темы прям-в-точку.
    Ааа всякие симуляторы совсем никак?
     
    Airbus нравится это.
  9. parovoZZ

    parovoZZ Гуру

    для этого существует дебаггер. На старых тинях, для которых у меня нет дебаггера, я в теле программы расставлял числа и выводил их через SPI. Так я понимал, как выполняется программа. Но на полноценный отладчик это никак не похоже.
     
  10. parovoZZ

    parovoZZ Гуру

    в симуляторе в прерывание по приёму байта как войти?
     
    itsterit нравится это.
  11. NMi

    NMi Нерд

    Элементарно. Существует по крайней мере два способа:
    1 - CPU Events ставим в событиях USART - Full Trace.
    2 - в обработчике прерывания USART RX делаем Break Point.
     
  12. parovoZZ

    parovoZZ Гуру

    и дальше что? Как загнать в регистр желаемое число?
     
  13. NMi

    NMi Нерд

    В какой именно регистр и зачем вообще там что-то менять?
    И ещё - кто мешает поставить в симуляторе сам порт и соединить его с дурдуиной и там-же лог. анализатор. Имеем картину маслом по обмену данными всего порта.