Что такое программирование задачи жизнеобеспечения на микроконтроллере
Перейти к содержимому

Что такое программирование задачи жизнеобеспечения на микроконтроллере

  • автор:

Программирование микроконтроллеров на ассемблере

Ассемблер является языком самого низкого уровня. При этом он позволяет наиболее полно раскрыть все возможности микроконтроллеров и получить максимальное быстродействие и компактный код. В некоторых случаях альтернативы ассемблеру нет, но тем не менее он имеет множество недостатков. Несмотря на получаемую компактность машинного кода, программа, написанная на языке Ассемблер, громоздка и труднопонимаема. Для ее создания требуется отличное знание архитектуры и системы команд микроконтроллеров. Ассемблер отлично подходит для программирования микроконтроллеров, имеющих ограниченные ресурсы, например 8-ми битных моделей с малым объемом памяти. Для больших программ и тем более 32-разрядных контроллеров, лучше использовать другие языки, отличающиеся более высоким уровнем. Это позволит создавать более сложные и при этом понятные программы.

Программирование микроконтроллеров на си

Язык программирования си, относится к языкам более высокого уровня, по сравнению с Ассемблером. Программа на этом языке лучше понятна человеку. Достоинством программирования на си является огромное число программных средств и библиотек, позволяющих просто создавать необходимый код. Фактически, си сегодня стал основным языком разработки управляющих программ. Компиляторы данного языка реализованы практически для всех моделей микроконтроллеров. Стандартный язык дает возможность переноса программ с одной платформы на другую. Теоретически, используя разные компиляторы, можно преобразовать любую программу в команды микроконтроллера нужного типа. На практике дополнительно требуется учитывать архитектуру микроконтроллера каждого типа. Язык си имеет достаточно сложную для изучения структуру. Получаемый программный код конкретной задачи, имеет больший объем, чем код той же задачи, реализованной на Ассемблере. Тем не менее язык си следует признать единственным правильным выбором для профессионального программирования микроконтроллеров.

Модуль «Программирование микроконтроллеров»

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

Особенности обучения

Траектория обучения данного модуля дополнительной специализации опирается на основы информатики и математики. В процессе обучения студенты получат навыки разработки алгоритмов и программ для микроконтроллеров, применяемых во встроенных системах различного назначения. Студенты научатся разрабатывать и производить отладку собственных программ, а также запускать их на исполнение на отладочных платах Nucleo-F103RB, в состав которых входит микроконтроллер архитектуры STM32 Cortex-M3. Также студенты освоят работу с распространенными интерфейсами передачи данных, такими как UART, I2C,SPI, 1-Wire и периферийными устройствами: таймерами, АЦП/ЦАП, различными датчиками. Модуль подразумевает разделение на базовый трек (работа в простой среде разработки с библиотекой HAL для начинающих) и продвинутый трек (работа с библиотекой CMSIS для успевающих).

Результаты обучения

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

Структура модуля

Семестр Наименование дисциплины Кредитов Часов Форма контроля
5 Основы разработки программ на языке С 3 5/ЛБ-16/ЛК-16/СРС-76 Зач.
6 Архитектура микропроцессоров и микроконтроллеров 3 6/ЛБ-16/ЛК-16/СРС-76 Зач.
7 Основы программирования микроконтроллеров 3 7/ЛБ-16/ЛК-16/СРС-76 Зач.

Направления, для которых подходит данный модуль

# Код Направление Тип ФГОС
1 01.03.02 Прикладная математика и информатика ФГОС ВО 3++
2 09.03.01 Информатика и вычислительная техника ФГОС ВО 3++
3 09.03.02 Информационные системы и технологии ФГОС ВО 3++
4 09.03.04 Программная инженерия ФГОС ВО 3++
5 11.03.04 Электроника и наноэлектроника ФГОС ВО 3++
6 13.03.02 Электроэнергетика и электротехника ФГОС ВО 3++
7 15.03.01 Машиностроение ФГОС 3+
8 15.03.02 Технологические машины и оборудование ФГОС 3+
9 15.03.04 Автоматизация технологических процессов и производств ФГОС 3+
10 15.03.06 Мехатроника и робототехника ФГОС ВО 3++
11 27.03.02 Управление качеством ФГОС ВО 3++
12 27.03.05 Инноватика ФГОС ВО 3++

ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ И ИХ ИНТЕГРАЦИЯ В ПРОМЫШЛЕННОЕ ОБОРУДОВАНИЕ Текст научной статьи по специальности «Электротехника, электронная техника, информационные технологии»

Аннотация научной статьи по электротехнике, электронной технике, информационным технологиям, автор научной работы — Каменко Максимилиан Валерьевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по электротехнике, электронной технике, информационным технологиям , автор научной работы — Каменко Максимилиан Валерьевич

РАЗРАБОТКА КОМПИЛЯТОРА ДЛЯ СТЕКОВОЙ ПРОЦЕССОРНОЙ АРХИТЕКТУРЫ TF16 НА ОСНОВЕ LLVM
Автоматизированная генерация декодеров машинных команд
Эффективное программирование с учетом архитектурных особенностей цифровых сигнальных процессоров
Методика проектирования цифровых систем управления на базе AVR-микроконтроллеров
Методика применения языка Ассемблер для стеговложения информации в исполняемые файлы
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

PROGRAMMING OG MICROCONTROLLERS AND THEIR INTEGRATION INTO INDUSTRIAL EQUIPMENT

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.

Текст научной работы на тему «ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ И ИХ ИНТЕГРАЦИЯ В ПРОМЫШЛЕННОЕ ОБОРУДОВАНИЕ»

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

Каменко Максимилиан Валерьевич

инженер-системотехник, Quadcode, Кипр, г. Никорсия E-mail: maksimiliyan. kamenka@quadcode. com

PROGRAMMING OG MICROCONTROLLERS AND THEIR INTEGRATION INTO INDUSTRIAL EQUIPMENT

Systems engineer, Quadcode, Cyprus, Nicosia

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

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

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

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.

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

управляющих блоков в производственном оборудовании.

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

Библиографическое описание: Каменко М.В. ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ И ИХ ИНТЕГРАЦИЯ В ПРОМЫШЛЕННОЕ ОБОРУДОВАНИЕ // Universum: технические науки : электрон. научн. журн. 2024. 2(119). URL: https://7universum. com/ru/tech/archive/item/16762

В-третьих, интеграция таких микроконтроллеров в реальные объекты техники и испытание разработанного программного обеспечения.

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

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

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

Для проектирования прикладного программного обеспечения для микроконтроллеров наиболее распространены следующие инструментальные средства. В качестве сред разработки используются интегрированные среды проектирования от компаний 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% по сравнению с использованием встроенных функций на С. Это имеет важное значение для эффективной работы встраиваемых систем.

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

Параметр Ассемблер Язык С

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

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

Время умножения 100×100 матриц, мкс 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% медленнее. Пиковые значения разницы в производительности были зафиксированы для вычислительно-интенсивного алгоритма умножения

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

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

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

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

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

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

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

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

Очень важным является фактор оптимизации кода при компиляции. Так, анализ промежуточных файлов показал, что оптимизированный компилятор GCC с Ю2 для умножения матриц сгенерировал код, производительность которого отличалась от ассемблера только на 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,

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 с.

Разработка программного обеспечения Разработка ПО

От того, как написано программное обеспечение (ПО) зависит, как будет работать само устройство, его быстродействие, загрузка. Скорость отработки микроконтроллером программного обеспечения, написанного программистами разного уровня, может отличаться в разы. Ниже мы рассмотрим разработку ПО, применительно к микроконтроллерам. Но для создания системы способной, что–либо контролировать, или чем-либо управлять, к микроконтроллеру необходимо подключить датчики, модули памяти, исполнительные устройства, передающие и принимающие устройства, и прочие электронные компоненты. При «увязке» всех компонентов в систему необходима разработка ПО, которое создано исключительно для разрабатываемого устройства или системы. Мы создадим требуемые Вам устройства или системы, и разработаем ПО для их качественной и быстрой работы. Звоните! И мы решим Вашу задачу!

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

Программа (программное обеспечение) – это последовательность выполняемых микроконтроллером команд. Каждой команде в памяти соответствует свое число – код. При включении питания микроконтроллер один за другим считывает эти коды, осуществляет их дешифрацию (определяет, что ему нужно сделать), а затем исполняет одну за другой эти дешифрованные команды. Главная особенность памяти, это то, что занесенные в нее коды, сохраняются неизменными, при отсутствии питания микроконтроллера. Именно программное обеспечение определяет поведение всей системы. Все изменения и модификации программного обеспечения вносятся в микроконтроллер с помощью программатора. Один и тот же микроконтроллер, но с программным обеспечением, написанным под определённую задачу, может применяться в различных системах – для управления котлом теплоснабжения или в устройствах автоматизированной телефонной связи. В процессе создания программного обеспечения, программист пишет текст программы на компьютере так же, как он пишет любой другой текст. Затем он запускает специальную программу – транслятор. Транслятор – это специальная программа, которая переводит текст, написанный программистом, в машинные коды, то есть в форму, понятную для микроконтроллера. Написанный программистом текст программы называется исходным кодом. Код, полученный в результате трансляции, называется результирующим или машинным кодом. Именно этот код записывается в программную память микроконтроллера при помощи программатора.

Все языки программирования делятся на две группы:

— языки низкого уровня (машино-ориентированные);

— языки высокого уровня;

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

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

Типичным примером машино-ориентированного языка программирования, является язык Ассемблер. Этот язык максимально приближен к системе команд микроконтроллера. Каждый оператор (команда) этого языка, это, по сути, словесное название какой-либо конкретной команды машинного кода. В процессе трансляции такая команда просто заменяется кодом операции. Специфика языка Ассемблер состоит еще в том, что набор команд для этого языка напрямую зависит от системы команд конкретного микроконтроллера. В недавнем прошлом язык Ассемблер был единственным языком программирования для микроконтроллеров. Только он позволял эффективно использовать скудные ресурсы самых первых микроконтроллеров. Однако в настоящее время, когда возможности современных микроконтроллеров значительно выросли, для написания программного обеспечения, в основном используются языки высокого уровня, такие как Бейсик, СИ. Эти языки в свое время были разработаны для больших компьютеров. Но сейчас их широко используют для программирования микроконтроллеров. Языки высокого уровня отличаются тем, что они гораздо больше ориентированы на человека. Большинство команд языков высокого уровня не связаны с конкретными командами микроконтроллера.

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

В каких именно регистрах или ячейках памяти будут храниться значения, программист не решает. Программа – транслятор выбирает все это сама. Поэтому задача эффективности алгоритма полученной в результате трансляции программы целиком ложиться на программу – транслятор. В целом, программное обеспечение, написанное на языках высокого уровня, занимает в памяти микроконтроллера объем на 30 — 40% больший, чем аналогичное программное обеспечение, написанные на языке Ассемблер. И это в лучшем случае, бывает и больше. Однако если микроконтроллер имеет достаточно памяти и запас по быстродействию, то увеличение программы – не проблема. Преимуществом языков высокого уровня является существенное ускорение процесса разработки программы. Для программирования современных контроллеров не нужен программатор. Все программирование можно сделать по интерфейсу USB или RS232, RS-485. Пишется программа, при помощи компилятора переводится в машинные коды и загружается в микроконтроллер. Существует оптимизирующий компилятор, позволяющий повысить скорость исполнения кода (отработки программного обеспечения микроконтроллером) в несколько раз.

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

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

Вы звоните нам, описываете задачу так, как Вы её видите. Если принципиально мы можем принять задание в работу, Вы через форму обратной связи, в разделе «Контакты» , отправляете технические условия (ТУ), или техническое задание (ТЗ), или в письменном виде передаете то, что Вы говорили по телефону. Мы оцениваем возможные решения и примерную стоимость. Сообщаем Вам стоимость решения задачи. Если ориентировочная стоимость и срок разработки программного обеспечения , в принципе Вас устраивают, начинаем официальную часть: подписание договора, согласование технического задания, его утверждение, календарный план выполнения работ ит.д. В некоторых случаях, когда необходимо обрабатывать большое количество информации, связанной с Вашей задачей (техническое задание, техническая документация), мы оставляем за собой право оговорить стоимость работ по изучению предоставленной Вами информации, и подготовки коммерческого предложения по разработке программного обеспечения . В процессе работы над задачей может возникнуть необходимость в выезде на объект для согласования и уточнения вопросов с заказчиком, поиск дополнительной информации, проведение предварительных исследований. В этом случае, мы также оставляем за собой право оговорить стоимость вышеперечисленных работ. Если Вам удобно, то связаться с нами, и сделать предварительный запрос, можно через обратную связь в разделе «КОНТАКТЫ» .

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

Наши решения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *