EdgeAligned 85 12 сентября Опубликовано 12 сентября · Жалоба Хорошо, что запустили в отладчике 🙂 А обоснование как раз и даст понимание происходящему на простом примере. Потому что более сложные примеры - это контейнеры типов с сортировкой на основе как раз рассматриваемого простого примера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 12 сентября Опубликовано 12 сентября · Жалоба Обоснование, скорее, в том, что нет оснований полагать иного🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 12 сентября Опубликовано 12 сентября (изменено) · Жалоба Попробуйте например сходу обосновать то, что происходит вот тут: template<typename A, typename B, typename... C> struct L<A, Collection<B, C...>> { using Result = typename K<B, typename L<Q, Collection<C...>>::Result>::Result; }; если не знаете, как работает предыдущий пример, то в этом месиве букв фиг разберетесь 🙂 Изменено 12 сентября пользователем EdgeAligned Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 12 сентября Опубликовано 12 сентября · Жалоба 2 часа назад, EdgeAligned сказал: Так что рано ногодрыг списывать со счетов. Ну, не знаю. Один раз написал и отладил драйвер всех внешних лампочек и кнопок, и наружу выдал API их управления - дальше, на высоком уровне, можно уже что угодно делать. 2 минуты назад, EdgeAligned сказал: Попробуйте например сходу обосновать то, что происходит вот тут: template<typename A, typename B, typename... C> struct L<A, Collection<B, C...>> { using Result = typename K<B, typename L<Q, Collection<C...>>::Result>::Result; }; 🙂 Даже вчитываться не буду) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 12 сентября Опубликовано 12 сентября · Жалоба А номера пинов и имена портов как задавать? 7 минут назад, Arlleex сказал: Даже вчитываться не буду) 🙂 Логично. Хотя там написано ровно то же самое (по принципу), что и в примере выше, просто букв больше. Беда в том, что на вот этой многобуквенной собачьей хрени построена STL - стандартная библиотека шаблонов - всякие там векторы, контейнеры, итераторы и проч.лабуда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 12 сентября Опубликовано 12 сентября · Жалоба 11 минут назад, EdgeAligned сказал: А номера пинов и имена портов как задавать? Через дефайны или вовсе гвоздями прибить... Практика такова, что от проекта к проекту все равно невольно приходится просматривать исходники на предмет косяков. А задать даже гвоздями прибитые номера пинов - дело пары минут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 12 сентября Опубликовано 12 сентября · Жалоба 15 minutes ago, EdgeAligned said: А номера пинов и имена портов как задавать? Буквамии и цифрами. Без всего этого геморроя с С++ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 12 сентября Опубликовано 12 сентября · Жалоба Во, я раньше так и делал! 🙂 Прибивал гвоздями. И меня всегда это раздражало или немного... ээээ... неудовлетворяло, скажем так. И это было одним из поводов начать проработку С++. На ++ тоже опробовал несколько вариантов и довольно быстро пришел к варианту с using DC = Pin<GpioA, 6>; DC::Low(); и передачей пинов в классы через шаблоны. Затем потребовалось создавать группы пинов и пришлось вплотную засесть за изучение контейнеров типов. Пишется не сильно сложно, хотя синтаксис черезжопный, чего уж скрывать. Итог - теперь не надо прибивать гвоздями и править в драйвере. Аналогично поступать и со всякими там SPI, через создание псевдонимов шаблонных классов. Переписывать заголовочник МК для этого не нужно. Впрочем, я нисколько не настаиваю. Я просто описываю то, что я делал и почему, по каким причинам. Вы конечно же вольны делать по-своему, я ничуть не против 🙂 Кое-кто вон например вообще имеет 20-летний стаж погромирования и собаку съел на нем, я тут даже вообще не берусь судить, он просто Мега-Мастер (ыгыгы) 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 12 сентября Опубликовано 12 сентября · Жалоба 9 минут назад, EdgeAligned сказал: Итог - теперь не надо прибивать гвоздями и править в драйвере. И переходим на другой контроллер со своими тараканами и хитрожопыми регистрами, допускающими какой-то уникальный способ инициализации всяких пинов через какой-то хитрый регистр, и вся эти мутотень в виде отлаженных трехэтажных шаблонов летит в помойку... и все по новой. От плюсов в МК до сих пор использую лишь пространства имен и иногда шаблоны структур - но не в драйверах железа, а на чуть более высоком уровне. Там в них смысла больше. А работа с регистрами сводится к тому, чтобы не ошибиться записать нужное число в нужное битовое поле регистра. Поэтому без всяких плюсов я себе наклепал горстку упрощающих жизнь макросов, обычных Сишных. Зато сразу понятно, что они делают, и от перехода на новый стандарт хоть плюсов, хоть Си, не зудит в одном месте - будет ли работать очередная хитрая конструкция в виде 100500 шаблонов или нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 12 сентября Опубликовано 12 сентября · Жалоба Ровно то же самое в этом случае вы будете делать и с "прибитыми гвоздями" дефайнами/макросами - менять их. Так что 1:1, ничья 🙂 Еще раз повторюсь, что я никого ни в чем не убеждаю, вы все тут мастера с большой буквы П, и вольны делать так, как привыкли. Я лишь описываю свой "путь воина". Мне уровня написания некоторых ассов как до китая итди. Чтоб я так начал писать на их уровне, это ж мне надо бутылки две водяры замахнуть 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 12 сентября Опубликовано 12 сентября · Жалоба 1 минуту назад, EdgeAligned сказал: Ровно то же самое в этом случае вы будете делать и с "прибитыми гвоздями" дефайнами/макросами - менять их. Так что 1:1, ничья 🙂 Еще раз повторюсь, что я никого ни в чем не убеждаю, вы все тут мастера с большой буквы П, и вольны делать так, как привыкли. Я лишь описываю свой "путь воина". Мне уровня написания некоторых ассов как до китая итди. Чтоб я так начал писать на их уровне, это ж мне надо бутылки две водяры замахнуть 🙂 Ну а зачем пытаться вникать в трехэтажную наскальную живопись плюсов, которая работает в C++17, но не работает в 11, но частично работает в 20, а в следующих версиях вовсе сделали улучшение и теперь все предыдущие способы расцениваются гурами как говнокод? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 12 сентября Опубликовано 12 сентября · Жалоба 3 minutes ago, Arlleex said: И переходим на другой контроллер со своими тараканами и хитрожопыми регистрами, допускающими какой-то уникальный способ инициализации всяких пинов через какой-то хитрый регистр, и вся эти мутотень в виде отлаженных трехэтажных шаблонов летит в помойку... и все по новой. Никаких проблем с этим нет, по крайней мере у меня. Просто под каждый камень нужно сделать свой набор "драйверов", а интерфейс одинаковый (практически), поэтому user код понятия не имеет на каком камне запущен. Проблема с переносимостью решена, читаемость - отличная, цена - немного больше расход озу, в производительности потери нет, т.к. работа идет фактически с регистрами через готовый h-файл проца, который дает производитель. Посмотрите для примера как это сделано на ардуино, видимо его авторы в свое время ставили именно такую задачу - отвязаться от разношерстного железа, тем самым снизить порог вхождения. Свою задачу они решили. Я пошел таким же путем, т.к. этот путь был уже пройден и показал свою эффективность, соотв. тоже и достиг аналогичных результатов и своих целей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 12 сентября Опубликовано 12 сентября · Жалоба Об этом и говорю! В "помойку" летит лишь самый нижний "этаж", а вся остальная надстройка остается нетронутой. Тем более, что замута с шаблонами как раз и призвана недопустить перерасхода ресурсов МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 183 12 сентября Опубликовано 12 сентября · Жалоба 2 минуты назад, Forger сказал: Никаких проблем с этим нет, по крайней мере у меня. Просто под каждый камень нужно сделать свой набор "драйверов", а интерфейс одинаковый (практически), поэтому user код понятия не имеет на каком камне запущен. Какая разница, обложить функцию InitGPIO() плюсовыми фишками всяких там шаблонных штук, которые при смене МК придется переписать, или переписать сам InitGPIO() напрямую? В текущем проекте мне было совершенно некогда заниматься созерцанием, поэтому я воспользовался своими отлаженными макросами для модификации битовых полей в регистрах UPD_BIT(GPIOA->PUPDR, RST(GPIO_PUPDR_PUPD12_Msk | GPIO_PUPDR_PUPD11_Msk), SET(0x1 * (GPIO_PUPDR_PUPD12_0 | GPIO_PUPDR_PUPD11_0)), INV(0)); UPD_BIT(GPIOA->AFR[1], RST(GPIO_AFRH_AFSEL12_Msk | GPIO_AFRH_AFSEL11_Msk), SET(0x9 * (GPIO_AFRH_AFSEL12_0 | GPIO_AFRH_AFSEL11_0)), INV(0)); UPD_BIT(GPIOA->MODER, RST(GPIO_MODER_MODER12_Msk | GPIO_MODER_MODER11_Msk), SET(0x2 * (GPIO_MODER_MODER12_0 | GPIO_MODER_MODER11_0)), INV(0)); UPD_BIT(GPIOA->OTYPER, RST(GPIO_OTYPER_OT12_Msk), SET(0), INV(0)); UPD_BIT(GPIOA->OSPEEDR, RST(GPIO_OSPEEDR_OSPEED12_Msk), SET(0x2 * GPIO_OSPEEDR_OSPEED12_0), INV(0)); Читаемо? Ну, мне понятно - хотя и тут можно все эти чиселки и гвоздеприбитые определения вытащить в один хедер, где определить пины в виде #define CAN_RX A, 10 и т.д. Не охота. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 12 сентября Опубликовано 12 сентября · Жалоба 7 минут назад, Arlleex сказал: и теперь все предыдущие способы расцениваются гурами как говнокод? Ну, это уже издержки 🙂 Хотя, ядро языка то не меняется, меняются надстройки, которые во многом являются расширением STL. И лично я пишу лично для себя, поэтому не обращаю внимание, если кому-то покажется, что я недостаточно современно выполнил говнокод. Главное, что я достиг поставленной цели. Меня не устраивали некоторые моменты и я их решил. Ну а то, что в последствии это будет выглядеть устаревшим - ну дак всё течет, всё меняется. Я раньше вообще на ассемблере писал, а щас на него скажут - че за архаизм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться