-
- Я себе делал библиотеку классов для работы с GPIO. Хардкорненько
получается. VladislavS.(4284 знак., 13.05.2022 22:42, картинка, картинка)
- А если настройщику GPIO передавать номер альтернативной функции,
который должна знать сама периферия? - Dingo(16.05.2022 07:08)
- Я этого не делал. Это неподъёмно при том зоопарке контроллеров, которые я использую. Да и идёт поперёк моей философии. Я в класе описываю только функционал модуля. Висит он на GPIO, SPI, I2C или радиоканале приходит из шаблонного параметра. Да, в моём классе конфигурации GPIO приходится руками назначать номер альтернативной функции по даташиту на чип. Зато дальше происходит "магия". - VladislavS.(16.05.2022 07:20)
- Джедай плюсов, однака! Спасибо! Жаль, что я так не могу, а наваять
квалификации не хватит. :( Например, GPIO:: PA_4 я понимаю, что
PA_4 класса GPIO , но вот с ConfigList , PinMode:: - это уже
колдунство. В том смысле, что я не понимаю, как это можно сделать. - Dingo(16.05.2022 06:30)
- Не хочу вас расстраивать, но вы неправильно поняли что такое PA_4.
И тут не ваша вина, а неоднозначного синтаксиса плюсов. GPIO это
всего лишь namespace. А PA_4 это ТИП, являющийся полной
специализацией шаблонного класса TPin . VladislavS.(1393 знак., 16.05.2022 08:59, youtube)
- Впечатлает! symbions(148 знак., 16.05.2022 09:25)
- Не хочу вас расстраивать, но вы неправильно поняли что такое PA_4.
И тут не ваша вина, а неоднозначного синтаксиса плюсов. GPIO это
всего лишь namespace. А PA_4 это ТИП, являющийся полной
специализацией шаблонного класса TPin . VladislavS.(1393 знак., 16.05.2022 08:59, youtube)
- А если настройщику GPIO передавать номер альтернативной функции,
который должна знать сама периферия? - Dingo(16.05.2022 07:08)
- Пойми: нет никаких PC10, РС11 и всяких там TX3 TX4. Есть RED_LED,
GREEN_LED, USART_LEFT_DOOR и т.п. В одном месте прокта, а именно в
конфиге, для каждого ресурса прописывается принадлежность
логического физическому: define RED_LED PORTC,10, OD, PP,
VERY_HIGH, LOG_1. Всё. Вы давно, 5 лет назад еще должны были
написать для себя удобные шаблоны и макросы, которые сами все
уставки упакуют в uint16 и раскидают по GPIOx-ORD-MODER.... Также и
для USARTов - The(12.05.2022 17:35, )
- Сейчас так пользую через avmacro Dingo(780 знак., 13.05.2022 06:01)
- Я понял, что меня смущает: вывод принадлежит периферии, даже если
это (как частный случай) GPIO. То есть хочется сказать UART-у
что-то вроде "цепляйся к TX3 = PD8, RX = PD9" и хоба - всё готово.
Для примера задачу можно упростить предельно, прибив гвоздями
битрейт, чётность и прочие параметры самого порта. Инициализировать
структурой периферию - норм, а вывод имеет номер и порт, то есть
двухкомпонентная адресация. И номер альтернативной функции для
каждого случая Dingo(180 знак., 13.05.2022 10:59)
- Я отказался от идеи тащить пины в классы UART, SPI и т.д. GPIO это отдельный блок, настраиваю его сразу после тактирования один раз проходясь по схеме. Бывает, что по ходу работы надо менять режимы пинов, тогда это в общих алгоритмах через вызов методов класса. В классах других периферийных (и внешних исполнительных) модулей реализую только их логику. Например, в класс какого-нибудь аттенюатора, висящего на SPI или I2C шаблонным параметром передаю соответствующий порт VladislavS.(1123 знак., 14.05.2022 07:55)
- А ты проверь, возможно константную таблицу с константным индексом
компилятор сократит до загрузки константы. Может быть придётся
поиграть с static const. - =AlexD=(13.05.2022 11:02)
- +1. Но тут ещё одно соображение: ну ОК, после нескольких дней
перетирания темы в пустыне и отладки кода с таблицей на все случаи
жизни окажется, что несколько сэкономленных байт никому не были
нужны. Так себе размен. - SciFi(13.05.2022 11:07)
- Это вопрос любого библиотечного кода, он начинает "окупаться" с
N-ного проекта. Казалось бы, потратил пару часов, чтобы сэкономить
пару байт на дёрганьи ноги. Но ведь компилятор теперь будет
неустанно это делать везде из строки к строке, из проекта к
проекту. Отсюда следствие, вложиться надо в то, что чаще всего
используется или сложно пишется даже один раз (разложить на уровни
USB- стек, например). - VladislavS.(14.05.2022 08:37)
- Вот именно. А в наше непростое время так далеко смотреть в
завтрашний день могут не только лишь все... Но есть ещё одно
соображение: получение новых знаний, освоение инструментов, просто
удовлетворение любопытства, в конце концов. - SciFi(14.05.2022 08:48)
- Как по мне, просто хуярить продукт - куда дальновиднее. Cкpипaч(172 знак., 14.05.2022 10:06 - 13:04)
- За 25 лет моей практики С как был так и остался. И никуда не
денется из-за количества наработок и разработчиков. А вот С++ за
это время развился в мощнейший инструмент эмбеддера, позволяющий
как писать более оптимальный код на самом низком уровне, так и
легко масштабироваться в большие приложения. Но, в эмбедд он,
скорее всего, окончательно не придёт из-за этой серой массы,
считающих знания лишними. Так и будет только энтузиастами
использоваться. А остальные будут в VladislavS.(29 знак., 14.05.2022 12:49)
- А мне нужно было сварганить по-быстрому устройство, отражающее в
веб несколько графиков - я часок погуглил, нашел подходящий
фреймворк и к концу дня показывал работающий прототип заказчику. - Cкpипaч(14.05.2022 13:03)
- Ну всё верно. Нашёл подходящий инструмент, хуяк-хуяк и в продакшн
:) Имеет место быть, не всё же велосипедостроением заниматься. Но
ведь кто-то должен этот инструмент сначала сделать? - VladislavS.(14.05.2022 13:48)
- Уже. Все уже есть. Причем по десятому-двадцатому кругу. Без наращивания функционала, просто "в ногу с технологиями". Cкpипaч(71 знак., 14.05.2022 14:25)
- Ну всё верно. Нашёл подходящий инструмент, хуяк-хуяк и в продакшн
:) Имеет место быть, не всё же велосипедостроением заниматься. Но
ведь кто-то должен этот инструмент сначала сделать? - VladislavS.(14.05.2022 13:48)
- А мне нужно было сварганить по-быстрому устройство, отражающее в
веб несколько графиков - я часок погуглил, нашел подходящий
фреймворк и к концу дня показывал работающий прототип заказчику. - Cкpипaч(14.05.2022 13:03)
- За 25 лет моей практики С как был так и остался. И никуда не
денется из-за количества наработок и разработчиков. А вот С++ за
это время развился в мощнейший инструмент эмбеддера, позволяющий
как писать более оптимальный код на самом низком уровне, так и
легко масштабироваться в большие приложения. Но, в эмбедд он,
скорее всего, окончательно не придёт из-за этой серой массы,
считающих знания лишними. Так и будет только энтузиастами
использоваться. А остальные будут в VladislavS.(29 знак., 14.05.2022 12:49)
- Как по мне, просто хуярить продукт - куда дальновиднее. Cкpипaч(172 знак., 14.05.2022 10:06 - 13:04)
- Вот именно. А в наше непростое время так далеко смотреть в
завтрашний день могут не только лишь все... Но есть ещё одно
соображение: получение новых знаний, освоение инструментов, просто
удовлетворение любопытства, в конце концов. - SciFi(14.05.2022 08:48)
- Это и останавливает. Спросил, потому как может кто нашёл такой велосипед или сам уже сделал. - Dingo(13.05.2022 11:09)
- Это вопрос любого библиотечного кода, он начинает "окупаться" с
N-ного проекта. Казалось бы, потратил пару часов, чтобы сэкономить
пару байт на дёрганьи ноги. Но ведь компилятор теперь будет
неустанно это делать везде из строки к строке, из проекта к
проекту. Отсюда следствие, вложиться надо в то, что чаще всего
используется или сложно пишется даже один раз (разложить на уровни
USB- стек, например). - VladislavS.(14.05.2022 08:37)
- +1. Но тут ещё одно соображение: ну ОК, после нескольких дней
перетирания темы в пустыне и отладки кода с таблицей на все случаи
жизни окажется, что несколько сэкономленных байт никому не были
нужны. Так себе размен. - SciFi(13.05.2022 11:07)
- Я понял, что меня смущает: вывод принадлежит периферии, даже если
это (как частный случай) GPIO. То есть хочется сказать UART-у
что-то вроде "цепляйся к TX3 = PD8, RX = PD9" и хоба - всё готово.
Для примера задачу можно упростить предельно, прибив гвоздями
битрейт, чётность и прочие параметры самого порта. Инициализировать
структурой периферию - норм, а вывод имеет номер и порт, то есть
двухкомпонентная адресация. И номер альтернативной функции для
каждого случая Dingo(180 знак., 13.05.2022 10:59)
- Сейчас так пользую через avmacro Dingo(780 знак., 13.05.2022 06:01)
- У Нувотона есть утиля, которую можно при желании доточить до любого
проца. Бо оно на жабаскрипте. LightElf(1 знак., 12.05.2022 13:08 - 13:13, ссылка)
- Тыкните ссылкой, если не лениво? Но хотелось бы средствами Цэ, бо
тот же питон можно озадачить. У меня меньше чем через двумерный
массив не решается пока что в голове. - Dingo(12.05.2022 13:10)
- Добавил ссылку выше. Конфиг пинов ST в коде у меня выглядел так: LightElf(2188 знак., 12.05.2022 13:18)
- Имхо, так же неудобно? Dingo(106 знак., 12.05.2022 13:23)
- Да просто же! По одному символу на пин. Чего уж проще? ;-) - LightElf(12.05.2022 15:30)
- Имхо, так же неудобно? Dingo(106 знак., 12.05.2022 13:23)
- Добавил ссылку выше. Конфиг пинов ST в коде у меня выглядел так: LightElf(2188 знак., 12.05.2022 13:18)
- Тыкните ссылкой, если не лениво? Но хотелось бы средствами Цэ, бо
тот же питон можно озадачить. У меня меньше чем через двумерный
массив не решается пока что в голове. - Dingo(12.05.2022 13:10)
- КМК, этот жанр называется BSP (board support package). То есть в
отдельный кусок кода выносится то, что может меняться.
Автоматизировать не надо, это довольно бессмысленно (по соотношению
трудозатраты/выхлоп). Просто сделать необходимые правки удобными. - SciFi(12.05.2022 13:10)
- Я регулярно забываю что-нить поправить, а потом ищу, почему не
работает. Последний раз не на той шине тактирование периферии
включал. А поскольку без проверки типов, то оно что-то делало и не
падало. :( - Dingo(12.05.2022 13:12)
- Вот, кстати, удивительно. Почему не сделают enum вместо простых define - LightElf(12.05.2022 13:22)
- Вот, кстати, предложение: сделать тот самый BSP и там в шапке БОЛЬШИМИ БУКВАМИ написать себе по пунктам напоминалку, что не забыть во время правки. Пины, тактирование и т.д. Кстати, системой контроля версий ещё не пользуетесь? Почему? Утилитой сравнения файлов типа WinMerge? - SciFi(12.05.2022 13:20)
- Автоматизация от этого не поможет. Её же не папа Карло делать будет, там тоже можно много чего забыть. Плюс не работает — это же прекрасно, сразу видно, что надо что-то исправить. Гораздо хуже, когда не работает по нечётным дням или вообще по пятницам, от таких вещей надо страховаться усиленно. - SciFi(12.05.2022 13:15)
- Я регулярно забываю что-нить поправить, а потом ищу, почему не
работает. Последний раз не на той шине тактирование периферии
включал. А поскольку без проверки типов, то оно что-то делало и не
падало. :( - Dingo(12.05.2022 13:12)
- Я себе делал библиотеку классов для работы с GPIO. Хардкорненько
получается. VladislavS.(4284 знак., 13.05.2022 22:42, картинка, картинка)