Олег Антонян

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

Upload: forkconf

Post on 15-Jun-2015

283 views

Category:

Documents


4 download

DESCRIPTION

Что такое Embedded development

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: Олег Антонян

Демо!