Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Олег Антонян

458 views

Published on

Что такое Embedded development

  • Be the first to comment

  • Be the first to like this

Олег Антонян

  1. 1. Embedded System Development Что это такое?  Как мы за полвека Где это применяется? перешли от электромагнетизма до высокоуровневого программированияАнтонян Олег AntLabs software development
  2. 2. Agenda О себе Главное слово - астракция Собственно embedded systems Демо! Вопросы45 минут на всё
  3. 3. О себе 2 года профессионально занимаюсь разработкой электронных устройств и ПО для них Фриланс → маленькая компания С 6 лет радиолюбитель
  4. 4. What is engineering?Это целенаправленное применение науки Phase 1 — Придумать новую технологию, закон, материал, etc (учёные-теоретики) Phase 2 — ??? (инженеры-практики) Phase 3 — Profit!
  5. 5. Абстракция Более 9000 абстракций... “Машинные коды” АЛУ АЛУ, концепция “вычисление” Цифровая схемотехникаЭлектротехника, электрические цепиЭлектромагнитизм, движение зарядов
  6. 6. “Закон дырявых абстракций” The Law of Leaky Abstractions by Joel Spolsky Как ненадёжные низшие уровни обеспечивают надёжность высших и всегда ли это работает? http://joelonsoftware.com/Articles/LeakyAbstractions.html
  7. 7. Wonder why we dont crash like computers? Yale explainsby Ben Coxworthhttp://www.gizmag.com/yale-scientists-compare-bacteria-to-linux/15037/
  8. 8. Что такое embedded system?
  9. 9. Причём тут школьная физика? Разработка embedded устройств требует знания электроники и низкоуровневого программирования Вы видите как запись битов в регистры изменяет уровни напряжения на выводах процессора “То что нельзя сделать с помощью кода приходится делать с помощью паяльника”
  10. 10. Ужасная терминология Слово “embedded” как нельзя хуже подходит для описания этой области Согласно терминологии – веб-сервер в датацентре – embedded system? Деление на низкоуровневое и высокоуровневое программирование как и деление на настольные ПК и устройства управления кофеваркой – условное
  11. 11. Так в чём же отличия? Различные подходы к разработке Различные инструменты Различные предметные области Real-time
  12. 12. Real time means right now! Часто в устройствах на микроконтроллерах используется подход “real time” Гарантированный отклик на внешнее событие, гарантированное время работы потока в RTOS
  13. 13. Инструменты разработки На самом деле не такие они и разные Доминирует язык C и Ассемблер, за ним C++, кое-где приходит .NET micro framework и C#, потихоньку наступает Java (недавно выпущена бета-версия для STM32) В более крупных системах на embedded GNU/Linux или специальных RTOS в принципе нет ограничений на языки/фреймворки кроме аппаратных
  14. 14. Гиганты и малявки Под крупными системами подразумеваются устройства под управлением Linux или аналогичных по “весовой категории” RTOS Linux != RTOS, несмотря на существование CONFIG_PREEMPT_RT Пример популярной RTOS для микроконтроллеров - FreeRTOS
  15. 15. FreeRTOS vs GNU/Linux В ядре только простейший планировщик, IPC (очереди, мьютексы и тд.), “выделятор” динамической памяти Без MMU нет виртуальной памяти Доступ к периферии напрямую из процессов (хотя на процессорах с MPU возможно разделение на user и kernel space)
  16. 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); }}
  17. 17. Есть ли жизнь без ОС? Ага. Большинство устройств на микроконтроллерах не имеют ОС Вся работа выполняется в одном бесконечном цикле и прерываниях Не нужно беспокоиться о thread-safety Сложнее масштабировать, но для простых устройств нет нужды использовать ОС
  18. 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 */ }}
  19. 19. Демо!

×