Краткие заметки embed-программиста: дублирование секции в памяти микроконтроллера

Начальные условия
Есть устройство на базе микроконтроллера (для примера будет взят stm32f405rgt6). При включении оно настраивает свою периферию на основе предпочтений пользователя или настроек по-умолчанию. Пользователь может менять настройки во время…

[Из песочницы] О некоторых проблемах микрооптимизаций

Предыстория
Как-то раз у меня с коллегой завязался разговор по поводу улучшения инструментария для работы с битовыми флагами в перечислениях C++. На тот момент у нас уже была функция IsEnumFlagSet, принимающая на вход первым аргументом тестируемую пер…

[Из песочницы] Процесс компиляции программ на C++

Цель данной статьи:
В данной статье я хочу рассказать о том, как происходит компиляция программ, написанных на языке C++, и описать каждый этап компиляции. Я не преследую цель рассказать обо всем подробно в деталях, а только дать общее видение. Также …

[Перевод] Инкремент элементов вектора

В каком случае инкремент элементов вектора std::vector будет быстрее – если они имеют тип uint8_t или uint32_t?

Чтобы не рассуждать отвлечённо, рассмотрим две конкретные реализации:
void vector8_inc(std::vector<uint8_t>& v)
{
for (size_…

Сборка бинарных файлов Android с помощью исходников и Android NDK. Прокачиваем утилиту screencap

Я занимаюсь автоматизацией Android устройств и часто SDK или ОС Android не имеют нужного функционала или его работа выполняется медленно/очень медленно.
Используя возможности Native Development Kit (NDK) мы можем написать функционал, который будет вып…

[recovery mode] Gradle + LLVM

Этот небольшой пост может оказаться полезен тем, кто хотел бы быстро начать работать с LLVM, не заморачиваясь с закачкой исходников и просторойкой фреймворка. Кто не хотел бы ковыряться в малопонятных скриптах CMake-а чтобы добиться ожидаемого результа…

C/C++. Как использовать внедряемые ресурсы приложения, при работе в GCC на Linux

Захотелось как-то мне использовать в Linux внедряемые ресурсы, причём, автоматически. В общем, задача такая:
Имеется Eclipse проект программы на C++.
ОС: Linux Ubuntu. Компилятор: G++
В проекте используются данные из внешних файлов: строки локализац…

Самые частые грабли при использовании printf в программах под микроконтроллеры

Время от времени в моих проектах приходится применять printf в связке с последовательным портом (UART или абстракция над USB, имитирующая последовательный порт). И, как обычно, времени между его применениями проходит много и я успеваю напрочь забыть вс…

Делаем процесс разработки тяжеловесного программного обеспечения под микроконтроллеры более удобным (нет)

Сейчас уже никого не удивить микроконтроллерами с энергонезависимой (чаще всего Flash) памятью объемом 512 килобайт и более. Их стоимость постепенно снижается, а доступность напротив, растет. Наличие такого объема энергонезависимой памяти дает возможно…