Как стать автором
Обновить
11
0
Стулов Тихон Сергеевич @Kudesnick33

Разработчик встраиваемых систем

Отправить сообщение

Как защититься от переполнения стека (на Cortex M)?

Время на прочтение8 мин
Количество просмотров27K
Если вы программируете на «большом» компьютере, то у вас такой вопрос, скорее всего, вообще не возникает. Стека много, чтобы его переполнить, нужно постараться. В худшем случае вы нажмёте ОК на окошке вроде этого и пойдете разбираться, в чем дело.

image

Но вот если вы программируете микроконтроллеры, то проблема выглядит немного иначе. Для начала нужно заметить, что стек переполняется.

В этой статье я расскажу о собственных изысканиях на эту тему. Поскольку я программирую в основном под STM32 и под Миландр 1986 — на них я и фокусировался.
Читать дальше →
Всего голосов 61: ↑60 и ↓1+59
Комментарии66

Как я, в итоге, написал новую RTOS, протестированную и стабильную

Время на прочтение40 мин
Количество просмотров83K
Я работаю со встраиваемыми системами в течение нескольких лет: наша компания разрабатывает и производит бортовые компьютеры для автомобилей, зарядные устройства, и т.д.

image


Процессоры, используемые в наших продуктах — это, в основном, 16- и 32-битные микроконтроллеры Microchip, имеющие RAM от 8 до 32 кБ, и ROM от 128 до 512 кБ, без MMU. Иногда, для самых простых устройств, используются еще более скромные 8-битные чипы.

Очевидно, что у нас нет (разумных) шансов использовать ядро Linux. Так что нам нужна какая-нибудь RTOS (Real-Time Operating System). Находятся даже люди, которые не используют никаких ОС в микроконтроллерах, но я не считаю это хорошей практикой: если железо позволяет мне использовать ОС, я ее использую.

Несколько лет назад, когда мы переходили с 8-битников на более мощные 16-битные микроконтроллеры, мои коллеги, которые были гораздо более опытными, чем я, рекомендовали вытесняющюю RTOS TNKernel. Так что это — та ОС, которую я использовал в разных проектах в течение пары лет.

Не то, чтобы я был очень доволен ею: например, в ней нет таймеров. И она не позволяет потоку ждать сообщения сразу из нескольких очередей. И в ней нет программного контроля переполнения стека (это действительно напрягало). Но она работала, так что я продолжал ее использовать.
Читать дальше →
Всего голосов 162: ↑161 и ↓1+160
Комментарии61

Как 10 лет разрабатывать электронику по контракту и не загнуться

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров19K

Привет, меня зовут Иван Ларионов. В 2011 году мы вместе с братом основали компанию «Третий пин». Я хочу поделиться своей историей эволюции из инженера-фрилансера в руководителя компании, занимающейся контрактной разработкой электроники. Как и почему удалось не обанкротиться, не закрыться и не выгореть, а нарастить мощности и сохранить кураж.

Читать далее
Всего голосов 83: ↑82 и ↓1+104
Комментарии52

PCIe для электронщиков: знакомство с дифференциальными парами

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров24K

PCIe, он же PCI-Express, представляет собой очень мощный интерфейс, и в этой статье я опишу основные принципы его использования в собственных проектах. Поначалу PCIe может немного пугать, но он всё же достаточно прост для экспериментов и вполне пригоден для применения в рамках хобби. В определённый момент вы можете решить использовать микросхему PCIe в собственных проектах или, например, задействовать подключение PCIe на Raspberry Pi Compute Module, так что лучше быть к этому готовым.
Читать дальше →
Всего голосов 57: ↑55 и ↓2+71
Комментарии17

Как поморгать 4 светодиодами на CortexM используя С++17, tuple и немного фантазии

Время на прочтение12 мин
Количество просмотров9.4K
Всем доброго здравия!

При обучении студентов разработке встроенного программного обеспечения для микроконтроллеров в университете я использую С++ и иногда даю особо интересующимся студентам всякие задачки для определения особо больных на голову одаренных учеников.

В очередной раз таким студентам была дана задача поморгать 4 светодиодами, используя язык С++ 17 и стандартную библиотеку С++, без подключения дополнительных библиотек, типа CMSIS и их заголовочных файлов с описанием структур регистров и так далее… Побеждает тот, у кого код в ROM будет занимать наименьший размер и меньше всего затрачено ОЗУ. Оптимизация компилятора при этом не должна быть выше Medium. Компилятор IAR 8.40.1.
Победитель едет на Канары получает 5 за экзамен.

Сам я до этого тоже эту задачу не решал, поэтому расскажу как её решили студенты и что получилось у меня. Предупреждаю сразу, навряд ли такой код можно будет использовать в реальных приложениях, потому и разместил публикацию в раздел «Ненормальное программирование», хотя кто знает.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии34

Как создать аппаратный эмулятор CD-ROM без паяльника

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров16K

Несмотря на то, что постепенно оптические диски уходят в прошлое, использование ISO-образов этих дисков остаётся актуальным. Многие операционные системы поставляются в виде ISO-образов, а администраторам необходимо поддерживать разношёрстный парк старых персональных компьютеров.

Существует множество решений, как можно установить операционную систему с ISO-образа без записи его на оптический носитель. Я уже затрагивал тему ISO-образов в моих статьях: «Раскрываем секреты загрузочных ISO-образов» и «Что вам нужно знать о внешних загрузочных дисках».

В этой статье я хочу рассказать о ещё одном способе, который, как оказывается, вшит в ядро Linux. Если ваш одноплатный компьютер имеет USB OTG-разъём, и на него возможна установка Linux, то вы c большой долей вероятности можете сделать из одноплатника аппаратный эмулятор привода оптических дисков.

Меня этот способ заинтересовал. Я проверил его сам и, получив положительный результат у себя, решил поделиться с вами.

Я сам узнал много интересного, систематизировал свои знания, поэтому надеюсь, что чтение будет познавательно и интересно для вас.
Читать дальше →
Всего голосов 94: ↑94 и ↓0+94
Комментарии17

CRTP: Пример на паттерне «Мост»

Время на прочтение5 мин
Количество просмотров15K

CRTP - сложный снаружи, простой внутри паттерн, позволяющий заменить механику абстрактных классов и переопределения поведения функций на другой способ предоставления интерфейса.

Читать далее
Всего голосов 7: ↑6 и ↓1+7
Комментарии29

Всё про USB-C: паяльник Pinecil

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров28K

Как многие правильно заметили, в случае с USB-C важен не просто сам стандарт, а то, как он реализован. В конце концов, мы имеем дело с реализациями, и именно на этой почве обычно возникает большинство проблем. Отчасти, конечно, вина лежит и на стандарте, например, в плане отсутствия маркировки кабелей. Хотя, на мой взгляд, он продуман намного лучше, чем некоторым кажется.

Я хочу познакомить вас с несколькими реализациями USB-C в некоторых интересных опенсорсных продуктах. Все они в том или ином смысле не идеальны – иначе и быть не может, поскольку им приходится иметь дело с беспорядочным реальным миром, где совершенство является редкостью.

Сегодня мы поговорим о Pinecil – недорогом и качественном паяльнике от Pine64, выпущенном пару лет назад. Для питания в нём предусмотрен и круглый разъём, и порт USB-C. Это стало долгожданным отступлением от стратегии компании Miniware, которая не применяла такое решение ни в оснащённой исключительно круглым разъёмом модели TS100, ни в маломощных паяльниках TS80. Кроме того, поскольку Pinecil разработан под использование жал T12 от модели TS100, он заслуженно завоевал популярность в мире электронщиков-любителей.
Читать дальше →
Всего голосов 77: ↑77 и ↓0+77
Комментарии18

StereoPi — наша железка для изучения компьютерного зрения, дронов и роботов

Время на прочтение4 мин
Количество просмотров22K
Всем привет!

Сегодня я бы хотел рассказать вам о нашей новой железке на базе Raspberry Pi Compute Module, предназначенной для изучения компьютерного зрения и установки на роботов и дронов. По сути это «умная» стереокамера — она поддерживает работу с двумя камерами одновременно, имеет в качестве «сердца» настоящую малину и, самое важное – работает со стоковой версией Raspbian.
Вот как выглядит собранное решение, с установленными двумя камерами и Pi Compute модулем.

image
Читать дальше →
Всего голосов 39: ↑39 и ↓0+39
Комментарии59

Обзор шины SPI и разработка драйвера ведомого SPI устройства для embedded Linux (Часть первая, обзорная)

Время на прочтение13 мин
Количество просмотров175K
В этой статье я хочу провести краткий обзор шины SPI (интерфейса, широко распространённого во встраиваемой технике, используемого для подключения различных устройств) и попытаюсь описать процесс создания драйвера протокольного уровня SPI устройства для Linux. Данный документ не претендует на роль полного руководства, а скорее преследует цель указать нужное направление. Так как статья не вошла в размер одного топика, мне пришлось разбить её на две части.

0. Вместо введения


Что это за статья?
Эта статья представляет собой компиляцию информации из различных источников, вольный перевод некоторых частей документации, а также мои собственные комментарии, дополнения и описания возникших проблем.

Для кого эта статья?
В первую очередь, для новичков, каковым являюсь и я. На форумах по embedded Linux очень часто можно встретить вопрос: «А как на этой плате работать с SPI?». Именно на него я и попытаюсь дать ответ. В качестве примера, я приведу код написанный для работы с моим тестовым SPI устройством.
Читать дальше →
Всего голосов 52: ↑51 и ↓1+50
Комментарии13

Настольная динамическая балансировка маховика

Время на прочтение5 мин
Количество просмотров10K

Решил реализовать найденный на просторах интернета проект, но для него нужны были гироскопы. Для гироскопа нужен маховик, но последний имеет динамический дисбаланс. В этой статье разберём метод борьбы с вибрацией этого самого маховика.

Раскрутить маховик
Всего голосов 36: ↑36 и ↓0+36
Комментарии81

Полноценная GDB отладка через USB на плате BluePill (STM32F103С8T)

Время на прочтение5 мин
Количество просмотров13K

В данной статье речь пойдет о программировании и полноценной отладке микроконтроллера STM32F103C8T6 через USB.

Однажды, от коллег поступило предложение о участии в IoT проекте. Система предусматривала однопоточный запуск скриптов. Отладка производилась с помощью логов. И тут мне в голову пришла мысль о полноценной удаленной отладке проектов под микроконтроллеры.

Продолжение следует ...
Всего голосов 21: ↑20 и ↓1+30
Комментарии21

Оптимизированный доступ к GPIO. Или GPIO как constexpr класс. С++

Время на прочтение4 мин
Количество просмотров6.9K

Добрый день, жители Хабра. Данный пост будет посвящен программированию на C++, и использованию constexpr объектов с целью повышения уровня удобства и одновременно оптимизации кода с точки зрения размера и производительности.

В процессе работы над одним из проектов, задумался: "нельзя ли сделать удобный доступ к GPIO портам на STM32, и при этом сделать его оптимальным по размеру кода и производительности". Что я хотел получить...

Читать далее
Всего голосов 9: ↑7 и ↓2+7
Комментарии44

Как запустить Doom на УАЗ Буханке 2022

Время на прочтение11 мин
Количество просмотров73K

Прошедший 2022 год сильно повлиял на отечественных автопроизводителей. Появились антикризисные комплектации (а остальные исчезли). Произошли откаты на старые экологические нормы, вплоть до евро-2. Кто-то прогнозировал возврат к карбюраторным двигателям, чего, к счастью, не случилось. Люди в шапочках из фольги особенно рады, что из отечественных машин исчезла система ЭРА-Глонасс. Глупцы, она стала ненужной, потому что всех уже чипировали через вакцину.

Мы же продолжали пилить RusEFI - свой ЭБУ с преферансом, барышнями, открытым программным кодом и открытыми аппаратными реализациями.

Читать далее
Всего голосов 155: ↑149 и ↓6+182
Комментарии216

Как самому за один вечер собрать минимальную ОС Linux из исходного кода

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров88K
image

В современном мире нас окружает огромное количество электронных устройств различной степени сложности. Если устройство более или менее сложное, например, телевизор, маршрутизатор, смартфон, то с большой долей вероятности оно работает под управлением операционной системы Linuх, и эта мысль не даёт мне покоя.

Ещё больше не даёт покоя мне тот факт, что все ядра операционной системы Linux, которые работают на различных устройствах и серверах, собраны из исходного кода, находящегося в репозитории на сайте kernel.org.

Такие разные устройства, а операционная система, работающая на них, собрана из одного и того же исходного кода! Это утверждение, конечно, верно лишь отчасти, так как фактически ядро обычно расширено и модифицировано разработчиками конкретных дистрибутивов Linux, а также разработчиками конкретных устройств, но общего исходного кода достаточно много.

Мне всегда хотелось собрать операционную систему Linux самому из исходного кода, но процесс этот всегда казался сложным и запутанным, да и многого я не понимал. Но всё-таки в определённый момент времени я накопил достаточное количество знаний, чтобы осуществить свою мечту. В этой статье я хочу рассказать вам, как собрать минимальную Linux из исходного кода и запустить её у себя на компьютере.
Читать дальше →
Всего голосов 83: ↑82 и ↓1+108
Комментарии83

systemd: как писать юниты с элегантной перезагрузкой

Время на прочтение20 мин
Количество просмотров25K

Разработка системы с элегантным завершением работы может оказаться той ещё пляской с бубном. В идеальном мире каждый сервис управлялся бы юнитом systemd. ExecStart запускала бы процесс, обрабатывающий SIGTERM, а ExecStop оповещало бы процесс и осуществляло блокировку, которая бы корректно завершала процесс и его ресурсы.


Однако многие программы завершаются некорректно, а то и вовсе сбивают все настройки при закрытии. В этой статье мы рассмотрим поведение systemd при завершении работы и методы написания юнитов systemd для выборочной очистки (custom cleanup) перед закрытием. Подробности — к старту нашего курса по DevOps.

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии2

Итоги недели мобилизации. Уклониться нельзя судить. Указа не будет. Приглашаем редактировать наше письмо Мишустину

Время на прочтение4 мин
Количество просмотров56K

Ещё одна неделя мобилизации принесла нам неоднозначные новости. С одной стороны, отменено постановление о возбуждении первого уголовного дела об уклонении от явки по повестке о мобилизации (статья 328 УК РФ). С другой — Шадаев Максут Игоревич на вебинаре Минцифры заявил, что законной отсрочки для IT-специалистов нет и не будет. Мы решили написать новое письмо Михаилу Мишустину, но в этот раз приглашаем всё IT-сообщество поддержать нашу инициативу и присоединиться к составлению письма.

Расскажем обо всём этом более подробно в нашем дайджесте.

Читать далее
Всего голосов 66: ↑36 и ↓30+23
Комментарии409

Как описать большую систему в нотации С4

Время на прочтение6 мин
Количество просмотров46K

Хабр, привет!
Нас зовут Дмитрий Фролов и Владимир Мясников.Мы стандартизировали подход по документированию внутренних систем в команде интеграционного тестирования Мир Plat.Form с помощью «Модели С4».

Платежная платформа «Мир» представляет из себя десятки систем и сотни интеграций, за работоспособность которых отвечает наша команда. Разобраться новичку, и даже опытному сотруднику, в происходящем бывает непросто, и сегодня мы расскажем, как помогаем коллегам быстро и удобно получать информацию о наших системах.

Давайте разберемся, что такое «Модель С4» и какие задачи она помогает решать. С чего начать, если вам поступила задача задокументировать «большую» систему – читайте под катом.

Читать далее
Всего голосов 5: ↑4 и ↓1+3
Комментарии14

Inline variables

Время на прочтение8 мин
Количество просмотров32K

Первоначальное назначение ключевого слова inline состояло в том, чтобы служить индикатором для оптимизатора, что встроенная подстановка функции предпочтительнее вызова функции, то есть вместо выполнения команды CPU для передачи управления в тело функции, копия тела функции выполняется без генерирования вызова. Эта оптимизация (inline expansion) основана на идее, что выполнение вызова функции является относительно дорогостоящим: оно требует перехода к новой подпрограмме, передачи аргументов функции и копирования возвращаемых значений. Inline expansion подавляет вызов функции путем копирования инструкций функции непосредственно в тело вызывающего объекта.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии6

Сохраните в закладках эту статью, если вы новичок в Python (особенно если изучаете Python сами)

Время на прочтение6 мин
Количество просмотров51K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Bookmark this if you are new to Python (especially if you self-learn Python)" в двух частях (1, 2) c простыми, но полезными советами и трюками в Python.



Если из-за скучной карантинной жизни вы решили погрузиться в Python, поздравляю. Вы столкнулись с самым быстрорастущим языком программирования. Я уверен, что вы уже знаете некоторые преимущества Python, такие как его простота, легкость в освоении и т.д. Это также основные причины, по которым я изучил Python пять лет назад. Я надеюсь, что вы сможете изучать Python более эффективно и наслаждаться этим процессом, и для этого я подготовил список простых, но полезных трюков и советов.


Уточнение: в настоящее время я использую Python 3.8. Если вы столкнулись с какими-либо проблемами во время запуска моих примеров, пожалуйста, проверьте, не связано ли это с вашей версией Python.

Читать дальше →
Всего голосов 24: ↑18 и ↓6+18
Комментарии22

Информация

В рейтинге
6 064-й
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность