Как стать автором
Обновить
-1
0
Вадим @Dele1

Пользователь

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

Как сделать ОС для микроконтроллера

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

Довольно давно я хотел сделать свою вытесняющую ОС для микроконтроллера, но не нашел стоящего мануала, или плохо искал, хз. В результате разобрался что к чему, что для этого нужно и решил написать пост об этом, вдруг кому-то пригодится.

Короче говоря, надеюсь это будет полезно, или хотя бы интересно, для людей, ищущих ответы на вопросы на формах и статьях на Pikabu Хабре, а не в патентах, документации и прочих унылых источниках, где нет вставок с мемами.

Читать далее
Всего голосов 35: ↑31 и ↓4+37
Комментарии45

Использование coroutines из С++20 в связке с NRF52832 и GTest

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

Появилась идея в домашнем проекте попробовать использовать сопрограммы из С++20 на маленькой железке. В качестве модуля для экспериментов был выбран E73 NRF52832. Из инструментария, который использовался в процессе разработки- arm-gcc-gnu-none-eabi 10.2, MSVC для проверки идей и прогона тестов на Windows-платформе. Изначально было в планах продемонстрировать на чем-то концепцию и как именно их можно было применять. Была идея адаптирования примера в виде мигания светодиодом, но он был слишком простой. Необходимо было придумать что-то более сложное и более полезное, что ли. Таким образом появилась идея переписать драйвер дисплея и пары фрагментов SPI-FLASH в проекте-долгострое.

Читать далее
Всего голосов 16: ↑13 и ↓3+16
Комментарии11

Тестирование печатных плат? «Это же просто»

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

Те, кто занимается разработкой и производством электронных устройств, рано или поздно сталкиваются с задачей тестирования большого количества смонтированных печатных плат перед продажей. На маленьких сериях можно обойтись мультиметром чтобы проверить всё на «коленке». Однако, чем больше серия, тем более сложным должно быть устройство для тестирования, чтобы тест каждой платы проходил быстрее. Далее хочу описать пройденный мной путь.
Узнать подробности
Всего голосов 60: ↑60 и ↓0+60
Комментарии46

Находим и устраняем уязвимости бинарных файлов в Linux — с утилитой checksec и компилятором gcc

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

Изображение: Internet Archive Book Images. Modified by Opensource.com. CC BY-SA 4.0

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

Некоторые из них компилятор включает или отключает по умолчанию. Так в бинарных файлах могут возникать уязвимости, о которых мы не знаем.

Checksec — это простая утилита, позволяющая определить, какие свойства были включены при компиляции. В этой статье я расскажу:

  • как использовать утилиту checksec для поиска уязвимостей;
  • как использовать компилятор gcc для устранения найденных уязвимостей.

Установка checksec


Для Fedora OS и других систем на базе RPM:

$ sudo dnf install checksec

Для систем на базе Debian используйте apt.

Быстрый старт с checksec


Утилита сhecksec состоит из единственного скриптового файла, который, впрочем, довольно большой. Благодаря такой прозрачности вы можете узнать, какие системные команды для поиска уязвимостей в бинарных файлах выполняются под капотом:
Читать дальше →
Всего голосов 27: ↑21 и ↓6+22
Комментарии5

Атрибут cleanup

Время на прочтение6 мин
Количество просмотров6.5K
Цитата из документации GCC [1]:

Атрибут cleanup предназначен для запуска функции, когда переменная выходит из области видимости. Этот атрибут может быть применён только к auto-переменным, и не может быть использован с параметрами или с static-переменными. Функция должна принимать один параметр, указатель на тип, совместимый с переменной. Возвращаемое значение функции, если оно есть, игнорируется.

Если включена опция -fexceptions, то функция cleanup_function запускается при раскрутке стека, во время обработки исключения. Отметим, что атрибут cleanup не перехватывает исключения, он только выполняет действие. Если функция cleanup_function не выполняяет возврат нормальным образом, поведение не определено.




Атрибут cleanup поддерживается компиляторами gcc и clang.

В этой статье я приведу описание различных вариантов практического использования атрибута cleanup и рассмотрю внутреннее устройство библиотеки, которая использует cleanup для реализации аналогов std::unique_ptr и std::shared_ptr на языке C.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии5

100500-ая автоматика полива для растений

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

Сказ о том, как я строил очередную систему автоматики для полива и климат-контроля растений.

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

STM32 Чаcть 2: Инициализация

Время на прочтение4 мин
Количество просмотров14K
Программирование — это разбиение чего-то большого и невозможного на что-то маленькое и вполне реальное.


Всем привет, для начала я хотел бы поблагодарить модераторов за то что пропустили мой первый (отвратительный) пост, и передать привет маме! А также я хотел бы поблагодарить всех читателей и людей которые указали на мои ошибки и помогли их исправить. Я сразу оговорюсь что по русски я не писал с 6 класса, в общем не серчайте.

STM32 Часть 1: Основы

Итак, давайте приступим. В прошлой статье я бегло пробежался по самым первым пунктам. Это был наш startup.c файл, который отвечал за 2 вектора (stack, Reset_Handler) и немного про линкер скрипт. Сегодня мы дополним наш код инициализации, разберем линкер на запчасти и узнаем как все устроено.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+16
Комментарии15

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

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

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

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

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

CMake и C++ — братья навек

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

Дружба навек


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


Многие ругают CMake, и часто заслуженно, но если разобраться, то не всё так плохо, а в последнее время очень даже неплохо, и направление развития вполне позитивное.


В данной заметке я хочу рассказать, как достаточно просто организовать заголовочную библиотеку на языке C++ в системе CMake, чтобы получить следующую функциональность:


  1. Сборку;
  2. Автозапуск тестов;
  3. Замер покрытия кода;
  4. Установку;
  5. Автодокументирование;
  6. Генерацию онлайн-песочницы;
  7. Статический анализ.

Кто и так разбирается в плюсах и си-мейке может просто скачать шаблон проекта и начать им пользоваться.
Читать дальше →
Всего голосов 52: ↑49 и ↓3+46
Комментарии51

C и C++: межъязыковые интерфейсы

Время на прочтение11 мин
Количество просмотров16K
Как известно, C и C++ — это родственные языки между которыми есть много общего. Но их пути, с годами, расходятся всё сильнее. В общих чертах дело обстоит так: код, написанный на одном из этих языков, не может быть скомпилирован под видом кода, написанного на другом. Этому мешает множество больших и маленьких различий между языками. Причём, речь идёт не только о синтаксических различиях. Некоторые общие синтаксические конструкции могут иметь разную семантику. Поэтому обычно нет никакого смысла в том, чтобы компилировать код, написанный на C, с помощью C++-компилятора. Не стоит доверять тем, кто утверждает обратное.

Правда, есть одна сфера, где обычно наблюдается согласие между C и C++. Это — ABI (Application Binary Interface, двоичный интерфейс приложений). Структуры данных и функции одного языка могут быть, в той или иной мере, использованы в другом языке. C и C++, кроме того, достаточно сильно пересекаются в области спецификаций интерфейсов, вследствие чего один и тот же заголовочный файл можно использовать из кода, написанного на обоих языках.



В этом материале я постараюсь собрать то общее, что есть у C и C++ и предложу некоторые рекомендации, которые позволят достаточно хорошо сочетать эти языки. Это, правда, будет всего лишь рассказ, иллюстрирующий точку зрения C-программиста, который хочет создавать интерфейсы для C++.
Читать дальше →
Всего голосов 31: ↑25 и ↓6+37
Комментарии11

Операционные усилители: 10 схем на (почти) все случаи жизни

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

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


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

Сложение двух чисел с плавающей запятой без потери точности

Время на прочтение9 мин
Количество просмотров80K
Здравствуйте, друзья, как вы думаете, если мы напишем такой код:

s = a+b;
z = s-a;
t = b-z;

то не кажется ли вам, что в результате его выполнения получится, что t=0? С точки зрения привычной математики действительных чисел это и правда так, а вот с точки зрения двоичной арифметики с плавающей запятой в переменной t будет кое-что другое. Там будет то, что спасает нас от потери точности при сложении чисел $a$ и $b$. Кого интересует данная тема, прошу под кат.

Всего голосов 99: ↑97 и ↓2+135
Комментарии172

Снова про шаблоны C++ в микроконтроллерах

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

Идея использования шаблонов языка C++ для программирования контроллеров не является чем-то новым, в сети доступно большое количество материалов. Кратко напомню основные преимущества: перенос значительной части ошибок из runtime в compile-time за счет строгого контроля типов, а также приближение к объектно-ориентированному подходу, близкий и удобный многим, без необходимости хранения полей в статическом классе (все поля являются шаблонными параметрами). Однако стоит заметить, что практически все авторы по большому счету ограничиваются в своих работах примерами на работу с регистрами и портами ввода-вывода. В своей статье я хочу продолжить эти идеи.

Читать далее
Всего голосов 10: ↑7 и ↓3+10
Комментарии12

Время-деньги. Сколько стоит час инженера

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

Сколько стоит час работы сотрудника? Это обязаны знать в любой компании, которая продаёт свои часы. А тем, кто не продаёт, а покупает, не лишним будет понять, почему именно столько просят подрядчики, и сколько на самом деле стоят внутренние проекты. Давайте разберёмся, как мы считаем стоимость часа и что туда входит.

Читать далее
Всего голосов 67: ↑64 и ↓3+87
Комментарии165

Bluetooth Low Energy: подробный гайд для начинающих. Соединения и сервисы

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

Это третья часть перевода книги Мохаммада Афане “Intro to Bluetooth Low Energy”. Сегодня мы подробнее рассмотрим процесс подключения устройств и поговорим о сервисах.

Предыдущие части:
Про архитектуру BLE
Про типы устройств, адвертайзинг и сканирование

Благодаря сервисам происходит обмен как стандартными данными (уровень заряда батареи через Battery Service, текущее время устройства через Current Time Service и т.д.), так и кастомными, при помощи сервисов, созданных разработчиком устройства для удовлетворения специфических нужд. Например, для Atmotube Pro мы сделали два сервиса, в которые сгруппировали несколько характеристик для синхронизации истории, передачи данных о концентрации пыли и летучих органических соединений. 

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

Запуск сложных C++ приложений на микроконтроллерах

Время на прочтение8 мин
Количество просмотров14K
image Сегодня никого не удивить возможностью разрабатывать на C++ под микроконтроллеры. Проект mbed полностью ориентирован на этот язык. Ряд других RTOS предоставляют возможности разработки на С++. Это удобно, ведь программисту доступны средства объектно-ориентированного программирования. Вместе с тем, многие RTOS накладывают различные ограничения на использование C++. В данной статье мы рассмотрим внутреннюю организацию C++ и выясним причины этих ограничений.
Читать дальше →
Всего голосов 15: ↑14 и ↓1+20
Комментарии14

Как я изучал структуры данных и алгоритмы для собеседования в FAANG

Время на прочтение12 мин
Количество просмотров65K
Продолжая тему устройства в FAANG, которую уже мы поднимали в нашем блоге, и специально к старту нового потока нашего курса по алгоритмам сегодня делюсь описанием пути Эско Обонга, старшего инженера-программиста Uber.

Эта история началась в 2015 году, когда стартап, к которому я присоединился как «сотрудник-основатель», закрылся через шесть месяцев после первого раунда инвестиций, и я искал новую работу. Первое моё собеседование было с  Codecademy, где на этапе телефонного разговора меня заверили: «Не волнуйтесь, мы не задаём сумасшедших вопросов об алгоритмах или что-то в этом роде». И я им поверил…


Приятного чтения!
Всего голосов 46: ↑40 и ↓6+49
Комментарии71

Основы Bash-скриптинга для непрограммистов

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

Статья рассчитана на тех, кто не имеет или имеет мало опыта работы с командной строкой Unix/Linux, но желает научиться с ней эффективно взаимодействовать и разрабатывать скрипты для выполнения своих задач. Приведенные примеры справедливы для выполнения в командной оболочке bash операционной системы Ubuntu/Debian, но могут быть использованы и в других оболочках и ОС с учетом их специфики.

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

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

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

В работе и повседневной жизни мы буквально окружены текстами: книги и статьи, письма и чаты, веб-страницы и программный код. Да что там — сама биологическая жизнь основана на ДНК. И для эффективной работы по поиску или модификации текста уже давно был придуман мощный инструмент — регулярные выражения, или regex. Однако по ряду причин далеко не все их используют, или имеют дело с ними только когда заставили при крайней необходимости. В этой статье я попытаюсь исправить эту печальную ситуацию.



Чтобы функции отыскать, воедино созвать и единою чёрною волей сковать.
Читать дальше →
Всего голосов 28: ↑25 и ↓3+28
Комментарии27

Изучаем RISC-V с нуля, часть 2: прерывания и стыковка с Си

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


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

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

Информация

В рейтинге
Не участвует
Откуда
Ромны, Амурская обл., Россия
Дата рождения
Зарегистрирован
Активность