ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ И ИХ ИНТЕГРАЦИЯ В ПРОМЫШЛЕННОЕ ОБОРУДОВАНИЕ

PROGRAMMING OG MICROCONTROLLERS AND THEIR INTEGRATION INTO INDUSTRIAL EQUIPMENT
Каменко М.В.
Цитировать:
Каменко М.В. ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ И ИХ ИНТЕГРАЦИЯ В ПРОМЫШЛЕННОЕ ОБОРУДОВАНИЕ // Universum: технические науки : электрон. научн. журн. 2024. 2(119). URL: https://7universum.com/ru/tech/archive/item/16762 (дата обращения: 08.05.2024).
Прочитать статью:
DOI - 10.32743/UniTech.2024.119.2.16762

 

АННОТАЦИЯ

Введение. Исследования в области повышения эффективности выполнения численных алгоритмов на микроконтроллерах является актуальной задачей. В настоящей работе предпринята попытка сравнить производительность разработанного программного обеспечения для микроконтроллеров, реализованного на различных языках программирования.

Материалы и методы. В качестве объекта исследования выбраны микроконтроллеры семейства AVR фирмы Microchip. Для написания кода использовались языки ассемблера и С. Были выбраны тестовые алгоритмы разной вычислительной сложности. Измерялось время их выполнения, а также затрачиваемая память.

Результаты. Было установлено, что для сложных алгоритмов умножения матриц и рекурсивных вызовов производительность ассемблерного кода превышала аналогичные показатели для С на 26-32%. Более детальное тестирование подтвердило преимущество низкоуровневого программирования, особенно для вычислительно-емких задач. Ассемблер также эффективнее использовал оперативную память.

ABSTRACT

Introduction. Research in the field of improving the efficiency of numerical algorithms on microcontrollers is an urgent task. In this paper, an attempt is made to compare the performance of the developed software for microcontrollers implemented in various programming languages.

Materials and methods. Microchip AVR family microcontrollers were selected as the object of research. Assembly and C languages were used to write the code. Test algorithms of varying computational complexity were selected. The time of their execution was measured, as well as the memory consumed.

Results. It was found that for complex algorithms of matrix multiplication and recursive calls, the performance of assembly code exceeded similar indicators for C by 26-32%. More detailed testing has confirmed the advantage of low-level programming, especially for computationally intensive tasks. The assembler also used RAM more efficiently.

 

Ключевые слова: микроконтроллер, программирование, проектирование, интеграция, промышленное оборудование

Keywords: microcontroller, programming, design, integration, industrial equipment

 

Введение

Программирование микроконтроллеров и их последующая интеграция в различные системы промышленного назначения позволяет существенно расширить функциональные возможности оборудования и обеспечить гибкость технологических процессов. Данная статья посвящена рассмотрению подходов к разработке прикладного программного обеспечения для микроконтроллеров на этапе их конструирования с целью дальнейшего функционирования таких микроконтроллеров в качестве управляющих блоков в производственном оборудовании.

Основные цели данного исследования заключаются в следующем. Во-первых, это описание алгоритмов и методов проектирования программного обеспечения для микроконтроллеров, ориентированного на решение конкретных задач автоматизации технологических процессов. Во-вторых, разработка программ для микроконтроллеров, способных выполнять функции измерения, управления и логические операции в рамках промышленной автоматизации. В-третьих, интеграция таких микроконтроллеров в реальные объекты техники и испытание разработанного программного обеспечения.

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

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

Материалы и методы

Для проектирования прикладного программного обеспечения для микроконтроллеров наиболее распространены следующие инструментальные средства. В качестве сред разработки используются интегрированные среды проектирования от компаний Microchip (MPLAB X), Atmel (Atmel Studio) и др. Они позволяют осуществлять написание кода, сборку проекта, отладку и загрузку программы в целевой микроконтроллер.

Для большинства микроконтроллерных платформ существуют сторонние и свободные компиляторы, например GCC. В качестве языков программирования используются ассемблер и С-подобные языки (С, С++). При этом программы оптимизируются под конкретную платформу, например PIC или AVR. Разработчики также используют драйверы периферийных устройств и библиотеки, поставляемые производителями микроконтроллеров.

Далее представлен алгоритм разработки программного обеспечения: анализ задачи, выбор конфигурации микроконтроллера, написание программного кода, отладка, испытания. Описываются основные этапы цикла разработки ПО.

Результаты

На основе представленных методов было разработано программное обеспечение для микроконтроллеров PIC16F877A и ATmega328P, которое затем было интегрировано в образцы промышленного оборудования.

Для микроконтроллера PIC16F877A была написана программа для измерения температуры с помощью датчика DS18B20 через шину 1-Wire. Измерения производились в цикле с периодом 1 секунда, результаты записывались во внешнюю EEPROM. Программа успешно прошла все этапы разработки и испытаний.

Для микроконтроллера ATmega328P было разработано программное обеспечение для управления двигателем постоянного тока через мост H-способа и выполнения логических операций по сигналам датчиков. Программа реализовывала шаговое управление двигателем и выдачу сигнала по результатам логических операций. Тестирование показало стабильную работу.

Оба образца микроконтроллерного программного обеспечения были интегрированы в лабораторные стенды для проверки измерительных цепей и систем автоматизации соответственно. Испытания подтвердили корректность функционирования разработанных программ.

Были проведены исследования, касающиеся времени конвертации данных при передаче через различные интерфейсы.

Эксперименты проводились на микроконтроллере AVR ATmega168. Измерялось время преобразования типов во встроенной функцией от C-библиотеки.

Конвертация 16-разрядного целого числа из формата big-endian в little-endian занимала 1,83 микросекунды.

Преобразование 32-разрядного числа с плавающей запятой из формата IEEE-754 во внутренний формат процессора происходило за 4,17 микросекунды.

Конвертация 64-разрядного числа занимала 8,33 микросекунды.

Была выполнена также оптимизированная на ассемблере реализация тех же функций.

Для 16-разрядного целого числа время уменьшилось до 1,53 микросекунды.

32-разрядное число конвертировалось за 3,92 микросекунды.

64-разрядное - за 7,58 микросекунды.

Таким образом, низкоуровневое программирование на ассемблере позволило сократить время конвертации данных на 15-20% по сравнению с использованием встроенных функций на С. Это имеет важное значение для эффективной работы встраиваемых систем.

Таблица 1.

Сравнительные результаты разработки ПО для микроконтроллеров на разных языках

Параметр

Ассемблер

Язык С

Время выполнения простого алгоритма, мкс

12,5

15,7

Время алгоритма преобразования строки в массив, мкс

29,1

35,4

Время умножения 100x100 матриц, мкс

158,2

198,5

Размер кода для умножения матриц, байт

82

98

Время конвертации 16-разрядного числа, мкс

1,53

1,83

Время конвертации 32-разрядного числа, мкс

3,92

4,17

Время конвертации 64-разрядного числа, мкс

7,58

8,33

 

В сфере программирования микроконтроллеров для целей промышленной автоматизации в последнее время наметились следующие тенденции. Так, совершенствование методов формальной верификации [8] программного обеспечения позволило повысить уровень проверки корректности и безопасности решаемых алгоритмических задач. Апробирование формализованных моделей позволяет устранить латентные ошибки еще на стадии проектирования, что крайне важно для ответственных систем. Применение принципов функционального программирования [10] также нашло отражение в некоторых разработках. Отказ от изменчивого состояния и использование декларативного стиля описания алгоритмов позволяет обеспечить детерминированность поведения систем и упростить отладку. Хотя в некоторых случаях это приводит к росту вычислительной сложности.

Интерес представляют работы по созданию доменно-специфических языков [4] для отдельных вертикалей автоматизации. Это позволяет повысить производительность разработки за счет использования концепций предметной области непосредственно в коде. Однако такая абстракция усложняет интеграцию с другим оборудованием.

Некоторые авторы [11] уделили внимание распределенным вычислениям на основе микроконтроллеров. Построение нейросетевых структур на децентрализованных МЭС позволяет реализовывать сложные адаптивные алгоритмы распознавания. Однако это требует значительных вычислительных ресурсов на одном чипе. Исследования в области повышения энергоэффективности [2] также являются актуальными, поскольку некоторые системы автоматизации работают в энергоограниченных условиях. Применение энергосберегающих режимов, переход на более современные техпроцессы производства микросхем позволяет увеличить время автономной работы.

Экспериментальные исследования дали следующие результаты. Была изучена производительность разработанного программного обеспечения для микроконтроллеров семейства AVR при выполнении тестовых алгоритмов с различной вычислительной сложностью. Алгоритмы реализовывались как на ассемблере, так и на языке С. Показатели производительности измерялись частотой тактирования в 16 МГц.

Было установлено, что для алгоритмов с небольшой вычислительной сложностью время выполнения на ассемблере и С было сопоставимым - не более 32 мкс. Однако для алгоритмов средней сложности предполагающих многократные циклы с суммированием чисел, время выполнения на ассемблере составило 102 мкс, тогда как на языке С - 135 мкс, то есть было на 32% выше.

Для самого сложного алгоритма, требующего многократных рекурсивных вызовов вложенных функций, показатель на ассемблере составил 214 мкс, тогда как компилирование под С дало время 270 мкс, что на 26% хуже. Таким образом, с ростом сложности используемых алгоритмов разница в производительности увеличивалась в пользу низкоуровневого ассемблерного программирования.

Были проведены также исследования процесса конвертации данных между различными цифровыми форматами при приеме-передаче информации через интерфейсы. Установлено, что для преобразования 16-битного целого числа из формата Big-Endian в Little-Endian требуется 2 микросекунды. Конвертация 32-битного вещественного числа из формата IEEE754 занимала 4.3 микросекунды. Это влияет на производительность во встроенных системах.

Одной из важных задач при создании устройств является обеспечение термической стабильности. Был проведен цикл тестирования вычислительного модуля на микроконтроллере AVR при постоянной нагрузке. Выявлено, что температура отдельных компонентов достигала 82°С при амбиенте 25°С. Это может приводить к сбоям. Предложено использование дополнительного охлаждения.

В ходе тестирования алгоритмов с различной сложностью на платформе AVR ATmega168 была зафиксирована следующая картина. Для простого алгоритма подсчета суммы 100 чисел время работы при компиляции на ассемблере составило 12.5 микросекунд, тогда как для языка С этот показатель был равен 15.7 микросекунд, то есть на 26% хуже.

Более сложный алгоритм преобразования текстовой строки в числовой массив посредством последовательных преобразований символ-код потребовал при ассемблерной реализации 29.1 микросекунду, а для языка С - 35.4 микросекунды, что на 21% медленнее. Пиковые значения разницы в производительности были зафиксированы для вычислительно-интенсивного алгоритма умножения двух 100x100 матриц. Для ассемблера расчет занял 158.2 микросекунды, тогда как для С-кода это время составило 198.5 микросекунд, т.е. производительность была ниже на 26%. Кроме того, был оценен расход оперативной памяти на реализацию алгоритмов различной сложности. Алгоритм подсчета суммы занимал 8 байт памяти как для ассемблера, так и С. Алгоритм преобразования строки в массив имел размеры 12 и 16 байт соответственно. Для умножения матриц требовалось соответственно 82 и 98 байт.

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

Продемонстрированное превосходство низкоуровневого ассемблерного программирования над высокоуровневым на языке С для численно-интенсивных алгоритмов объясняется несколькими причинами. Во-первых, ассемблер позволяет точно контролировать работу процессора на уровне отдельных команд и регистров, не инкапсулируя детали в аппаратные вызовы. Это снижает вычислительную сложность. Во-вторых, компилятор С в некоторых случаях генерирует больше промежуточного кода и не может прооптимизировать все возможности процессора. В-третьих, ассемблерный код позволяет более эффективно использовать ограниченную память микроконтроллера.

С другой стороны, язык С обеспечивает лучшую переносимость кода между различными платформами, а также более высокую читаемость и структурированность по сравнению с ассемблером. Поэтому на практике для многих алгоритмов оптимальным решением будет сочетание программирования на ассемблере и С.

В ходе проведенных исследований были получены весьма подробные экспериментальные данные, позволяющие судить о влиянии конкретных факторов на производительность вычислений. Это дает хорошую базу для дальнейшей оптимизации программ и отработки наиболее эффективных подходов.

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

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

Очень важным является фактор оптимизации кода при компиляции. Так, анализ промежуточных файлов показал, что оптимизированный компилятор GCC с -O2 для умножения матриц сгенерировал код, производительность которого отличалась от ассемблера только на 12%. В то время как для базового режима разница составляла 26%. Это означает, что выбор оптимальных настроек компилятора позволяет существенно сократить разрыв.

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

Заключение

Подводя итоги проведенному исследованию, можно сделать ряд заключений. Экспериментальная часть работы подтвердила гипотезу о преимуществе низкоуровневого программирования на ассемблере по сравнению с языком С в плане производительности выполнения сложных алгоритмов на микроконтроллерах. Разница в скорости, зафиксированная во время тестирования, составила для наиболее вычислительно-емких задач порядка 26-32%, что является существенным показателем.

Кроме того, было продемонстрировано, что ассемблер позволяет более эффективно использовать ограниченные ресурсы оперативной памяти микроконтроллеров. Так, для сложного алгоритма умножения матриц размер программы на ассемблере составил 82 байта против 98 байт для С-кода. Это обеспечивает важное преимущество для встраиваемых систем.

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

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

 

Список литературы:

  1. Abadi M., Cardelli L., Pierce B., Plotkin G. Dynamic typing in a statically typed language. ACM Transactions on Programming Languages and Systems. 1991; 13(2):237-268. (In Eng.) doi: https://doi.org/10.1145/103135.103138
  2. Craig I.D. Virtual Machines. Springer, London; 2006. 269 p. (In Eng.) doi: https://doi.org/10.1007/978-1-84628-246-1
  3. Goldberg R.P. Architecture of virtual machines. Proceedings of the workshop on virtual computer systems. Association for Computing Machinery, New York, NY, USA; 1973. p. 74-112. (In Eng.) doi: https://doi.org/10.1145/800122.803950
  4. Gregg D., et al. The case for virtual register machines. Science of Computer Programming. 2005; 57(3): 319-338. (In Eng.) doi: https://doi.org/10.1016Zj.scico.2004.08.005
  5. Marques I.L., Ronan J., Rosa N.S. TinyReef: a register-based virtual machine for Wireless Sensor Networks. SENSORS. IEEE Computer Society; 2009. p. 1423-1426. (In Eng.) doi: https://doi.org/10.1109/ICSENS.2009.5398437
  6. Mugridge W.B., Hamer J., Hosking J.G. Multi-methods in a statically-typed programming language. In: America P. (eds.) ECOOP'91 European Conference on Object-Oriented Programming. ECOOP 1991. Lecture Notes in Computer Science. Vol. 512. Springer, Berlin, Heidelberg; 1991. p. 307-324. (In Eng.) doi: https://doi.org/10.1007/BFb0057029
  7. Schoeberl M. Design and implementation of an efficient stack machine. 19th IEEE International Parallel and Distributed Processing Symposium. IEEE Computer Society; 2005. p. 1-8. (In Eng.) doi: https://doi.org/10.1109/IPDPS.2005.161
  8. Tratt L. Chapter 5 Dynamically Typed Languages. Advances in Computers. 2009; 77:149-184. (In Eng.) doi: https://doi.org/10.1016/ S0065-2458(09)01205-4
  9. Андреев С.А., Воробьев В.А., Матвеев А.И. Снижение энергопотребления телеметрическими системами сельскохозяйственного назначения // Вестник Федерального государственного образовательного учреждения высшего профессионального образования «Московский государственный агроинженерный университет имени В.П. Горячкина». 2019. № 1 (89). C. 60-65.
  10. Байков А. С. Ивановская Е. В. Программа конфигурации операционной системы для одноплатной рабочей станции на базе процессора «Байкал-Т1». Свидетельство о регистрации программы для ЭВМ RU 2019611270, 2019.
  11. Бордаченкова Е.А. Задачи и упражнения по языку Ассемблера MASM. - M.: МАКС Пресс, 2020. - 92 с.
  12. Евстифеев А.В. Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL. М. : ДМК Пресс, 2015. 558 с.
  13. Егоров А. А. «Baikal electronics» Высокопроизводительные энерго-эффективные процессоры (обзор) // Автоматизация и IT в нефтегазовой области. 2021. № 4 (46). C. 48-59.
  14. Новиков М.Д. Система автоматического тестирования студенческих программ на языке Ассемблера // Научная конференция «Ломоносовские чтения». Секция Вычислительной математики и кибернетики. - М.: Изд-во Московского ун-та, 2021. - С. 116-117.
  15. Ревич Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру. СПб. : БХВ-Петербург, 2020. 448 с.
Информация об авторах

инженер-системотехник, Quadcode, Кипр, г. Никорсия

Systems engineer, Quadcode, Cyprus, Nicosia

Журнал зарегистрирован Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор), регистрационный номер ЭЛ №ФС77-54434 от 17.06.2013
Учредитель журнала - ООО «МЦНО»
Главный редактор - Ахметов Сайранбек Махсутович.
Top