Comments 19
Любопытно, а с чего имеет место быть такой чудовищный разброс между минимальным и максимальным значениями?
+1
Имеется в ввиду минимальное и максимальное время выполнения.
Минимальное время выполнения соответствует ветке кода — «вошли, проверили таймер, таймер не дотикал и вышли» или «вошли проверили прием, принятых данных нет и вышли „
Максимальное время — завершение приема пакета запроса и формирование пакета ответа.
Минимальное время выполнения соответствует ветке кода — «вошли, проверили таймер, таймер не дотикал и вышли» или «вошли проверили прием, принятых данных нет и вышли „
Максимальное время — завершение приема пакета запроса и формирование пакета ответа.
0
AVR не такой уж медленный!!! В среднем он в полтора раза медленнее ARM при той же тактовой частоте.
Так а с чего бы ему быть сильно медленнее при той же тактовой? Это ж не задача на числодробление, CRC считается на битовых операциях… я не очень хорошо помню, как там дела в AVR, но вроде в основном не хватает (по сравнению с ARM) четырехбайтных целых и быстрых делений-умножений, которые в вашей задаче особо без надобности?
+2
В stm32L052 можно CRC считать через хардварный модуль и еще немного выиграть в скорости расчета и памяти на таблицах. Можно эффективно использовать DMA на прием и передачу и выиграть на процессорном времени. Ну и вишенка на торте, в stm32L052 есть у UART аппаратное обнаружение конца посылки для RTU и ASCII modbus.
C использованием всей этой хардварщины интересно насколько эффективнее stm32 с точки зрения процессорного времени и памяти. Используя все эти плюхи я влез в 5 кБ прошивки (это правда с FreeRTOS уже вместе).
C использованием всей этой хардварщины интересно насколько эффективнее stm32 с точки зрения процессорного времени и памяти. Используя все эти плюхи я влез в 5 кБ прошивки (это правда с FreeRTOS уже вместе).
0
Резонно.
0
UFO just landed and posted this here
По большому счеты правильное суждение, но не совсем правильное объяснение:
ARM — это ядро, периферии там по большому счету нет. Сила ARM в гарвардской архитектуре ядре со всеми вытекающими. Математика это так же отдельные блоки, такие как DSP и FPU (DPU в более навороченных).
периферия это уже к производителю МК, чего они уже там накрутят. Тот же STM далеко не лидер в наличии «интересной» периферии.
Сила ARM — в более мощной периферии и на более навороченной арифметике
ARM — это ядро, периферии там по большому счету нет. Сила ARM в гарвардской архитектуре ядре со всеми вытекающими. Математика это так же отдельные блоки, такие как DSP и FPU (DPU в более навороченных).
периферия это уже к производителю МК, чего они уже там накрутят. Тот же STM далеко не лидер в наличии «интересной» периферии.
+1
АВР не медленный только когда достаточно 8 бит и нужен ногодрыг. Как только начинается числодробилка — на АВР жалко смотреть. Ну и ДМА само по себе очень сильно разгружает ядро от пересылок данных, тот же Модбас можно принять на СТМ32 кроме Ф1 серии полностью автоматически, с единственным прерыванием по настраиваемому таймауту после последнего бацта пакета. На АВР вы будете отвлекаться на каждый байт. А если одновременно работает десяток интерфейсов?
0
Мне кажется тест необходимо было поделить по функциям (чтение дискретных сигналов и регистров).
0
Согласен!
Я перебрал 48 вариантов, мне уже лень…
Попробуйте сами — github.com/IBAH-II/modbus-M48/archive/main.zip
Я перебрал 48 вариантов, мне уже лень…
Попробуйте сами — github.com/IBAH-II/modbus-M48/archive/main.zip
0
наверное корректнее было бы сравнивать с stm8, потому как avr 8-ми битная
ну и сам модбас оперирует байтами, и нет особых причин из за которых была бы большая разница
ну и сам модбас оперирует байтами, и нет особых причин из за которых была бы большая разница
0
Тест не совсем корректный, т.к. не учитывает качество самого кода. Если под AVR написать на Ассемблере, а STM32 — на HAL, то AVR может оказаться быстрее. У меня вся библиотека модбаса для STM32 1,5...2 кБ ПЗУ (чтение, запись, эхо), здесь же 3...6 кБ, это явно с HAL.
0
1) Для АВР, и для СТМ, компилировался один и тот же код
2) В модуле как-бы две библиотеки, RTU и ASCII
3) Каждая содержит модбас функции 1,2,3,4,5,6,15,16,22
4) Код модуля Модбас полностью отвязан от аппаратуры, и использует 3 функции для связи с системой ModBusSysTimer, ModBusPUT(), ModBusGET()
5) в СТМ ModBusGET() работает через ПДП
2) В модуле как-бы две библиотеки, RTU и ASCII
3) Каждая содержит модбас функции 1,2,3,4,5,6,15,16,22
4) Код модуля Модбас полностью отвязан от аппаратуры, и использует 3 функции для связи с системой ModBusSysTimer, ModBusPUT(), ModBusGET()
5) в СТМ ModBusGET() работает через ПДП
+1
Сравнивать Modbus RTU с Modbus ASCII нет смысла, первый настолько популярный, что я даже не знаю, как там работает ASCII, он как бы нафиг не нужен. Но точно знаю, разница там в пользу Modbus TCP. =)
Коммуникационные задачи должны выполняться отдельным процессором, особенно если этот процессор может выполнять кучу своих задач, которые нагрузят его так, что коммуникация развалится. Тут уже инженер должен решать — AVR сойдет или STM надо применить.
Коммуникационные задачи должны выполняться отдельным процессором, особенно если этот процессор может выполнять кучу своих задач, которые нагрузят его так, что коммуникация развалится. Тут уже инженер должен решать — AVR сойдет или STM надо применить.
-2
Как-то непривычно читать статьи без вводной части, хотя бы короткой.
0
Обновил проект!
Переписал функцию вычисления CRC по таблице, время выполнения функции сократилось на 32%
Итоговое быстродействие Modbus RTU для наилучшего случая (вариант 8):
AVR среднее-105; минимальное-99; максимальное-1924;
STM32 среднее-86; минимальное-59; максимальное-1293;
Снижение максимального времени выполнения
STM32 — 1417-1293=124 такта
AVR — 2026-1924=102 такта
Переписал функцию вычисления CRC по таблице, время выполнения функции сократилось на 32%
Итоговое быстродействие Modbus RTU для наилучшего случая (вариант 8):
AVR среднее-105; минимальное-99; максимальное-1924;
STM32 среднее-86; минимальное-59; максимальное-1293;
Снижение максимального времени выполнения
STM32 — 1417-1293=124 такта
AVR — 2026-1924=102 такта
0
Sign up to leave a comment.
Кому в микроконтроллере жить хорошо?