Как стать автором
Обновить
5
0
Владимир @volodyaleo

Программист микроконтроллеров

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

Интересно получается. Нет ридбек защиты аппаратной. Похоже на уязвимость.

Сколько не работал с творчеством из Китая. С документацией у них большие проблемы зачастую. Также непредвиденное поведение часто встречается. А когда заказываешь тираж, дальше идет большая проблема с исправлениями косяков и отклонения от BOM-в солидные. Сильные отклонения характеристик на большой тиражности. Были подставы, когда свои косяки они чинить не хотели и настойчиво говорят, что тебе надо закостылить. Однако костыли подложить не всегда возможно под такие экзотические специфики.

Не удивительно, что так просто не взлетело.

Если должно работать гарантированно и качественно — нужны тесты. Нужно считать байтики и потребление памяти. Но это можно делать грамотно не слепив все в один спагетти-модуль с большим количеством глобальных переменных. Чтобы делать абстракции бесплатными можно пользоваться статик инлайнами, макросами. И разбивка на модули потратит от силы 1% от флешки, если это сделать правильно. А то и уменьшит дублирование спагетти кода и наоборот памяти сэкономится.

Очень жизненно! Особенно некоторые вместе с классом — боссом лепят 100 глобальных переменных. Сам эмбеддед разраб и навидался жести.
Еще некоторые терпеть не могут обёртки. Говорят, что уровни абстракции сжирают много памяти. Однако, если их правильно писать и разбить на модули, то никак больше не получается. Тупой пример: статик инлайн обёртки. Памяти едят ноль, зато можно обернуть простые конструкции в более человекочитаемые функции.
У Nordic -овских чипов довольно крутое sdk. Там хорошо разбито на модули и много трюков для дешевых абстракций используется.
Еще пример бесплатной абстракции — кастомная секция в линковщике для регистрации эвент хендлеров. И прикрыть макросами регистратор. Доп памяти требует зеро, зато можно использовать event driven парадигму и нормально разбить на модули.
Также копипаста всяких типичных вещей вымораживает. В чем проблема вынести в отдельный модуль эвентлуп, fsm, модуль очереди написать? Копипируют туда-сюда и с кучей ошибок...


На счет malloc-free, если в MCU памяти катастрофически мало, проще стат буферами гарантировать работоспособность. Да, иногда нужны какие-то аллокаторы, тут безопаснее memory pool разделённый использовать. Можно конкретному модулю так разграничить объем памяти. Допустим, сетевому модулю под буферы пакетов. Чтобы на высокой нагрузке весь хип не сожрал — выделенный мемори пул даст чёткий лимит по памяти на сетевые пакеты.


Все же поражает дробление на модули. Ну слепили все в босс-модуль, сэкономили 0.5% флешки, зато потом требуются недели чтобы понять как это работает. Вместо минут 15-ти. И тестировать нереально. А как показала моя практика — тесты позволяют ловить регрессии и меньше времени тратить на отладку. А некоторое вообще без тестов не поймать с санитайзерами.

Все руки чешутся. Да, выглядит приятно. Мне понравилось, что для экономии памяти они кастомные секции линковщику делали. И собирают стрктурки на этапе линковки. Вместо runtime регистраторов обработчиков событий/структур. Драйвера так подключаются.
Еще нравится, что POSIX прослойка есть. Как на esp sdk. Тесты писать удобнее так как отдельные модули можно на Linux пускать. А на Linux уже подключить
санитайзеров побольше.
Смотрел их исходники много раз. Еще вроде Nordic semiconductor их поддерживает.

2

Информация

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