Как стать автором
Обновить

Комментарии 17

Да ничего, макросы чуть чуть длиннее, код usb не так хорошо структурирован. Мейк у него тоже какой то длинный и необрезанный. В остальном хорошая библиотека, много стандартных функций на всю периферию. А свою начал писать просто потому что хотелось высказаться, "as free as speech" как говориться. В общем мой вариант может меньше, но он и короче, у cm3 возможностей больше, но и объём кода значительней, что может усложнить изучение.

Я как-то давно подзабил на все эти "хардваре абстракшын". Тем более, что у разных процов инициализация функций GPIO разная. И один фиг вся эта инициализация по факту - просто запись пачки констант в пачку регистров.

Поэтому давно пользуюсь табличкой типа такой. Изначально я для FPGA такие "кодогенераторы" делал, где ног немеряно. Потом прикрутил к микроконтроллерам.

Распиновку при этом можно скопировать из нетлиста CAD, или сравнить со схемой уже не вручную. Ошибок меньше выходит, когда выводов много. Ну и прошивка получается меньше, заливается моментально.

Я тут мысленно меряюсь с opencm3 и hal количеством функций тихо комплексную. А ты мне, забей, все равно под капотом регистры, с которыми даже уже и человеку не обязательно работать.

Я занимаюсь микроконтроллерами/микропроцессорам больше 30ти лет. Когда то для z80 писал даже не на asm а прямо на машинных кодах)))) Но я обсалютно не понимаю зачем все эти изощерения в 2024г? Есть куча готовых библиотек для работы с низким уровнем. Есть arduino sdk, используя которую вы сможете одними и тем же кодом работать с переферией кучи разных контроллеров. Тот же delay там реализован для всего.. Да бывают специфические задачи где нужно реализовать что то не стандартное и надо лезть в asm и регистры, но это бывает очень-очень редко. Да, нормальный программист должен знать как это все работает на уровне регистров.

Но писать с нуля взаимодействие с регистрами, вместо того что бы взять готовое sdk, растягивая задачу которую можно решить за несколько часов на месяц, это, в 2024г показатель крайнего непроффесианализма.

Как быстро летит время, камушек то совсем свежий был, дата стоит 2007 год в datasheet. А вы уже говорите опоздал.

это, в 2024г показатель крайнего непроффесианализма

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

А к arduino sdk массовые претензии больше потому, что нет некоего стандартного файла описания, какие ресурсы какой либой используются. В результате имеем одно большое минное поле...

Гибкость.

Дело в том, что библиотеки дают универсальность, теряя в гибкости.

Как и в представленной тут библиотеке, во многих проектах подобных абстракций не реализуется

1) атомарность переключения состояния пинов

2) верная последовательность переключения состояния.

3) множественная настройка пинов одного порта одновременно

Это не важно, если вы настраиваете пин один раз за всю свою программу. Но если вам посреди критической секции вам надо перевести 3-4 пина из ввода с поддяжкой вверх на вывод и 0, избегая вывода 1 или рассинхронизации пинов (например, ШИМ силовой), то лучше это делать напрямую через регистры. А для этого через регистры надо уметь.

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

Гибкость вы теряете если вы ардуинщик, и не понимаете как это работает внутри. А так беруться исходники и правяться под себя если уже возникла такая необходиость. Кстати у stm32 есть специальные режимы для формирования ШИМ, они все прекрастно доступны через hal, cmsis, arduino, нет необходимости дергать пины напрямую, да и не правильно это.

Да, во всех этих библиотеках попадаются ошибки, или недочеты, что то бывает не реализовано. Но поправить/добавить на порядок быстрее чем писать с нуля, и тратить месяцы на то что за вас уже давно сделали.

Вот чтобы не быть ардуинщиком отличный путь это хоть раз написать свою абстракцию.

ШИМ режимы stm32 весьма ущербны, и хорошо работают только если у тебя трансформатор или простой коллекторник. Для чего-то более сложного всё равно не хватает. Я уж не говорю про "аварийные" режимы, где из поведения - только хай-З. А мне может быть нужен аварийный сброс тока со всех катушек в резисторы торможения, да ещё и на бесколлекторном моторе.

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

для повышенной безопасности как раз вроде есть специальные фрейворки с кучей проверок и тестов

в stm32 вроде не простые таймеры и много их разных, неужели не хватает, неужели в каком нибуть К1921 (заточены под управление движками) таймеры круче сделаны?

Фреймворки есть. Но они реализуют алгоритмы, а не конфигурацию GPIO.

Да, в К1921 таймеры интереснее чем в stm32. Но всегда найдётся такой кейс, когда их функционала не достаточно. Для таких моментов или FPGA, или напрямую с регистрами. А если вспомнить про батарейное питание, то FPGA отпадает, и остаются только регистры.

Есть там один прикол, можно в регистры управления портами через DMA писать. Официально заявленная точность такого способа ~5 тактов. То есть нужную последовательность состояний портов сохраняем в массив, а потом заставляем DMA последовательно этот массив писать в порт. Причём DMA может пинать таймер с заданной вами частотой.
Мне такой бред помог сделать блок питания по полумостовой схеме, где по очерёдности нужно активировать транзисторы верхнего и нижнего плеча, да ещё и скважность при этом регулировать.

О, да! Я помню как я пускал DMA в регистры управления и в регистры вывода. Даже помню, как специально проектировал плату так, чтобы делать сложный ногодрыг через выводы по DMA.

Но DMA внезапно очень много жрёт и очень долго запускается, чтобы использовать этот трюк для аварийного поведения. Только для штатного.

как раз вот это самое "готовое sdk" в 2024 году бывает представляет собой кучку глючного кода, небольшая правка параметров может вызвать исключение в ядре которое в либе/rom и и без исходников, отладчиком только дизасм показывает - тадам, программист уже реверсер.

Тот же delay может использовать какой нить таймер, а значит это надо учитывать.

В общем допиливание напильником все равно быстрее чем разработка с 0, но чуть что то менее стандартное - приходится углубляться.

Одна из вещей, которые мне нравятся в rust, это библиотека интерфейсов embedded-hal, которая реализована для кучи популярных чипов

А толку то, в отношении того же STM32 у которого есть генератор кода для СИ? Вобще для МК на данный момент гибкая работа с памятью это все таки необходимость. Хотя если брать уже более современные МК типа F7 или тот же ESP32, то там это уже не так актуально и можно в целом потерять в оптимизации некоторых процессов в замен использования более тяжелых библиотек. Тема мутная

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации