Top Banner
Embedded System Development Что это такое? Где это применяется? Как мы за полвека перешли от электромагнетиз ма до высокоуровневог о программировани я Антонян Олег AntLabs software development
19

Олег Антонян

Jun 15, 2015

Download

Documents

ForkConf

Что такое Embedded development
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Олег Антонян

Embedded System Development

Что это такое? Где это применяется?

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

Антонян Олег AntLabs software development

Page 2: Олег Антонян

Agenda

О себе Главное слово - астракция Собственно embedded systems Демо! Вопросы

45 минут на всё

Page 3: Олег Антонян

О себе

2 года профессионально занимаюсь разработкой электронных устройств и ПО для них

Фриланс → маленькая компания С 6 лет радиолюбитель

Page 4: Олег Антонян

What is engineering?

Это целенаправленное применение науки Phase 1 — Придумать новую технологию, закон,

материал, etc (учёные-теоретики) Phase 2 — ??? (инженеры-практики) Phase 3 — Profit!

Page 5: Олег Антонян

Абстракция

Электромагнитизм, движение зарядов

Электротехника, электрические цепи

Цифровая схемотехника

АЛУ, концепция “вычисление”

“Машинные коды” АЛУ

Более 9000 абстракций...

Page 6: Олег Антонян

“Закон дырявых абстракций”

The Law of Leaky Abstractions by Joel Spolsky Как ненадёжные низшие уровни обеспечивают

надёжность высших и всегда ли это работает? http://joelonsoftware.com/Articles/LeakyAbstractions.html

Page 7: Олег Антонян

Wonder why we don't crash like computers? Yale explains

by Ben Coxworth

http://www.gizmag.com/yale-scientists-compare-bacteria-to-linux/15037/

Page 8: Олег Антонян

Что такое embedded system?

Page 9: Олег Антонян

Причём тут школьная физика?

Разработка embedded устройств требует знания электроники и низкоуровневого программирования

Вы видите как запись битов в регистры изменяет уровни напряжения на выводах процессора

“То что нельзя сделать с помощью кода приходится делать с помощью паяльника”

Page 10: Олег Антонян

Ужасная терминология

Слово “embedded” как нельзя хуже подходит для описания этой области

Согласно терминологии – веб-сервер в датацентре – embedded system?

Деление на низкоуровневое и высокоуровневое программирование как и деление на настольные ПК и устройства управления кофеваркой – условное

Page 11: Олег Антонян

Так в чём же отличия?

Различные подходы к разработке Различные инструменты Различные предметные области Real-time

Page 12: Олег Антонян

Real time means right now!

Часто в устройствах на микроконтроллерах используется подход “real time”

Гарантированный отклик на внешнее событие, гарантированное время работы потока в RTOS

Page 13: Олег Антонян

Инструменты разработки

На самом деле не такие они и разные Доминирует язык C и Ассемблер, за ним C++,

кое-где приходит .NET micro framework и C#, потихоньку наступает Java (недавно выпущена бета-версия для STM32)

В более крупных системах на embedded GNU/Linux или специальных RTOS в принципе нет ограничений на языки/фреймворки кроме аппаратных

Page 14: Олег Антонян

Гиганты и малявки

Под крупными системами подразумеваются устройства под управлением Linux или аналогичных по “весовой категории” RTOS

Linux != RTOS, несмотря на существование CONFIG_PREEMPT_RT

Пример популярной RTOS для микроконтроллеров - FreeRTOS

Page 15: Олег Антонян

FreeRTOS vs GNU/Linux

В ядре только простейший планировщик, IPC (очереди, мьютексы и тд.), “выделятор” динамической памяти

Без MMU нет виртуальной памяти Доступ к периферии напрямую из процессов

(хотя на процессорах с MPU возможно разделение на user и kernel space)

Page 16: Олег Антонян

Пример

int main(void) {

xTaskCreate(thread_func,”name", STACK_DEPTH, &params, PRIORITY, &handle)

vTaskStartScheduler();

/* will only get here if there was no memory to create the idle task */return 1;

}

void thread_func(void *params) {

while(1) { /*do stuff */

/* and sleep for 10 mS */vTaskDelay(10 / portTICK_RATE_MS);

} }

Page 17: Олег Антонян

Есть ли жизнь без ОС?

Ага. Большинство устройств на микроконтроллерах не имеют ОС

Вся работа выполняется в одном бесконечном цикле и прерываниях

Не нужно беспокоиться о thread-safety Сложнее масштабировать, но для простых

устройств нет нужды использовать ОС

Page 18: Олег Антонян

Пример

int main(void) { while(1) { if(some_flag) { do_some_stuff(); } if(some_other_flag) { do_some_other_stuff(); } /* here we can shut down CPU and wait for interrupt */ } }

Page 19: Олег Антонян

Демо!