Олег Антонян

Post on 15-Jun-2015

283 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Что такое Embedded development

TRANSCRIPT

Embedded System Development

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

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

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

Agenda

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

45 минут на всё

О себе

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

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

What is engineering?

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

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

Абстракция

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

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

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

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

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

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

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

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

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

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

by Ben Coxworth

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

Что такое embedded system?

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

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

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

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

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

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

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

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

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

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

Real time means right now!

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

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

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

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

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

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

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

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

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

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

FreeRTOS vs GNU/Linux

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

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

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

Пример

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);

} }

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

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

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

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

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

Пример

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 */ } }

Демо!

top related