Страница 6 из 8
Re: Литература для stm32
Добавлено: Вс май 22, 2022 10:57:45
VladislavS
Вот неугомонный то

Эту бы энергию да в изучение чего-нибудь нового.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235525#p4235525"]
Вот прямо в вашей фразе звучит две отдельных задачи: сконфигурировать, переключать.
Ну так любую задачу можно разбить на подзадачи.[/uquote]Между можно и нужно большая разница.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235525#p4235525"]И сколько вариантов периферии вы реализовали? Отдельно светодиод. Что еще?[/uquote]Я работаю с радиотехниками, там всяких синтезаторов частот, аттенюаторов, dds, коречипов вагон и тележка. И в разных изделиях их применяют в разных сочетаниях и количествах. И это не считая всяких чисто наших эмбеддерских микросхем памяти, разнообразных датчиков, индикаторов, клавиатур и т.д. Так что, дофига и больше, если быть совсем точным.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235525#p4235525"]У вас часто возникает задача генерировать такие контроллеры и настраивать именно урезанные пины?[/uquote]Ну вот в июне будет очередной проект с Microblaze. Только какое отношение моя практика имеет к принципу построения библиотеки?
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235525#p4235525"]Да, по фрагментам. Даже ваши фрагменты занимают раза в три больше места, чем аналогичный макрос.[/uquote]Аналогичный макрос? Так его просто не существует. Как можно сравнить размер с тем чего нет?
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235525#p4235525"]Выигрыш в пару тактов у вас только там, где вы заморочились с ручной оптимизацией (вроде байтового доступа к регистрам).[/uquote]Вы так ничего и не поняли. Нет никакой ручной оптимизации. Это делает компилятор по тем правилам, которые я ему один раз рассказал.
Спойлер
Код: Выделить всё
GpioA<0xFFFF> pa0_15;
GpioA<0x0FF0> pa4_11;
GpioA<0xFF00> pa8_15;
// pa0_15.clear();
LDR.N R0,??DataTable2_2 // &GPIOA->ODR
MOVS R1,#+0
STR R1,[R0, #+0] // 32 битный доступ в ODR
// pa4_11.clear();
MOV R2,#+4080
STRH R2,[R0, #+6] // 16 битный доступ в старшую часть BSRR
// pa8_15.clear();
MOVS R3,#+0
STRB R3,[R0, #+1] // 8 битный доступ во второй байт ODR
Где тут ручная оптимизация? Компилятор сам всё сделал.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235525#p4235525"]Зачем вы врете? Компилятор не имеет права разивать 32-битный регистр на байты, это вы делали вручную.[/uquote]Если прогуливать уроки физики в школе, то окружающий вас мир наполнится магией и волшебством

Так же и с программированием. Я могу "рассказать" компилятору как это сделать и он будет послушно это делать всегда и везде. И это никакое не волшебство, а банальное инстанцирование шаблона в зависимости от данных. Объяснение того что происходит под прошлым спойлером тут
Спойлер
Код: Выделить всё
template<uint32_t PM=PinsMask>
static inline void clear()
{
if constexpr (PM == 0xFFFF)
base()->ODR = 0;
else if constexpr (PM == 0x00FF)
*pVU8(&base()->ODR) = 0;
else if constexpr (PM == 0xFF00)
*(pVU8(&base()->ODR) + 1) = 0;
else if constexpr((PM & 0xFF)==0)
*(pVU8(&base()->BSRR)+3) = PM>>8;
else
*(pVU16(&base()->BSRR)+1) = PM;
}
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235525#p4235525"]На Земле. Это третья планета солнечной системы.[/uquote]Это там где Принцессы «пукают фиалками»? И это рассказывает человек, у которого в коде официально костыль задокументирован, иначе два раза вызывается
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235525#p4235525"]Хорошо, но какое это имеет отношение к разбиению линии данных по портам?
Изменить способ обмена через define ничуть не сложнее.[/uquote]Такое, что вам придётся вручную раскладывать доступ по портам, а я просто укажу на каких ногах какой сигнал подключен и дальше... Ну вы знаете, компилятор "всё сделает сам".

Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:11:24
Reflector
[uquote="AVI-crak",url="/forum/viewtopic.php?p=4235550#p4235550"]Красиво, это когда все ноги с одной линии контактов - без переходов уходят на чип с параллельным портом, одной красивой полосой проводников.
Да, красиво, да работает - но в 100 раз медленнее чем могло-бы работать.
А это означает что можно было взять чип в 100 раз слабее и дешевле. Мысль понятна?[/uquote]
Если можно написать простой, компактный и быстро работающий код, то большего ничего и не нужно. Дальше уже программист решает хочется ли ему скорости, тогда можно выбрать пины с одного порта и желательно не в разброс, а кому-то нравится красиво разведенные платы и он все тянет одной красивой полосой проводников. Скорость тоже не везде нужна, те же семисегментники можно проинитить так же просто:
using segs = PinList<PC7, PA4, PA10, PB10, PB11, PD3, PB9, PA11>;
using digits = PinList<PC0, PB8, PA3, PC6>;
Semiseg<digits, segs> semiseg;
semiseg.init();
А можно написать:
Код: Выделить всё
using segs = PinList<PB15, PB14, PB13, PB12, PB11, PB10, PB9, PB8>;
И будет одна запись в половинку ODR...
Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:21:10
ARV
мой скептицизм на счет С++ местным завсегдатаям известен, но против правды не попрешь: VladislavS действует правильно.
я сравниваю с Pascal, ООП в котором появилось раньше, чем С++, но и по сей день ООП в паскале остается вкладыванием коробочек в коробочки... а в данном случае налицо реальная польза. и тот факт, что С++ я понимаю, как таджик на стройке понимает русский, не умаляет ценность предложенного решения. и если бы я умел работать на плюсах, я бы обязательно скачал бы все его "библиотеки" и на их основе дальше делал бы свои поделки. но рожденный ползать летать не может, увы.
только вот спор об эффективности мне кажется великой глупостью: для чего вам создали МК с дикими мегагерцами? чтобы вы продолжали убивать время на оптимизацию каждого такта? для чего вам флеша напихивают в МК сверх меры? чтобы вы, как и 30 лет назад, экономили каждый её байт? в данном случае это не критика подхода VladislavS-а, у него эта "экономия" по сути является побочным эффектом проектирования, что минусом быть не может. а вот трата времени на достижение этой цели иными, менее "автоматическими" способами, это, имхо, глупость.
и пару слов о кодогенераторах. имхо, это тоже тупик для интеллекта. опять же на примере мною любимого паскаля, а именно Delphi, которая самая первая внедрила концептуальный подход программирования мышкой... и что в итоге? 99% кода, написанного "пользователями" дельфи является нечитаемой кашей из макарон. 98% "программистов" за 20 лет существования Delphi так и не приучили себя давать осмысленные имена сущностям, которые Delphi автоматически генерирует, до сих пор в их программах Button123 и Form321 вкупе с переменными i12 и m8...
увы, концепция кнопки "сделай за меня хорошо и правильно" в программировании не работает. но тем не менее, эта концепция продолжает жить и пестоваться различными "гуру"... и единственное, чем я могу это объяснить (не скатываясь на позиции теорий заговора) - это то самое изобилие мегагерцев и мегабайтов, которые попросту "гуру" не знают, куда деть. поэтому и появляются идеи типа "а давайте в следующей версии иконки сделаем с 64-битной глубиной цвета и 3D-анимацией"... ну или "а давайте сделаем кнопку, нажав на которую пользователь сразу получит работающее, как ему хочется, приложение". последняя идея очень перспективна в плане самообеспечения работой: ведь добавлять возможности в эту кнопку можно (и неизбежно придется) вечно...
Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:33:34
НовыйДень
Вот о чем я и говорю. VladislavS невтуда применяет свои силы. Да, у него было много свободного времени и он, пока бездельничал, написякал дофига букавок для конфига портов. Но профессиональный практикующий программист скажет, глядя на эти портянки: "И это всё, что ты сделал?" А ответить то будет нечем. Потому что любой "кубист" уделает VladislavS-а за минуту, а доводы, что инит портов на 100 тактов быстрее будут отклонены с насмешкой "Ты чо, на 480 МГц твои сто тактов растворятся как ложка соли в пяти литрах бульона". Конечно, такое поражение сложно принять, потому и доводы не будут услышаны. Это ж не практикующий программист, а программист-теоретик с массой свободного времени.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:34:13
Reflector
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4235553#p4235553"]Ну так зачем делать конфигуратор, который будет генерить плохой код? Хороший конфигуратор выдаст код длиной в несколько строчек, в которых будет чисто конкретно только то, что нужно.
Некоторые из вас никак не могут понять, что все эти длинные портянки, которые тут показывал VladislavS, прячутся в недра конфигуратора (они даже могут быть написаны на любом другом языке, хоть на Питоне), а на выходе в файле исходника получается короткая выжимка, всё чисто по месту. И верх красоты - конфиг нужных пинов в одном месте за раз.[/uquote]
Вопрос в том как сделать конфигуратор который выдаст код длиной в несколько строчек без использования продвинутых библиотек... Берем те же пины для семисегментника:
Код: Выделить всё
using segs = PinList<PC7, PA4, PA10, PB10, PB11, PD3, PB9, PA11>;
using digits = PinList<PC0, PB8, PA3, PC6>;
Я их просто указал и все, внутри будет простая запись:
Код: Выделить всё
segs::write(comAnodeTbl[ch] & ~dot);
digits::write(1 << digit);
Покажи как аналоги этих двух строк будут выглядеть после отработки хорошего конфигуратора выдающего код в котором не будет ничего лишнего

Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:38:39
НовыйДень
Reflector, точно так же, как и у тебя, только без ненужного текста. Вы просто не понимаете смысла, не работали в больших проектах, и вам обидно за потраченное на ерунду время, потому и очень рьяно защищаете свой подход, своё потраченное впустую время. Нынче любой "кубист" сделает всё быстрее, а на ваши доводы о лишних тактах презрительно усмехнется и сплюнет, мол, чувак, поучи-ка жену щи варить.
Такова жизнь, такова вот "селяви". Да, я тоже через это проходил, когда вручную писал USB, а в это время "кубисты" просто генерили проект и сдавали его раньше. Так же сейчас и вас уделают, когда потребуется.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:42:23
ARV
Reflector писал(а):как аналоги этих двух строк будут выглядеть после отработки хорошего конфигуратора выдающего код в котором не будет ничего лишнего
назовите конфигуратором компилятор С++, и проблема решена

интерфейс у конфигуратора - текстовый, символами ставится задача, и он генерирует максимально оптимальный код в соответствии с заданием.
все счастливы.
Добавлено after 2 minutes 34 seconds:
НовыйДень писал(а):Нынче любой "кубист" сделает всё быстрее, а на ваши доводы о лишних тактах презрительно усмехнется и сплюнет
это верно. только что сделает кубист на небольшое изменение задачи типа "блин, на этот пин нельзя вешать SDA, там светодиод нужен, давай переставим их местами"? я так понимаю,
Reflector в своем PinList вместо P1 поставит P22 и посмотрит на кубиста, как на говно...
Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:46:45
Reflector
[uquote="ARV",url="/forum/viewtopic.php?p=4235566#p4235566"]а вот трата времени на достижение этой цели иными, менее "автоматическими" способами, это, имхо, глупость[/uquote]
Сколько бы усилий на либу потрачено не было, по крайней мере она повсеместно используется и будет полезна в дальнейшем. Сравни это, например, со своим любимым впихиванием невпихиваемого в tiny13, что из этого большая глупость?
Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:57:01
VladislavS
Так чё, нет в рукаве никакого продвинутого конфигуратора с кодогенератором эффективного кода? А есть только куб, код USB которого не помещается в младшие контроллеры F0? Расходимся, нас в очередной раз наипали диванные эксперты.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 11:59:19
Reflector
[uquote="VladislavS",url="/forum/viewtopic.php?p=4235576#p4235576"]Так чё, нет в рукаве никакого продвинутого конфигуратора с кодогенератором эффективного кода?[/uquote]
Напоминает рассказы чудака который на форумах рекламирует некий "ассемблер высокого уровня", который лучше C/C++, но пока в закрытом доступе

Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:02:58
НовыйДень
[uquote="VladislavS",url="/forum/viewtopic.php?p=4235576#p4235576"]Т нет в рукаве никакого продвинутого конфигуратора с кодогенератором эффективного кода? А.[/uquote]
У меня - есть

! Написан совместно с коллегами

"Но я тебе его не дам"(С)
Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:07:18
Reflector
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4235587#p4235587"]У меня - есть

! Написан совместно с коллегами

[/uquote]
Обычным любителям что делать? Чужой конфигуратор(кроме куба) им не дадут, а чтобы написать свой нужно быть профессиональным разработчиком с кучей таких же коллег, так что ничего кроме написания своих либ и не остается.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:12:02
НовыйДень
Есть два пути. Один из которых - вначале написать огромные проприетарные портянки, а потом выдвигать их как "прорыв и новое слово отечественного кодопейсательства". Либо Не писать портянок, понимая, что конфиг портов - это не самая главная часть в предстоящей работе и занимает ноль целых хрен тысячных всего затраченного на написание кода времени. И все свои умения по продвинутому С++ гораздо важнее применить в более подходящем для этого месте.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:19:05
VladislavS
В каком, например? И откуда инфа что не применяется?
Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:23:22
ARV
Reflector писал(а):Сравни это, например, со своим любимым впихиванием невпихиваемого в tiny13, что из этого большая глупость?
во-первых, признаюсь: моё предположение, что слежение за контекстом в крови программиста, оказалось ошибочным - ты явно не следишь за контекстом написанного мною.
во-вторых, моё впихивание невпихуемого - это хобби, т.е. я это делаю из чисто спортивного интереса. у тебя задачи профессиональные - сколько раз мне нужно повторить, что сравнивать профессионала с любителем-хоббистом некорректно? warning тебе - сравнение операндов разных типов.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:36:49
Reflector
[uquote="ARV",url="/forum/viewtopic.php?p=4235596#p4235596"]во-вторых, моё впихивание невпихуемого - это хобби, т.е. я это делаю из чисто спортивного интереса. у тебя задачи профессиональные - сколько раз мне нужно повторить, что сравнивать профессионала с любителем-хоббистом некорректно?[/uquote]
Вроде писал и не раз, что программист, но не эмбеддер, следовательно все мои игры с мк - такое же хобби, мне за это никто не платит.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:42:27
ARV
дело не в том, платят или нет, а в навыках, опыте и подходах.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:46:44
Reflector
[uquote="ARV",url="/forum/viewtopic.php?p=4235604#p4235604"]дело не в том, платят или нет, а в навыках, опыте и подходах.[/uquote]
Навыки, опыт и подходы могут быть другие, а мотивация та же самая - спортивный интерес.
Re: Литература для stm32
Добавлено: Вс май 22, 2022 12:57:14
Eddy_Em
[uquote="VladislavS",url="/forum/viewtopic.php?p=4235576#p4235576"]А есть только куб, код USB которого не помещается в младшие контроллеры F0?[/uquote]
В смысле не помещается? А как тогда калокуберы с STM32F0x2 работают? =D
Re: Литература для stm32
Добавлено: Вс май 22, 2022 13:29:54
VladislavS
Ну не то чтобы совсем не помещается, это я образно написал, но что-то полезное рядом с ним уже будешь утаптывать.
Добавлено after 14 minutes 44 seconds:
Вот, кстати, из полезного неногодрыжного.
Таблица перекодировки. Где-то уже показывал, не помню где. Тут же налетели ястребы - да мы, да это всё внешними утилитами генерится и чуть ли не в виде бинарных файлов прилинковывается.
Спойлер
Код: Выделить всё
template <typename T, size_t SIZE>
struct ENCODE_TABLE
{
template <typename F>
constexpr ENCODE_TABLE(F f) { size_t i{}; for(auto& x:table) x=f(i++); }
constexpr auto operator()(const size_t n) const { return table[n]; }
constexpr auto& operator[](const size_t n) const { return table[n]; }
private:
T table[SIZE]{};
};