Embedded systems: что это? Коротко про встраиваемые системы
Embedded System — это системы, которые выстраиваются на уровне микропроцессоров и микроконтроллеров. Они отвечают за какие-то специальные функции приложения или устройства и являются частью более крупных систем приложения, а не самостоятельной частью.
Пример применения таких систем можно увидеть в любом современном мультимедийном оборудовании. Embedded System — это возможность выбирать музыку, которую хотите слушать , или фотографию , которую хотите просмотреть. Все это становится доступным благодаря применению микропроцессор ов , которые управляют данными функциями. А работа этих микропроцессоров — это и есть наши рассматриваемые системы.
Embedded System — это не весь гаджет или персональный компьютер. Это лишь небольшая его часть, которая отвечает строгим требованиям к системе. Каждая такая система может выполнить лишь ограниченное количество операций, на которые она запрограммирована. Исходя из своего назначения, Embedded System может означать всего лишь «прошивку» для какого-то устройства или целую операционную систему с набором программного обеспечения , опять же , для какого-то другого устройства.
Где используются Embedded System?
-
измеряющем оборудовании: осциллограф, анализаторы и т. д . ;
-
бортовом компьютере автомобиля;
-
телекоммуникациях;
-
медицинском оборудовании;
-
производственных станках;
-
разнообразных роботах;
-
бытовой технике;
-
разнообразных гаджетах;
-
банкоматах;
-
кондиционерах;
-
навигационных системах;
-
системах безопасности и сигнализации;
-
и др.
Как работают Embedded System?
-
ASIC — интегральные схемы;
-
FPGA — программируемые логические матрицы;
-
прочие компоненты, предназначенные для наладки взаимодействия с интерфейсом пользователя.
Как программируют Embedded System?
Программирование Embedded System не ограничивается только знаниями самого языка программирования, также нужно понимание электроники, информатики, автоматизации процессов, робототехники и друго го — многое зависит от области применения встраиваемых систем. Поэтому можно сказать, что Embedded-программист — это не просто программист, а специалист широкой направленности.
Разработка Embedded System будет состоять из продумывания аппаратной части системы и проработк и программных скриптов. Программные скрипты бывают разной сложности — это зависит от приложения , для которого они разрабатываются. Многие прогрессивные сферы, такие как медицина, авиация, вооружение, космос, роботы и др. , имеют собственные библиотеки и инструменты для разработки своих встраиваемых систем. Поэтому Embedded-программист в этих сферах — это очень узконаправленный специалист, который владеет инструментами только для конкретной сферы деятельности.
Чтобы встраиваемая система получилась максимально успешной, к ее разработке нужно подходить очень ответственно и обязательно хорошо продумать архитектуру и функциональность. Очень часто небольшие ошибки приводят к тотальному провалу систем, поэтому программирование должно быть аккуратным, а тестирование — очень тщательным.
Иногда Embedded System бывают настолько сложными, что их разработка превращается в целое событие, которое управляется несколькими командами инженеров и программистов.
Заключение
-
искусственного интеллекта;
-
технологий дополненной и виртуальной реальности;
-
машинного обучения;
-
робототехники.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
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 предназначен для:
- Выпускников вузов в сфере компьютерных наук, компьютерной инженерии или электроники, интересующихся встроенными системами.
- Электронщиков-любителей, желающих более глубоко понять, как работает их система на Arduino, и узнать, как им двигаться дальше (и нужно ли!).
- Профессиональных программистов без опыта со встроенными системами, желающих сместиться вниз по технологическому стеку и понимать, как они работают.
- Инженеров, работающих со встроенными системами и желающих понять, чем занимаются их коллеги-программисты.
Так вот, я не Фейнман, но я уверен, что лучший способ понять систему — это начать с основ. Вооруженные этим пониманием, вы сможете создавать простые встроенные системы с простым софтом. И поняв сначала очень простую программу, вы сможете развивать это, создавая более сложное ПО по мере роста опыта.
Основы в первую очередь — это конечно только мое личное убеждение. Множество людей сделали полезные штуки с Ардуино без понимания чего бы то ни было из основ. Этот цикл статей для тех, кто все-таки хочет понимать основы и все, что на них построено.
Конечно мы должны задаться вопросом — где правильный уровень чтобы начать с этих самых «основ»? Транзисторы и логические вентили? Нет, это слишком низкий уровень для старта со встроенным ПО. Подключение к распространенным датчикам? Нет, это слишком высокий уровень, требуется слишком много знаний чтобы начать с этого.
Я думаю правильный уровень основ это встроенный микропроцессор. Не обязательно понимать физику или электронику чтобы использовать встроенный микропроцессор, также не обязательно быть экспертом в программировании.
Так что с этого мы и начнем в следующей статье.
Предупреждение о предвзятости: в прошлой жизни я был архитектором/разработчиком процессоров. Начать этот цикл с понимания как работает ЦПУ может быть не лучшим способом для понимания встроенных систем, но именно так работает мой мозг. Обязательно попробуйте другие курсы/руководства и т.д., если не станете понимать этот после нескольких статей.
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 R1, R2» — это язык ассемблер для микроконтроллера, это нативный язык программирования МК.
Давайте определим SUB в том же стиле:
И наконец пусть у инструкции 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 или флэш, или нет?
Embedded development
For a number of years, Developex has been working on different types of embedded development. Starting from firmware for microcontrollers to complex AI camera systems, our team of highly skilled engineers is happy to help.
Currently our team consists of more than 30 embedded developers and we’ve already completed more than 30 projects.
Not only is our development team strong, Developex works with the best hardware suppliers. We are an authorized partner of Microchip and Digi Key, Nordic Semiconductors, Dialog Semiconductors, Texas Instruments, C-Media, Avnera, CSR, NXP, STMicroelectronics, and many others are among our partners. This allows us the ability to help our customers with hardware selection.
Developex works with its clients to understand the specific needs of their projects. We customize our efforts to meet those needs without the bloat and extra costs that sometimes come when using an engineering contractor. Everyone working on your project is directly contributing to its success.
The industries with which we have experience include but are not limited to gaming, audio, home appliances, automotive, marine, etc.
If you are looking for a successful outsourced embedded development team, please contact us to discuss a project of any size and complexity. It takes up to 2 weeks to prepare a proposal that would fit your project goals.
To begin the project discussion, send us a general description and/or requirements and we will prepare a time and budget estimate. If you wish, you are welcome to send hardware samples to us as well.
As an option, our team can advise which hardware would be the best fit for your project requirements and needs.
Definition
Embedded software is computer software, written to control machines or devices that are not typically thought of as computers, commonly known as embedded systems. It is typically specialized for the particular hardware that it runs on and has time and memory constraints. This term is sometimes used interchangeably with firmware.
A precise and stable characteristic feature is that no or not all functions of embedded software are initiated/controlled via a human interface, but through machine-interfaces instead.
Manufacturers build embedded software into the electronics of cars, telephones, modems, robots, appliances, toys, security systems, televisions, and digital watches, for example. This software can be very simple, such as lighting controls running on an 8-bit microcontroller with a few kilobytes of memory and a suitable level of processing complexity or can become very sophisticated in applications such as airplanes, process control systems, etc.
Embedded development is widely used in consumer electronic products and industrial solutions.
The most critical features of embedded systems are their greater reliability, accuracy, and performance speed enabling real-time computing. They have a smaller size and lower power consumption, which allows them a wider variety of applications.
Any device with built-in digital interface computing belongs to embedded systems. Such a system can be implemented in a standalone device or as a part of a larger system as it communicates with the internet, Bluetooth, or other communication channels.
Developex can assist you with the following:
- Custom embedded software and firmware development for gaming peripherals, PC LED and fan controllers, audio, consumer electronics, smart home, home appliances, IoT devices, etc.
- Proficiency with development for a wide range of MCUs (TI, STN, NXP, Nordic, Avnera, CSR, Cypress, Atmel, Microchip) and single-board application processors based on Linux Kernel.
- DSP and audio processing on hardware.
- Building multifunctional hardware solutions with/without RTOS
- Vast experience using low power technologies for data transmission (BLE, LPWAN)
- Proficiency with Wi-Fi, BT, CAN, RF, USB, ethernet
- Apple MFi support. MFi certification assistance
- DSP and audio processing on hardware
- Efficient adaptation of different data sensors for various embedded solutions (GPS, IMU, and sensor fusion)
- Training and adoption of machine learning algorithms to the embedded environment
- Measurement systems
- Battery management system
- Alexa voice services on the embedded platform based on MCUs
Technology stack
Languages: C, C++, Python, Qt.
Core architecture:
Linux Kernel (single board application processors) Raspberry Pi, Orange Pi, BeagleBone.
RTOS FreeRTOS, Micrium, CoOs, ChibiOS/RT, ThreadX, TI-RTOS
Development Tools
Eclipse-based IDEs, Netbeans, Code::blocks, Em::blocks, CoCox, VisualStudio, AtmelStudio, AVR Studio, STM32Cube, QTCreator, P-CAD, Qt, EasyEDA, PSoC Creator EmBitz, IAR workbench, PyCharm, Visual Studio Code.
Interfaces
Basic:
SPI, I2S, UART, I2C, 8080/6800 parallel bus, SDIO, Ethernet, USB, 1 Wire, DCMI
Industrial
RS232, RS485, RS422, CAN, LIN
Wireless
Proprietary RF, BT, BLE, WiFi, GSM modules, IrDA.
Examples of embedded software:
More Articles on embedded development from our blog:
Our Methodology for Project Management
We base our work on the agile paradigm (Scrum/Kanban) and on effective communication by our project and delivery managers with the product owner from the client’s side.
We believe that fast reaction in a constantly changing environment and having a strategic “map” of possible impacts in place kept up-to-date, helps prevent risk and deliver the best overall results.
Developex can work with you to cover the full software development cycle, from software product design and planning, requirements analysis, UI/UX, firmware and software development, to testing and 24/7 support upon project completion.
Embedded-разработка программного обеспечения для электронных приборов
Embedded разработка – что это?
В переводе с английского embedded означает встроенный, а embedded разработка – это создание ПО, встраиваемого непосредственно в прибор. С его помощью осуществляется управление устройством. В повседневности мы привыкли называть такое обеспечение прошивкой. Она применяется везде, где есть микроконтроллеры либо микропроцессоры: смартфоны, фотоаппараты, телевизоры, холодильники, СВЧ-печи – в этот список входит большая часть современной электроники.
Главные этапы разработки встроенного ПО
В соответствии с видом, масштабом и требованиями проекта формируется концепция создания. Вот основные этапы:
- подготовительные работы;
- создание проекта;
- разработка, которая включает в себя: дизайн, код, проверку (в которую входят эксплуатационные тесты), документацию;
- поддержка, состоящая из сопровождения и продвижения проекта.
Расмотрим подробней процесс разработки встроенного программного обеспечения.
Дизайн и прототипирование
Это следующая по значению составная часть продукции, которая определяется сразу после технических параметров. Именно дизайн и последующее прототипирование оказывает непосредственное влияние на продуктивность и оперативность взаимодействия потребителя с прибором. Потребности и основные условия дизайна формируются в техническом задании. Как показывает практика, самые важные из них – элементарность, легкость в управлении, инстинктивность и минимум усилий на управление. Также не последнюю роль играют эстетика и гармоничное соответствие общему стилю организации либо продукции. Как только будет разработана внешняя и внутренняя оболочка, можно будет приступать к наполнению ее кодом.
Мы подготовилидетальный разбор, как осуществляется hardware разработка. Прочесть материал можно тут.
Написание кода
Кодинг является самым важным этапом после прототипирования. От него напрямую зависит, заработает встроенная embedded система или нет. Этот процесс сопровождается не только написанием строк кода, но и тестированием на предмет ошибок до компиляции и багов после. Сложность кода зависит от сложности команд, которые даются устройству. Чем проще его функционал – тем меньше строк кода задействовано.
Проверка
Качественная разработка встроенных программ невозможна без тестирования на каждой стадии работы. План проверок также формируется на этапе составления технического задания. Итоги тестов отражаются в документации. Этот этап позволит выявить и устраинить все возможные ошибки изначально. В тестирование на этом этапе входит полноценная проверка работы всех систем – и корпуса, и прошивки.
Документация
Данная операция включает фиксацию плана, всего процесса и итогов создания ПО. Она содержит абсолютно все первоначальные сведения: техническое задание, макетирование, рабочие планы, расходы, проверки, перечень поставленных задач и их исполнителей в определенный отрезок времени, отчетности и тому подобное. Документирование требуется для оперативного и четкого определения ошибочных действий, прозрачности сотрудничества, является юридической частью соглашения. Также с ее помощью задаются стандарты дальнейшего производства.
Сложности, связанные с разработкой встроенного ПО
Встроенное программное обеспечение достаточно трудно сопровождать. К примеру, вами были созданы программы для микроволновых печей. После поставки обеспечения изготовителю множество изготовленных приборов разойдется по полкам сотен магазинов. Если одна из СВЧ-печей придет в негодность по вине недоработанного софта, гораздо легче возместить штраф, нежели возвращать аппарат на предприятие и осуществлять диагностирование, сняв с продаж неудачную партию. По этой причине при создании встроенного ПО появляются следующие ограничения:
- В приборы никогда не ставится наполовину действующая программа
- Качеству софта уделяется особое внимание ввиду того, что после встраивания его внутрь корпуса изменить что-либо будет достаточно проблематично. Поэтому пристальное внимание уделяется стадии опытной эксплуатации: небольшая партия приборов оснащается данной программой, затем проводятся совокупные тесты в разных эксплуатационных режимах. Специалист собирает максимальное количество данных о динамике функционирования софта. После чего производится подробнейший анализ и при необходимости доработка программного обеспечения.
Студия KLONA предлагает embedded разработку и сопровождение проекта на всех этапах – от идеи до серийного выпуска. Помощь специалистов поможет избежать ошибок и недоработок. У вас есть идея? Напишите нам!