2019-09-19

eddy_em: (Default)
2019-09-19 07:42 pm

Обновленная прошивка хронометра

Понемногу допиливаю прошивку хронометра. Исправил некоторые косяки и добавил возможность сохранять логи прямо во флеш-память микроконтроллера! Интересно, что, несмотря на то, что на корпусе написано STM32F103C8T6, фактически у него 128кБ флеша! Сама прошивка занимает почти 15кБ, после нее 2 страницы флеш-памяти отводится на хранение настроек (их туда аж 50 штук влезает, так что, очищать эти 2кБ нужно будет достаточно редко), а уже за ними все свободное место отведено под хранение логов.
Убил довольно-таки приличное количество времени, чтобы разобраться с линкер-скриптом и разместить хранилища именно там, где я хочу! При дебаге даже пришлось несколько раз сливать с камня прошивку после записи параметров и логов, чтобы убедиться, что все находится на своих местах.
Единственное, что мне сейчас не нравится — разбор команд, который у меня реализован тупо в лоб (серией if-else if). Вот чувствую, что можно сделать элегантное решение на вложенных switch'ах, но если это писать вручную, замучаюсь при добавлении новой команды (и лопухнуться легко при удалении ненужной), т.е. нужно писать генератор кода. И это останавливает от прогресса!
eddy_em: (Default)
2019-09-19 09:09 pm

Светодиодные модули P10

Сижу, обмозговываю, как заставить работать вот такие модули с STM32. Китайский разработчик этого чуда, похоже, страдал психическими заболеваниями и находился в перманентном состоянии укурки и бодуна. Иначе как объяснить такую ненормальную логику?
В интернете никаких готовых вменяемых решений не нашел.
Пока думаю, что нужно использовать SPI: сразу получится и тактирование, и передача данных. Но вот как данные организовать?.. Понятно, что для построения текста удобней, когда байты расположены вертикально: берем 5-6 uint16_t на букву, и собираем слова... Но вот переадвать-то нужно побитно справа-налево, через четыре строки! Надо придумать какую-нибудь хитрую процедуру переформатирования экранного буфера в буфер для передачи по SPI. И, наверное, из-за слишком коротких посылок использовать DMA будет не очень резонно.
Может, кто-нибудь что посоветует?