Отличный вариант продолжить изучение Си после книг Столярова. Много приближенных к реальности задач и подходов к их решению. Подробно рассмотрены возможности, внесённые последними стандартами, многопоточность и некоторые популярные библиотеки.
Энди Уир, Артемида
Весьма интересный роман о жизни в единственном лунном городе — Артемиде. В меру эпично и футуристично. Некоторые повороты сюжета весьма предсказуемы, другие — наоборот. Никаких особенных откровений, просто динамичный сюжет.
Андрей Столяров. Программирование: введение в профессию
http://stolyarov.info/books/programming_intro/
Дочитал трилогию, очень понравилась, жду четвёртый том. Кратко расскажу о содержании.
Том 1. Знакомство с Unix и Pascal. У многих подгорает от Паскаля, но я не вижу проблемы потратить на него немного времени, если человек начинает совсем уж с нуля. Имеющие опыт программирования могут просто почитать исходники и понять, что имеется в виду. Вместе с тем, Паскаль имеет одну очень важную особенность — указатели, понимание которых будет востребовано при изучении Си.
Том 2. Ассемблер и Си. Конечно, пользуясь языками высокого уровня можно игнорировать детали архитектуры и ОС, но мне такой подход не кажется правильным. Опять же, не нужно становиться гуру ассемблера, а потратить несколько часов на понимание того, что же на самом деле делает компьютер при исполнении кода, весьма полезно. Тем более, если цель — изучать Си, очень хорошо видно как некоторые его аспекты вылезли из ассемблера. Так же автор рассматривает стандартную библиотеку, устройство тулчейна и системы контроля версий.
Том 3. ОС и сеть. Вот где-то здесь и начинается написание близких к реальности программ. Описаны способы взаимодействия программы с внешним миром, указаны различные нюансы, усложняющие жизнь за границей сферического «Hello, world» в вакууме.
Том 4 в процессе написания. Автор обещает обзор парадигм различных языков программирования и графические интерфейсы. Несмотря на то, что финансовая цель была достигнута ещё в начале года, я сделал пожертвование в качестве благодарности за огромную пользу, которую мне принесли труды автора.
Lazy Docker
https://github.com/jesseduffield/lazydocker
Удобная консольная утилита для управления docker-контейнерами.
Fomu — an FPGA inside your USB port!
Отличный доклад о разработке миниатюрных отладок tomu и fomu для MCU и FPGA.
nm: кто занял весь флэш?
Если хочется узнать какой код занимает больше всего флэша в микроконтроллере, стоит воспользоваться утилитой nm. Параметр radix задаёт формат отображения чисел. Десятичный удобен для понимания размера, но портит адреса. Пример цели size для make:
size: $(PREFIX)nm --print-size --size-sort --radix=d $(BUILD_DIR)/$(TARGET).elf
Таким образом можно узнать, что функция HAL_RCC_OscConfig занимает больше килобайта!
arm-none-eabi-nm --print-size --size-sort --radix=d ./build/target.elf .... 134218896 00001100 T HAL_RCC_OscConfig
Для некоторых случаев можно сократить этот размер закомментировав настройку ненужных источников тактирования. Странно, что это не делается автоматически для источников, отсутствующих в данном МК.
A million times clock
Шикарная штука: https://malte-wessel.com/a-million-times/
Добавлено 2020.01.27:
Близко к теме: https://www.humanssince1982.com/
Pwn Adventure 3: Pwnie Island
Великолепные видео-уроки по реверс-инжинирингу сетевой игры Pwnie Island. Игра была сделана именно для этой цели, поэтому в ней оставлена отладочная информация, чтобы не скучать, а сразу перейти к веселью.
Scrum в hardware
Хороший доклад о том, как применять гибкие методологии при разработке аппаратного обеспечения, какие есть сложности и как их обойти.
О сколько нам открытий чудных…
Узнал как инициализировать массив в Си несколькими повторяющимися значениями:
int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
Поддерживается только GCC. Источник: https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
На той же странице есть интересное замечание про инициализацию union из int и float — если явно инициализировать float целочисленной константой, то она будет преобразована к float. Если же привести целое к union, то оно останется целым.
Antenna theory
Хороший сайт для изучения антенн. Может, когда-нибудь попробую углубиться в эту область. Узнал про него из подкаста The Amp Hour.
О легаси коде
https://tiffnix.com/blog/2014/10/19/refactoring-legacy.html
«I’ve taken up maintaining a project that my friend Darkflux works on. It’s called Fate of the Republic (FotR), a Star-Wars MUD. The website is fateoftherepublic.com, and you can connect via Telnet to fateoftherepublic.com:1313.»
Отличная статья о том, что такое легаси код, насколько он может быть ужасен и как подходить к задаче приведения его в поддерживаемый вид.
Doxygen, gprof и другие
Начал использовать Doxygen для документирования кода. В поисках документации наткнулся на отличную статью Handbook of Open Source Tools из которой узнал про gprof, который можно применить к микроконтроллерам. Осталось найти время и разобраться с новым инструментом, т. к. выглядит он чрезвычайно полезным.
2.4 GHz Downconverter for an SDR
https://github.com/IanWraith/24DownConvert
Простой и дешёвый downconverter, чтобы подслушивать 2.4 ГГц. Когда-то очень хотел подобную штуку чтобы отладить передачу через NRF24 с помощью RTL-SDR, но находил только дорогие варианты.
OpenOCD RTOS Support
Оказывается, OpenOCD поддерживает отладку ОС для МК, но по умолчанию эта возможность выключена. Поскольку сейчас делаю проект на FreeRTOS, решил попробовать сделать отладку более удобной. Чтобы включить поддержку ОС нужно:
- Добавить флаг -rtos auto в строку $_TARGETNAME configure в файле target/xxx.cfg
- Добавить в проект файл с определением символа uxTopUsedPriority, т.к. он отсутствует в последних версиях FreeRTOS
- Исправить флаги линкера, как указано в файле, чтобы линкер не выкинул этот символ при сборке
Запустив отладку я увидел, что OpenOCD автоматически определил FreeRTOS и нашёл создаваемые ею задачи. К сожалению, собственно отладка у меня не заработала — при попытке дойти до точки останова в main() связь с отладчиком терялась. Пока что пришлось вернуться к отладке без поддержки ОС. Возможно, проблема связана с плагином cortex-debug для vscode. В Eclipse, судя по чужому опыту, всё работает без проблем. Возможно, ещё вернусь к этому вопросу.
Использованные материалы:
Оценка размера стека
Полезная статья на хабре об оценке размера стека. Узнал две вещи: флаг -fstack-usage и утилита cflow.
STM32 HAL: используем printf
В сгенерированный кубом код нужно добавить следующий кусок в main.c:
#include <errno.h> #include <sys/unistd.h> // STDOUT_FILENO, STDERR_FILENO int _write(int file, char *data, int len) { if ((file != STDOUT_FILENO) && (file != STDERR_FILENO)) { errno = EBADF; return -1; } // arbitrary timeout 1000 HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, (uint8_t*)data, len, 1000); // return # of bytes written - as best we can tell return (status == HAL_OK ? len : 0); }
Я добавляю после /* USER CODE BEGIN 4 */. UART должен быть предварительно настроен. Да, это блокирующий код, но пока что он меня устраивает.
Смертные машины
Об это книге узнал из трейлера фильма. Захотел было сходить посмотреть, но посмотрев ещё несколько трейлеров разочаровался и взялся за книгу. Она не слишком порадовала: вместо ожидаемого стимпанка вышла детская сказка, которая, однако, совсем не годится для детей, слишком много смертей вокруг. Рекомендовать не буду, однако отзывы на вторую книгу лучше, так что попробую её.
Заводная
Альтернативное будущее, климатическая катастрофа, потеря многих технологий и расцвет биоинженерии. В этом, новом для меня, сеттинге разворачивается борьба министерств природы и торговли Банкока за власть в городе. Интересный и динамичный детектив, рекомендую.
Шантарам
Потрясающая история жизни беглого австралийского заключенного в Бомбее. Здесь есть всё: любовь, дружба, предательство, убийства, наркотики, война, бедность, тюрьма, болезни и доброта, очень много доброты и улыбок местных жителей. Длинная, интересная и очень захватывающая книга, очень рекомендую.