да же еще без ошибок собирается. Честно говоря, до последнего не думал что будет работать. Пусть это и далеко не эффективный код, но он работает, и прекрасно работает.
На F103
Код:
Program Size: text data bss dec hex filename 1456 0 1024 2480 9b0 port_103.elf
Если и начинать изучать С++ это надо начинать с буквы А и года 4 зубрить.
Сдается мне, что четырех лет не хватит! Это С можно за полгода спокойно изучить. А вот С++… И при этом вообще не видно никакой выгоды над С! Зато тексты исходников получаются на порядок-два сложней, компилируются они значительно дольше, да еще и неприятным "бонусом" является необходимость каждый год изучать, что там нового всякие козлы в С++ привнесли! Зато С стабилен, и выучив его один раз, можно пользоваться всю жизнь!!!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Не поддерживает, а иногда было бы полезно, в основном на C++, т.к. там такой тип можно использовать на стадии компиляции. По коду... Указатель - 4 байта, 8 пинов - 1 байт, итого 5, но по умолчанию структура выровняется и будет 8 байт на пин, а для M0, из-за отсутствия невыровненного доступа придется самому дополнять до 8 байт. Опять же в коде инициализация пинов для F1, если взять любую другую серию, то ее придется переделать и общий размер станет еще больше. У меня был байт на пин, хотя будет немного медленнее, что не существенно для и так в десятки раз более медленного подхода. И с классами в каждом новом проекте придется написать всего несколько строк, сама либа неизменна и просто копируется между проектами.
Зато тексты исходников получаются на порядок-два сложней,
Опять таки, несколько сообщений выше Reflector пример с std::size(pins) приводил. Сильно наглядней читается. Да и вообще код на уровне использования классов более читаемый получается. Вон Dimon456 с первого раза правильно применил шаблонный класс PinList - всё интуитивно понятно. Внутри библиотек, конечно, посложнее, но это лишь от отсутствия знаний.
Да уж... 10-15 или 20 секунд прошивка собирается так принципиально. Вот когда FPGA 10-15 или 20 минут разводится, тут уже подумаешь стоит ли её по любому чиху перекомпилировать. Прошивка для микроконтроллера просто мухой компилируется.
да еще и неприятным "бонусом" является необходимость каждый год изучать, что там нового всякие козлы в С++ привнесли!
Стандарт раз в три года обновляют. Так редко "вкусняшки" завозят. При этом новое обратно совместимо со старым. Никто не заставляет сразу всё новое применять. Можно постепенно расширять границы.
size() - функция компилятора, после компиляции это будет какое-то число. size(pins) != size(pin_ns)/size(port_pin) size(pins) - выдаст количество байт в массиве. size(pin_ns)/size(port_pin) - выдаст, скажем так, количество строк.
uint16_t определяет количество пинов в порту, а их 16 всего, 0-15. Итого, по карте памяти, указатель 4 байта, 2 байта на порт, + выравнивание 2 байта, и того 8 байт.
Да же не в этом суть, это частный случай, максимум что я буду иметь - это 20 выводной корпус F030, ну может быть F042, а там 3 пина питание 2 еще куда-то, 2 может на кварц, и того - ни чего не остается. У вы, паяльником, чем тазы паяют, 60 выводной корпус, да еще в добавок с таким мелким шагом и не в маем возрасте - это не запаяешь. Да еще и плату надо изготовить. Уже давно почти все цепляют то по spi то по i2c, а делать на этих чипах какой-то "видео-регистратор" с 60 фпс на параллельном интерфейсе - ну не знаю. Проще, по моему, купить готовый, дешевле выйдет во много раз.
Если вы хотите преподнести С++ преподносите в каком нибудь другом формате, а подергать одним выводом, поморгать светодиодом, и для этого что? городить целый класс? Проще скачать с инета готовую библиотеку и там уже разбираться.
А почему нет? Что страшного в классе? Даже на простом светодиоде это уже имеет смысл. Вы описываете поведение этого объекта абстрагировавшись от того как и куда он подключен. Код получается универсальным. В программе вы просто инстанцируете его на каком-то порту. И не важно какой это микроконтроллер, какая полярность включения - всё будет работать как задумано. Или, например, типичная проблема С-программиста - сделать inline функцию. Начинают лепить макросы LED1_ON, LED1_OFF, LED2_ON и т.д. С классами решается на раз два.
uint16_t определяет количество пинов в порту, а их 16 всего, 0-15. Итого, по карте памяти, указатель 4 байта, 2 байта на порт, + выравнивание 2 байта, и того 8 байт.
Было 8 байт на пин и осталось 8 байт на пин. Если это попытка передать сразу 16 пинов в виде маски, то работать не будет в силу невозможности таким образом передать информацию о порядке этих пинов.
Цитата:
Да же не в этом суть, это частный случай, максимум что я буду иметь - это 20 выводной корпус F030, ну может быть F042, а там 3 пина питание 2 еще куда-то, 2 может на кварц, и того - ни чего не остается.
Насколько я помню плеер ARV рассчитанный на mega328 ты запускал на mega128 и еще какие-то часы собирал на mega8, а тут вдруг с 64-х и 28-32-х ног максимум опустился до 20-ти Причем у LQFP32 шаг 0.8mm, а у TSSOP20 - 0.65mm...
была запаяна на плате, я просто отрезал лишнее. Фото приложить? мага8 в дип корпусе.
Reflector писал(а):
максимум опустился до 20-ти
Ценник играет важную роль. А как то 15$ за кусок платы 10*10 я брать точно не буду. Сам изготовить этот кусок платы я то же не смогу, из материалов у меня текстолит и рапидограф, даже принтера нет, так что шаг в 0.8mm я точно не осилю.
По этому и пишу, из-за одного вывода (пина), что бы поморгать светодиодом, городить какой-то класс ... я точно не собираюсь.
Если вы хотите преподнести С++ преподносите в каком нибудь другом формате, spi, i2c, а то люди всякий hal да cmsis используют, да в добавок мало примеров, чего только i2c в F030 стоит. Вот на это упор делайте, может кто и заинтересуется. А вы ...
VladislavS писал(а):
не может на С передать в функцию список пинов эффективно
Да кому это нужно? Это, в первую очередь, вам нужнее, а не мне.
Если вы хотите преподнести С++ преподносите в каком нибудь другом формате, spi, i2c, а то люди всякий hal да cmsis используют, да в добавок мало примеров, чего только i2c в F030 стоит.
Перечитайте название темы! Мы показываем примеры кода с результатом компиляции в асм, которые отвечают на поставленный вопрос. Если у вас проблемы с I2C, создайте тему да обсуждайте. Чего там такого сложного то? Класс I2C у меня что-то около 3-4 экранов кода.
Вот на это упор делайте, может кто и заинтересуется. А вы ...
Приходят такие студенты первого курса на лекцию по матану и с порога профессору: чего ты нам про производные втираешь, давай сразу преобразование Лапласа. Давай уравнение Шрёдингера - требуют у физика. Вы сначала пинами дёргать не через ODR научитесь.
была запаяна на плате, я просто отрезал лишнее. Фото приложить?
Что это меняет? Устаревший F103 популярен в первую очередь из-за дешевых Blue Pill и в целом плат где мк уже уже запаян в избытке.
Цитата:
мага8 в дип корпусе. Ценник играет важную роль. А как то 15$ за кусок платы 10*10 я брать точно не буду. Сам изготовить этот кусок платы я то же не смогу, из материалов у меня текстолит и рапидограф, даже принтера нет, так что шаг в 0.8mm я точно не осилю.
Шаг 0.8 не осилю, а 0.65 осилю? $15 за кусок платы жалко, 20 центов на переходник для lqfp32 тоже жалко?
Цитата:
Если вы хотите преподнести С++ преподносите в каком нибудь другом формате, spi, i2c, а то люди всякий hal да cmsis используют, да в добавок мало примеров, чего только i2c в F030 стоит.
Классы для SPI/USART/I2C ничем принципиально от класса портов не отличаются кроме того, что они значительно проще, потому никакого нового формата не будет.
Приходят такие студенты первого курса на лекцию по матану и с порога профессору:
Не знаю как там дела с профессором обстоят, у меня образование 5 классов церковно-приходской, и те под мостом, в одной руке коньки в другой клюшка. То есть я не был знаком с профессором.
VladislavS писал(а):
Вы сначала пинами дёргать не через ODR научитесь.
А что не так с ODR?
VladislavS писал(а):
что я вам должен.
Не, вы мне ни чего не должны.
Reflector, мне пока не попадались платы с STM на борту. Платы с Атмегой с какого-то оборудования Российского производства, на платах Индезит какие-то другие МК стоят.
Переходник для lqfp32, шибко не рылся у китайцев, но комплект из 5шт 1,35$ +доставка 0,82$ = итог 2,17$, какие 20 центов? А что за STM в таком корпусе? Может быть, когда нибудь. А пока, лень, постарел я, лет так 10-15 назад бы, лень, я танк покатаю.
VladislavS, а может потому что нельзя сократить, только усложнить?
Давайте я попробую: Помнится вы что-то писали про регистр BSRR. Регистр BSRR 32 битный, я должен хранить 32 битное значение, условно BR(31-16)+BS(15-0) бит. Установленный бит BS имеет приоритет перед BR, что бы BR сработал я должен сбросить BS. Хорошо бы использовать регистр BRR для сброса, но для этого потребуется хранить еще один 4-ех байтный указатель.
Так что сократить не получится, только усложнить.Спойлер
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения