очень сильно сомневаюсь, что простому смертному это выгодно: пока кто-то будет шаблоны грызть, я пинодрыг сделаю тупо без шаблонов 100500 раз...
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Код: Выделить всё
using spi1 = Spi1<PA4, PA5, PA6, PA7>;
using lcd = LcdSpi<ST7735, LcdOrient::Landscape, spi1, PA8, PA10>;
int main()
{
delayInit();
lcd::init(SpiBaudRate::Presc_4);
lcd::clear(Color::Red);
lcd::drawLine(0, 0, lcd::x2(), lcd::y2(), Color::Green);
}то, что вы в main написали 3 строчки не делает ваш проект простым - за кадром остались простыни шаблонов и куча подключаемых файлов. то есть при отладке вы будете видеть не три эти строчки, а какие-то загадочные наборы символов из шаблона, разобраться в которых сможет лишь академик программистских наук. ну и мне это зачем? мне ковыряться в сложной иерархии шаблонных классов, которые на самом деле заменены парой ассемблерных команд (и понять, почему - отдельная тема) совсем не улыбается...Reflector писал(а):Итого тут задействованы классы пинов, класс SPI ...
совершенно верно. и поскольку обойтись без этого не получается никак, вопрос на засыпку: зачем учить еще С++, тратить на это время и силы, если достаточная база уже есть? возможно для профессионала это играет роль, а для меня, любителя?arkhnchul писал(а):вообще и для мигания диодиком человеку приходится много чего съесть в процессе изучения
к сожалению, в подавляющем большинстве так и есть. вот я минимум 30 лет учусь программировать, имею за плечами довольно сложные проекты, самостоятельно реализованные, но так и не могу с вами согласиться, что предлагаемое вами мне необходимо. мой уровень так и остался достаточно низким. а ведь даже по примеру здешнего форума тех, кто не достиг даже моего уровня - 90%.arkhnchul писал(а):вы как-то постоянно считаете, что даже среди интересующихся контроллерами и прочей цифрой любителей писать код никто не умеет и не хочет учиться, и каждый первый из них - просто дуб дубом, с трудом осиливший С
не соглашусь. с шаблонами я последнее время имею дело в FPC. да, когда проникся - выглядит красиво и элегантно. но когда что-то не работает и надо разобраться - всё, сливай воду. мало того, что отладчик не может понять, что мне надо показать после всей той работы, что компилятор с препроцессором наделали из шаблона, так еще и разобраться, какой вызов откуда произошел из-за этой иерархии вложенных-унаследованных классов и методов... мама не горюй, короче.arkhnchul писал(а): то там все гораздо гораздее, чем в шаблонах
кажущаяся простота исходников, написанных профессионалами в стиле ООП, с применением последних фишек стандарта, вызывает у любителя непременное желание "добавить в проект еще что-то" - это же так просто! а это приводит к забавным результатам: добавление только одного кривенкого класса (любитель - чего с него взять?) ломает всю идеально построенную оптимизаторами/компиляторами картину, и уже классы так красиво не разворачиваются, и вместо двух команд присваивания появляются циклы с перебором списков... а это требует памяти и т.п.arkhnchul писал(а):с чего бы?

Код: Выделить всё
lcd::drawLine(0, 0, lcd::x2(), lcd::y2(), Color::Green);
Код: Выделить всё
using spi1 = Spi1<PA4, PB3, PB5, PA7>;Возьмем класс для работы с портами, т.к. с точки зрения метапрограммирования он самый сложный. Если сделать что-то совсем простое:И что Вы потом будете делать при отладке? Результат работы препроцессора хотя бы можно увидеть, а это? Если мне не хватает CPP, я использую Perl. Но тогда все промежуточные результаты я вижу и контролирую.
Код: Выделить всё
using pins = PinList<PB10, PB8, PA3>;
И ради чего этот гимморой, если задачу можно решить совершенно прозрачно и просто без него? Ну сделаете Вы, например, инициализацию массива c упакованным RLE битмапом через такое доставание левой ногой правое ухо. Я же тоже самое делаю на Perl, формируя включаемый исходный файл, при этом легко контролируя все этапы данного процесса.Reflector писал(а):Но если параллельно создать такую-же функцию transformToPins2(), убрать constexpr, добавить _noinline_ и присвоить результат обычной переменной, то все замечательно отлаживается:
Зачем мне 500 штук OTP контроллеров? Или типа намекаете что они однократно программируемые и быстро закончатся...ПростоНуб писал(а):Например, 500 штук с доставкой до Москвы за $20 предлагают тут. По 4 цента получится.
Ладно, возьмем этот несчастный список из трех пинов и что-то в него запишем:Reflector писал(а):И ради чего этот гимморой, если задачу можно решить совершенно прозрачно и просто без него?
Код: Выделить всё
PinList<PB10, PB8, PA3> pins;
for (int i = 0; i < 8; i++)
pins.write(i);
Процитирую вас же.ПростоНуб писал(а):Хотя и с флешем получается меньше $20 за 200 МК, против $200 на любых ARM.
посмотрели бы реальные цены на ARM контроллеры. 200 МК можно купить за 52$. https://ru.aliexpress.com/item/4000009900054.htmlПростоНуб писал(а):А чтобы Вам не выглядеть чукчей-писателем
И покупать дороже? Смысл?ПростоНуб писал(а):давайте все же сравнивать цены в одном магазине
А вы писали 200$.ПростоНуб писал(а):В том же LCSC 200 STM32F030F4P6 обойдутся дороже $80.
Как же это 200 так резко изменились на 80?ПростоНуб писал(а):$200 на любых ARM.
На порядок? То есть даже при стоимости $80 за 200 STM32, PDK14 стоят в 10 раз меньше, т. е. 8$ за 200 МК?ПростоНуб писал(а):В том же LCSC 200 STM32F030F4P6 обойдутся дороже $80. Все равно на порядок(!) дороже, чем PDK14