embedded systems что это

Embedded systems: что это? Коротко про встраиваемые системы

Embedded программист — это уникальный специалист по работе со встраиваемыми системами управления приложениями в реальном времени. Данные системы (Embedded systems) состоят из 3-х основных вещей:

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

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

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

Embedded System — специальная система подобранных аппаратных и программных компонентов, которая отвечает за точное выполнение приложением всей возложенной на него функциональности. Часто такие системы разрабатывают для конкретных приложений или устройств. Embedded-программист — это специалист, который разрабатывает, тестирует и обслуживает эти системы.

Embedded system — что это?

Embedded System — это системы, которые выстраиваются на уровне микропроцессоров и микроконтроллеров. Они отвечают за какие-то специальные функции приложения или устройства и являются частью более крупных систем приложения, а не самостоятельной частью.

Где используются Embedded System?

Embedded System применяются во многих областях человеческой жизни. Так как IT-сфера постоянно развивается, то и применение встроенных систем также расширяет свою сферу деятельности. На данный момент Embedded System можно найти в:

бортовом компьютере автомобиля;

системах безопасности и сигнализации;

Как работают Embedded System?

ASIC — интегральные схемы;

FPGA — программируемые логические матрицы;

прочие компоненты, предназначенные для наладки взаимодействия с интерфейсом пользователя.

Как программируют Embedded System?

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

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

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

Заключение

технологий дополненной и виртуальной реальности;

Поэтому стоит рассмотреть Embedded-программирование как род своей будущей деятельности.

Мы будем очень благодарны

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

Источник

Embedded.Systems

Polaroid Camera

This project is creating a polaroid camera using a ARM Cortex M4 MCU and thermal printer (receipt printer). TTo insert highlight code inside of a post, it’s enough to use some specific tags, has directly described into the Jekyll documentation. In this way the code will be included into a.

Welcome To the Blog

Hello and welcome to the embedded.systems blog. Thank you for visiting out website. We are all recent graduates that are passionate about working with embedded systems and more. Meet the Authors: Sikenderali Ashraf Sikender likes meowers. Richard Li Richard likes board games. Tyler Ta Tyler likes bread. Nino Teruya Nino.

Typograhy example

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Id, aliquam magni et officiis nemo nihil aliquid placeat alias. Eum voluptates ducimus, nobis ex illum laboriosam quidem corrupti impedit ratione in voluptatum amet beatae facilis temporibus voluptate praesentium voluptatibus! At ab, iusto error amet eveniet debitis ipsa recusandae possimus minima sunt.

Code Syntax

Hello World

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Totam quasi maxime quas repudiandae nam id temporibus, at et non officiis consectetur voluptate deserunt officia minima placeat tempore illum asperiores quo assumenda praesentium? Facilis libero error ratione doloribus debitis delectus asperiores minima ab velit quam. Natus ea, vero totam recusandae autem.

Источник

Что такое встроенные системы, где они применяются и как разрабатываются

В этой статье представлена ​​информация о различных аспектах современных встроенных систем.

Что такое встроенная система?

Сегодня сложно представить современное мультимедийное электронное оборудование без возможности свободно выбирать параметры музыки, которую вы слушаете, или изображения, которое вы смотрите. Это возможно благодаря использованию микропроцессоров, управляющих работой этих устройств и размещенных внутри них (отсюда и название: Embedded System).

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

Комбинация методов и инструментов, используемых как в автоматизации, так и в информационных технологиях, позволила достичь совершенно нового качества. Несомненно, основной исходный контент содержится в термине: «Компьютерные системы управления». Они включают анализ и оценку компьютерных систем с точки зрения реализации управления объектами и процессами, а также необходимых требований к программному обеспечению для этих систем.

Развитие компьютерных систем и растущие требования к качеству контроля привели к появлению двух направлений в специализированных решениях для контроля. Это программируемые логические контроллеры (ПЛК) и микроконтроллеры. На основе этих тенденций создаются специализированные системы, которые выполняют все функции управления объектами или процессами и тесно связаны с ними.

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

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

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

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

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

Где применяются встроенные системы?

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

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

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

История встроенных систем

Первой современной встроенной вычислительной системой реального времени был компьютер Apollo Guidance Computer, разработанный в 1960-х годах доктором Чарльзом Старком Дрейпером из Массачусетского технологического института для программы Apollo. Управляющий компьютер Apollo был разработан для автоматического сбора данных и выполнения критически важных расчетов для командного модуля Apollo и лунного модуля.

Apollo Guidance Computer

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

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

Как работает встроенная система?

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

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

Как разрабатываются встроенные системы?

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

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

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

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

Популярный онлайн видео курс:

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

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

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

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

Будущие тенденции встраиваемых систем

Ожидается, что индустрия встраиваемых систем будет продолжать быстро расти благодаря постоянному развитию искусственного интеллекта (AI), виртуальной реальности (VR) и дополненной реальности (AR), машинного обучения, глубокого обучения и Интернета вещей (IoT).

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

Источник

Встраиваемые системы: Windows специального назначения

О могущественные хабрамэн и прекраснейшие хабравимен! Ничтожный заметил, что сура о блистательной Windows Embedded ещё не записана в книге мудрости хабра. Да будет дозволено мне, недостойному, поведать вам одну поучительную историю о том как был построен и внедрён особо пуленепробиваемый Windows ® ™ на объектах одной российской железнодорожной корпорации.

Как мы дошли до жизни такой

Итак, одним утром, в нашу скромную обитель Системного ПО прибыл гонец от программистов с ужасными и печальными новостями. Истинно говорю вам — программцы в командировке не смогли обновить ПО на рабочем месте, т.к. оное обуял шайтан и заселил его вирусами, троянами, порнобаннерами и контерстрайком (сауирщенно неуиновные пользователи были сауирщенно ни при чём).

ПО представляет собой АРМ электромеханика СЦБ, написано на VC++ 6 + MFC + WINAPI.

Наш мудрейший халиф, узнав о таком непотребстве, созвал диван. И так говорили придворные мудрецы и звездочёты:

Антивирус не был установлен по причине отсутствия на станциях интернета (станции раскиданы по всей поверхности России и ездить с офлайн базой для обновления — как-то не вариант). На некоторых станциях есть выход в интранет, где есть корпоративный антивирус, но во-первых: не на всех, во-вторых: антивирус там — хтонический Symantec, старый и добрый.

Спустя некоторое количество служебок, было принято решение заменить десктопный Windows на что-то более прочное и надёжное, но при этом win32-совместимое. Из всей массы подходящих платформ был выбран Windows XP Embedded, т.к. по нему уже имелись наработки да и вообще, классная себе такая система.

Windows XP Embedded — это встраиваемая компонентная операционная система на базе Windows XP Professional Edition и предназначена для применения в различных встраиваемых системах: системах промышленной автоматизации, банкоматах, медицинских приборах, кассовых терминалах, игровых автоматах, VoIP-компонентах и т. п. Windows XP Embedded включает дополнительные функции по встраиванию, среди которых фильтр защиты от записи (EWF и FBWF), загрузка с флеш-памяти, CD-ROM, сети, использование собственной оболочки системы и т. п.

В настоящий момент известна как Windows Embedded Standard.

Windows on steroids

Но это всё скучно и просто. Начальство прониклось идеей модульного ПО™, которая заключается в разделении прикладного, системного ПО и конфигурации на «модули» — образы ФС, объединяющие ПО по функциональным признакам. Плюсы такого подхода:

Очевидных минусов вроде бы нет, казалось бы — внедряй и радуйся. Но то, что для QNX (изначально модульная система разрабатывалась для наших промышленных компьютеров) было просто и естественно в Windows стало адовой мигренью и выглядело как попытка скрестить морского ежа с подъёмным краном. В итоге реализовать таки получилось, но обо всём по порядку.

Усекновение Windows

Проблема отключения PnP-устройств может быть решена несколькимиспособами (а ещё есть devcon), но этот меня привлёк своей глобальностью, т.е. заодно с USB-накопителями будут отключены любые другие несанкционированные периферийные устройства, но, при этом сохранится возможность заменить USB-мышь\клавиатуру (т.к. драйвер имеется в системе и он содержит цифровую подпись — такие драйвера устанавливаются автоматически)

Монтирование образов

Поиски ПО для монтирования образов в Windows были долгими и мучительными. Попадались только реализации RAM-drive, что безусловно классно, но не то. Вспомнил, что в комплект Windows Virtual Server включена утилита для монтирования файлов vhd, но как добавить её в мою WinXP и легально ли это вообще, мне так и не открылось. Проект века уже почти накрылся медным тазом, я прикидывал как бы отделаться меньшей кровью и избежать разработки собственного драйвера, как вдруг в гугле всплыла ссылка на отличнейший filedisk. Подходит по всем статьям — может монтировать образы как логические диски (эмулировать носитель он не умеет, но это и не требовалось), выполнен в виде драйвера, что позволяет легко добавить в проект XP Embedded, из коробки содержит консольную утилиту для управления дисками — то что надо для использования в стартовых скриптах. В общем — стопроцентное попадание.

Драйвер установлен, но где же взять сами образы? Берём dd for windows и создаём из её виртуального /dev/null образы требуемого размера. Подключаем их с помощью filedisk, видим логические диски без ФС, создаём на них NTFS, заполняем содержимым.

На одном из образов я разместил стартовые скрипты, которые запускаются после логона и производят некоторые настройки(установка IP-адреса, разрешения экрана и т.п. из конфиг-файла). Ясно, что к моменту логона, образы уже должны быть примонтированы. И тут я перепробовал кучу вариантов — Schtasks, который позволяет выполнять задачу при логоне (но он срабатывал как-то далеко не всегда), загонял скрипт монтирующий диски в сервисы с помощью sc — при этом, содержимое образов было недоступно пользовательским аккаунтам от имени которых запускалось прикладное ПО (как вариант можно было бы перенести задачи из скриптов в службу, но скриптоложство мне почему-то милее этого бездушного C++). В итоге сколхозил — AutoExNt выполняет монтирование перед логоном, а задачи конфигурирования системы исполняются с помощью зашифрованных cpau-заданий от имени администратора (т.к. автологон происходит под аккаунтом обычного пользователя). Это был первый из стабильно работающих вариантов, а отладка к тому моменту так меня достала, что плюнул на уродство способа и оставил как есть.

Дополнительно, разработал небольшую простую утилитку автозапуска, т.к. из проекта был исключён Explorer Shell и ключи авторана в реестре никто не обрабатывал, а программы на старте запускать кому-то надо было.

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

Развёртывание

Windows XP Embedded не содержит в себе инструментов для разметки и форматирования диска, в отличие от обычной Windows XP. Т.е. установка XPe заключается в копировании структуры каталогов проекта в корень раздела, отформатированного в FAT32/NTFS и помеченного как активный (флаг boot установлен). Комплект поставки XPe включает в себя диск WinPE, который содержит необходимые для разметки утилиты, но сценарии применения этого диска довольно туманны(например, он не может быть использован как диск восстановления). Похвалив про себя такую заботу о пользователях, я решил вообще не связываться с продукцией Microsoft для развёртывания XPe (хотя есть вроде бы бесплатный Windows AIK, но по предыдущему опыту попыток разобраться в лицензионных ограничениях продуктов Microsoft было принято решение поискать чего-то на стороне).

Решил попытать счастья с GNU/Linux, т.к. драйвер ntfs-3g уже довольно давно был стабильным и вполне себе работал (и, кстати, в довольно странных местах — по блажи Realtek, в SDK для их мультимедиа-платформ используется как ФС по умолчанию для внешних накопителей). Взял Live-CD Ubuntu LTS, очистил его от логотипов и упоминания Ubuntu (ибо для глубокой модификации системы Canonical выдвигает такие требования) и начал кастомизировать. Выбор дистрибутива был обусловлен личными предпочтениями.

Первая версия среды развёртывания представляла из себя bash-скрипт, который общался с пользователем с помощью zenity. Простенько и со вкусом. Была забракована, как недостаточно божественная в плане UI.

Вторая версия была написана на Mono (C# — корпоративный стандарт) и содержала в себе чуть ли не все графические элементы GTK. Высокая комиссия отметила, что UI по-прежнему недостаточно божественен, но таки жизнеспособен.

Сама процедура установки состояла из вызова внешних утилит — parted для разметки, mkfs.ntfs из пакета ntfsprogs(ntfstools) для создания ФС и rsync для копирования данных с установочного носителя.

Дальше — ребут и переход непосредственно к развёртыванию Windows Embedded.

Заключение

Сейчас Windows XP Embedded (Windows Embedded Standard 2009) стремительно теряет актуальность (хотя поддержка будет продолжаться до 2015 года) — на смену ей пришла Windows Embedded 7, которая гораздо, гораздо, гораздо удобнее XPe, однако разработкой с её использованием занимается мой коллега, я же описал (как мог, хе-хе) собственный опыт. Надеюсь кто-то найдёт что-нибудь полезное в этом сборнике вредных советов.

В завершении приведу список полезных ресурсов по Windows Embedded:

Источник

Разработка встроенного ПО: введение

Привет, Хабр! Представляю вашему вниманию перевод статей Chris Svec, оригинал здесь. Публикуется с разрешения автора по лицензии CC-A-NC-ND.

Embedded software engineering 101: введение

Я запускаю цикл статей по обучению разработке встроенного программного обеспечения. Мы начнем с описания простого микроконтроллера, и после того, как Вы поймете, как он работает, разовьем это до понимания работы относительно сложных систем, таких как Fitbit или Nest.
Я назвал эту серию Embedded Software Engineering 101, и она начинается с этой недели прямо здесь в этом блоге.

Продолжайте читать для дальнейших объяснений и подробностей.


Одни строительные блоки на других строительных блоках.

Я работаю со встроенными системами и разрабатываю микросхемы уже более 14 лет. Мне нравятся встроенные системы — железо, софт и ограничения, которые связывают их вместе.
Любительская электроника и такие идеи, как Arduino, Adafruit и Sparkfun дали возможность легко накидать что-то из железа и софта за выходные (или месяц, или семестр), создав что новое, интересное и может быть даже полезное.

Это здорово! Предоставление людям возможности созидать — изумительная штука; если бы я хотел выражаться выспренно, то с придыханием назвал бы это «демократизирующей технологией».

Большая часть любительских проектов единовременные. Вы собираете нечто, делаете это настолько хорошим, насколько хватает времени или энергии, и двигаетесь дальше.
Я провел свою карьеру на противоположном конце спектра — создавая продукцию, которая выпускается в сотнях тысяч или миллионах или больше экземпляров — и это требует совсем другого образа мышления и системного подхода.

Я хочу учить людей, как писать встроенное ПО для такого рода систем. Я уже давно вынашивал эту идею курса/руководства/книги/блога «Embedded Software Engineering 101», и благодаря блогу Embedded.fm начинаю ее реализацию сейчас.

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

Моя цель — чтобы к концу этого цикла вы могли разобраться как работает Fitbit, термостат Nest или подобная встроенная система. Вы сможете начать работать со встроенными программными системами используя профессиональный опыт.

Embedded Software Engineering 101 предназначен для:

Так вот, я не Фейнман, но я уверен, что лучший способ понять систему — это начать с основ. Вооруженные этим пониманием, вы сможете создавать простые встроенные системы с простым софтом. И поняв сначала очень простую программу, вы сможете развивать это, создавая более сложное ПО по мере роста опыта.

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

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

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

Так что с этого мы и начнем в следующей статье.

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

Embedded software engineering 101: основы микроконтроллера

Мы начнем наше путешествие Embedded Software Egineering 101 со скромного микроконтроллера. Микроконтроллер (или микропроцессор) это основной строительный блок всех вычислительных систем, встроенных и прочих.

МК кажется довольно сложным, но он состоит из трех простых вещей: инструкции, регистры и память. Инструкции это те штуки, которые микроконтроллер знает как выполнять. Простой МК умеет выполнять не так уж много — у него может быть например 20 или 30 инструкций. В дальнейшем в этом цикле я буду использовать микроконтроллер MSP430 от Texas Instruments, у которого только 27 инструкций.


Просто фотография МК (TI MSP430F5529)

Эти 27 инструкций — единственное, что MSP430 умеет делать. Он может сложить два числа, вычесть из одного числа другое, переместить числа с одного места в другое или выполнить 24 другие простые операции. 27 операций может показаться недостаточно чтобы сделать что-либо полезное, но на самом деле их хватит с избытком, чтобы выполнить любую мыслимую программу.

Хорошо, значит у микроконтроллера есть инструкции, которые делают что-то с числами. Но где находятся эти числа? Регистры и память! Инструкции оперируют числами, которые хранятся в регистрах и памяти.

Регистры это очень быстрое хранилище, содержащее числа, которыми оперируют инструкции. Можно думать о них, как об используемом инструкциями блокноте. МК содержит немного регистров, обычно 8-32. Например, у MSP430 16 регистров.

Память это тоже хранилище для чисел, но она гораздо объемнее и медленнее чем регистры. У микроконтроллера может быть 64 кБ, 256 кБ или даже более 1 МБ памяти. У MSP430F5529 около 128 кБ памяти; это более чем в 8000 раз превосходит количество его регистров!

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

Давайте рассмотрим вымышленный, но характерный пример микроконтроллера.

Пусть скажем у нашего МК 4 регистра и 8 ячеек памяти. Регистры обычно называют как-нибудь креативно, например «R0», «R1» и т.д., поступим и мы так же. На ячейки памяти обычно ссылаются по их номерам, также называемым адресами памяти, начиная нумерацию с 0. Вот так будут выглядеть наши регистры и память:

И теперь я помещу в них некоторые значения:

Теперь нашему вымышленному микроконтроллеру нужны какие-нибудь инструкции.
Совокупность инструкций, которые знает МК, называется его набором инструкций. Пусть скажем в наборе будет три инструкции: ADD (сложить), SUB (сокращение от «subtract» — вычесть) и MOVE (переместить). Инструкции должны получать откуда-то числа, которыми они оперируют, и также помещать куда-то свои результаты, так что некоторые из них содержат информацию о том, где находятся входные и выходные данные.

Пусть, например, у нашей инструкции ADD два источника и один приемник данных, и все они должны быть регистрами. Руководство может описывать эту инструкцию примерно так:

ADD регИст, регПрм
Инструкция ADD добавляет значение регистра «регИст» к значению регистра «регПрм» и сохраняет результат в регистре «регПрм»
Резюме: регПрм = регИст + регПрм
Пример: ADD R1, R2 выполняет операцию R2 = R1 + R2

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

«ADD R1, R2» — это язык ассемблер для микроконтроллера, это нативный язык программирования МК.

Давайте определим SUB в том же стиле:

SUB регИст, регПрм
Инструкция SUB вычитает значение регистра «регИст» из значения регистра «регПрм» и сохраняет результат в регистре «регПрм»
Резюме: регПрм = регПрм — регИст
Пример: SUB R3, R0 выполняет операцию R0 = R0 — R3

И наконец пусть у инструкции MOVE один источник и один приемник, и либо:

1. MOVE регИст, регПрм
2. MOVE памИст, регПрм
3. MOVE регИст, памПрм
Инструкция MOVE копирует данные из аргумента Ист в аргумент Прм.
Резюме: есть три типа инструкции MOVE
1. регПрм = регИст
2. регПрм = мемИст
3. мемПрм = регИст
Пример: я покажу примеры инструкции MOVE ниже в этом посте.

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

Название «move» может создать впечатление, что операнд-источник инструкции уничтожается или очищается, но на самом деле он остается в покое, модифицируется только приемник.
Давайте пройдемся по нескольким примерам используя наш вымышленный микроконтроллер.
На старте наши регистры и память выглядят так:

Теперь выполним на МК следующую инструкцию:

Она берет значение R1, складывает его со значением R2 и сохраняет результат в R2. Процессор выполняет большую часть инструкций за одну операцию, но я разобью выполнение каждой инструкции ADD, SUB и MOVE на несколько шагов стрелкой «=>» ведущей через замены (регистр/память => значение):

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

Обратите внимание, что R1 неизменен; изменился только регистр-приемник R2.
Следующей давайте попробуем инструкцию SUB:

Она берет значение R3, вычитает его из значения R0, и сохраняет результат в R0:

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

И наконец давайте попробуем пару версий инструкции MOVE:

Эта инструкция MOVE копирует в R0 значение R2:

И теперь регистры выглядят так:

Дальше мы скопируем регистр в память:

Эта инструкция MOVE копирует в ячейку памяти 3 значение R3. Квадратными скобками в нашем наборе инструкций обозначаются ячейки памяти.

Регистры неизменны, но память меняется:

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

Здесь значение ячейки памяти 6 копируется в регистр R0:

Память неизменна, а регистры теперь выглядят следующим образом:

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

Конечно я опустил множество деталей. Например, как МК получает инструкции для выполнения?

Есть ли более интересные инструкции, чем только простые математические и инструкции копирования? Память это то же самое, что RAM или флэш, или нет?

Мы ответим на эти вопросы в следующей статье.

Источник

Читайте также:  профессии в силовых структурах какие
Сказочный портал