Как стать автором
Обновить

Кому в микроконтроллере жить хорошо?

Время на прочтение 3 мин
Количество просмотров 8.2K
Всего голосов 25: ↑22 и ↓3 +19
Комментарии 19

Комментарии 19

Любопытно, а с чего имеет место быть такой чудовищный разброс между минимальным и максимальным значениями?
Имеется в ввиду минимальное и максимальное время выполнения.
Минимальное время выполнения соответствует ветке кода — «вошли, проверили таймер, таймер не дотикал и вышли» или «вошли проверили прием, принятых данных нет и вышли „
Максимальное время — завершение приема пакета запроса и формирование пакета ответа.

AVR не такой уж медленный!!! В среднем он в полтора раза медленнее ARM при той же тактовой частоте.

Так а с чего бы ему быть сильно медленнее при той же тактовой? Это ж не задача на числодробление, CRC считается на битовых операциях… я не очень хорошо помню, как там дела в AVR, но вроде в основном не хватает (по сравнению с ARM) четырехбайтных целых и быстрых делений-умножений, которые в вашей задаче особо без надобности?

В stm32L052 можно CRC считать через хардварный модуль и еще немного выиграть в скорости расчета и памяти на таблицах. Можно эффективно использовать DMA на прием и передачу и выиграть на процессорном времени. Ну и вишенка на торте, в stm32L052 есть у UART аппаратное обнаружение конца посылки для RTU и ASCII modbus.
C использованием всей этой хардварщины интересно насколько эффективнее stm32 с точки зрения процессорного времени и памяти. Используя все эти плюхи я влез в 5 кБ прошивки (это правда с FreeRTOS уже вместе).

Резонно.

НЛО прилетело и опубликовало эту надпись здесь
По большому счеты правильное суждение, но не совсем правильное объяснение:
Сила ARM — в более мощной периферии и на более навороченной арифметике

ARM — это ядро, периферии там по большому счету нет. Сила ARM в гарвардской архитектуре ядре со всеми вытекающими. Математика это так же отдельные блоки, такие как DSP и FPU (DPU в более навороченных).

периферия это уже к производителю МК, чего они уже там накрутят. Тот же STM далеко не лидер в наличии «интересной» периферии.
НЛО прилетело и опубликовало эту надпись здесь
АВР не медленный только когда достаточно 8 бит и нужен ногодрыг. Как только начинается числодробилка — на АВР жалко смотреть. Ну и ДМА само по себе очень сильно разгружает ядро от пересылок данных, тот же Модбас можно принять на СТМ32 кроме Ф1 серии полностью автоматически, с единственным прерыванием по настраиваемому таймауту после последнего бацта пакета. На АВР вы будете отвлекаться на каждый байт. А если одновременно работает десяток интерфейсов?

Я имел в виду — конкретно в реализации из поста, а не вообще.

Мне кажется тест необходимо было поделить по функциям (чтение дискретных сигналов и регистров).
наверное корректнее было бы сравнивать с stm8, потому как avr 8-ми битная
ну и сам модбас оперирует байтами, и нет особых причин из за которых была бы большая разница
Тест не совсем корректный, т.к. не учитывает качество самого кода. Если под AVR написать на Ассемблере, а STM32 — на HAL, то AVR может оказаться быстрее. У меня вся библиотека модбаса для STM32 1,5...2 кБ ПЗУ (чтение, запись, эхо), здесь же 3...6 кБ, это явно с HAL.
1) Для АВР, и для СТМ, компилировался один и тот же код
2) В модуле как-бы две библиотеки, RTU и ASCII
3) Каждая содержит модбас функции 1,2,3,4,5,6,15,16,22
4) Код модуля Модбас полностью отвязан от аппаратуры, и использует 3 функции для связи с системой ModBusSysTimer, ModBusPUT(), ModBusGET()
5) в СТМ ModBusGET() работает через ПДП

Сравнивать Modbus RTU с Modbus ASCII нет смысла, первый настолько популярный, что я даже не знаю, как там работает ASCII, он как бы нафиг не нужен. Но точно знаю, разница там в пользу Modbus TCP. =)
Коммуникационные задачи должны выполняться отдельным процессором, особенно если этот процессор может выполнять кучу своих задач, которые нагрузят его так, что коммуникация развалится. Тут уже инженер должен решать — AVR сойдет или STM надо применить.
я даже не знаю, как там работает ASCII, он как бы нафиг не нужен


Гм, ну ладно. У всех свои миры )))
Как-то непривычно читать статьи без вводной части, хотя бы короткой.
Обновил проект!
Переписал функцию вычисления CRC по таблице, время выполнения функции сократилось на 32%
Итоговое быстродействие Modbus RTU для наилучшего случая (вариант 8):
AVR среднее-105; минимальное-99; максимальное-1924;
STM32 среднее-86; минимальное-59; максимальное-1293;
Снижение максимального времени выполнения
STM32 — 1417-1293=124 такта
AVR — 2026-1924=102 такта
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации