Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Литература для stm32

Вс май 22, 2022 14:46:01

Я работаю с радиотехниками, там всяких синтезаторов частот, аттенюаторов, dds, коречипов вагон и тележка.
И для них каждый раз нужна разная конфигурация порта? Стандартных недостаточно?
Аналогичный макрос? Так его просто не существует. Как можно сравнить размер с тем чего нет?
Я вполне представляю какого размера ваш код для портов. Явно больше моих 200 строк.
Я видел пример формирования дескрипторов USB через шаблоны - там приходится прописывать одно и то же дважды, сначала описание типа, потом заполнение его значениями. Причем не единственный раз при написании библиотеки, а постоянно.
Вы так ничего и не поняли. Нет никакой ручной оптимизации. Это делает компилятор
Еще раз: компилятор подобные оптимизации делать не вправе.
Объяснение того что происходит под прошлым спойлером тут
Вот именно это и есть ручная оптимизация: вы берете регистр и руками выбираете в какой байт писать, или вообще писать не в ODR, а в BSRR.
Это там где Принцессы «пукают фиалками»?
Нет, в ваших краях я не бывал.
И это рассказывает человек, у которого в коде официально костыль задокументирован, иначе два раза вызывается :)
Так вы поэтому свой код не показываете, что боитесь что вам в любую мелочь будут тыкать.
Такое, что вам придётся вручную раскладывать доступ по портам
Нет, я просто повешу на один порт и на этом проблемы заканчиваются. Или воспользуюсь более подходящими интерфейсами вместо ногодрыга.
только вот спор об эффективности мне кажется великой глупостью: для чего вам создали МК с дикими мегагерцами?
Есть еще удобство чтения, переносимости и модификации кода.
и пару слов о кодогенераторах. имхо, это тоже тупик для интеллекта.
Этим можно назвать даже использование библиотек.
А у кодогенераторов проблемы куда проще, и я их при описал. Его необходимо поддерживать в актуальном состоянии как под все ОС, так и под все МК. Его необходимо поставлять вместе с исходниками от всех проектов (и тоже поддерживать в актуальном состоянии). Не говоря о том, как стыковать сгенерированный код с рукописным. Включая стиль программирования, да хотя бы табуляции или пробелы, расположение скобок и т.п.
Т нет в рукаве никакого продвинутого конфигуратора с кодогенератором эффективного кода? А.

У меня - есть :))) ! Написан совместно с коллегами
И поэтому на предложение показать его выхлоп вы ответили "так же"? Хотя очевидно, что отличия будут, пусть даже косметические.

Re: Литература для stm32

Вс май 22, 2022 15:48:15

И для них каждый раз нужна разная конфигурация порта?
В них вообще не нужна конфигурация порта. Я передаю в класс заранее подготовленный интерфейс, к которому он подключен. Например, программируемый резистор AD5142 на шину SPI3 я повешу так.
Код:
SPI::spi3::Init(SPI::SPI_BR::PCLK_DIV2, SPI::CPOL::_0, SPI::CPHA::_1);
using SPI3_CS2 = GPIO::PA_0;
using SPI_AD5142 =  SPI::TSIMPLE_SPI<SPI::spi3, SPI3_CS2>;
using AD5142 = TAD5142<SPI_AD5142>;

Стандартных недостаточно?
Что такое стандартные? Сегодня он на каком-то из SPI STM32 висит, завтра на Microblaze, а послезавтра вообще на ногодрыге. Класс TAD5142 об этом ничего не знает.

Я вполне представляю какого размера ваш код для портов. Явно больше моих 200 строк.
Ну так ваш макрос и делает не больше 5% от моего.

Я видел пример формирования дескрипторов USB через шаблоны - там приходится прописывать одно и то же дважды, сначала описание типа, потом заполнение его значениями. Причем не единственный раз при написании библиотеки, а постоянно.
Шо, опять? Ну ничего, я терпеливый. Большинство дескрипторов имеют строго определённый формат, описанный в спецификации USB. На языке С/С++ форматы описывают структурами. Это в принципе неизменяемые данные. Например, DEVICE_DESCRIPTOR.
Что вы в нём собрались редактировать? Он есть, задан в спецификации, лежит себе в заголовочном файле. Когда мне надо сделать реальный дескриптор, то я беру и создаю константу этого типа. В ней я могу менять только значения полей, но не их размер, состав и порядок. Иначе нарушу спецификацию. Отлично, беру и заполняю ОДИН РАЗ.
Всё, отдаю это на компиляцию. Компилятор проверит, совпадает ли то что я там написал с типом USB_DEVICE_DESCRIPTOR. В другом проекте я этот дескриптор заполню по другому (сменю VID/PID, например), но определение типа USB_DEVICE_DESCRIPTOR трогать никогда не буду. Вообще никогда. Совсем никогда.

Еще раз: компилятор подобные оптимизации делать не вправе.
То есть, то что я вам показал с листингом не существует? Не верь глазам своим?

Вот именно это и есть ручная оптимизация: вы берете регистр и руками выбираете в какой байт писать, или вообще писать не в ODR, а в BSRR.
Да сколько же можно тупить? Это делаю не я, а компилятор во время компиляции исходя из поданных на вход данных. Я только один раз задал ему правило как это делать. Дальше он делает это САМ, не то что бы не руками, но и без моего участия вовсе. Я всего этого при написании прикладного кода вообще не вижу.

Так вы поэтому свой код не показываете, что боитесь что вам в любую мелочь будут тыкать.
Мой код USB только ленивый не видел. Как для обычных STM32, так и для STM32 с USB_OTG. А часть кода я действительно не показываю по разным причинам.

Или воспользуюсь более подходящими интерфейсами вместо ногодрыга.
Пошлёте заказчика, который принесёт плату, разведённую на ногодрыг, лесом? Ну можно и так, конечно, разок.

Re: Литература для stm32

Вс май 22, 2022 18:48:53

О чем вы вообще спорите? Какой в этом весь смысл?
На выходе получите те же функции
или так
Что изменилось? Да ни чего не изменилось. Единственный остается вопрос - доступ через указатель. От того как ваш компилятор откалибрует этот доступ, так и будет. Для себя вы эти две функции можете переписать более эффективно, уберете указатель, еще что-то.

На что вы клюете? На размер? На красивую запись? На что еще?

Re: Литература для stm32

Вс май 22, 2022 19:04:23

В них вообще не нужна конфигурация порта.
Тогда зачем вы их перечисляли в качестве ответа на вопрос о настройках порта?
Ну так ваш макрос и делает не больше 5% от моего.
А учитывая, что мой макрос выполняет все, что требуется, получается, в вашем 95% - мусор?
Большинство дескрипторов имеют строго определённый формат
И поэтому их нет смысла даже обсуждать. Вы бы еще хвастаться начали, как создаете целочисленные переменные.
Естественно, речь шла о менее тривиальных вещах - ConfigurationDescriptor, HIDDescriptor.
Да сколько же можно тупить? Это делаю не я, а компилятор
Хотите сказать, это компилятор вам в исходник код вписывает? У вас ручная оптимизация В ИСХОДНИКЕ.
Пошлёте заказчика, который принесёт плату, разведённую на ногодрыг, лесом?
Можно так. Можно демонстративно накостылить еще больше, чтобы говноразводке соответствовал еще и говнокод. Ну там магических констант насыпать, Ардуинские библиотеки вперемешку с ST-HAL'ом. Хотя я такое вряд ли осилю.

Re: Литература для stm32

Вс май 22, 2022 19:07:16

На выходе получите те же функции
Может те же, а может и нет. Возьмите функцию Clear, например, подставьте в неё те же данные, что вот в этом сообщении. Сравните результат.

Re: Литература для stm32

Вс май 22, 2022 19:31:02

VladislavS, вы сделали
Код:
pa0_15.clear();
pa4_11.clear();
pa8_15.clear();
то есть представили оптимизированную компилятором цепочку.
Теперь то же самое, но каждый раз отдельно, то есть отдельно pa0_15.clear - плиз листинг, pa4_11.clear - листинг, и pa8_15.clear - листинг, а не все в куче.
Думаю, pa0_15.clear + pb4_11.clear + pc8_15.clear уже было бы поинтересней.

Re: Литература для stm32

Вс май 22, 2022 19:42:55

Пытка апельсинами продолжалась третьи сутки(С) :))) Изначально автор темы спрашивал про какую-нить книжку об СТМ-ках. А вот уже семь страниц вы тут порты конфигите. Это треш какой-то, пасаны. За это время любой ардуинщик сделает готовое устройство и продаст его, а вы так и будете спорить, с какой стороны лучше мыть ноги :)))

Re: Литература для stm32

Вс май 22, 2022 20:11:29

Тогда зачем вы их перечисляли в качестве ответа на вопрос о настройках порта?
Я не понимаю этот вопрос.

А учитывая, что мой макрос выполняет все, что требуется, получается, в вашем 95% - мусор?
Получается "виноград то кислый" :)

И поэтому их нет смысла даже обсуждать.
Вот и объясните, какого рожна вы на очередной круг поехали?

Вы бы еще хвастаться начали, как создаете целочисленные переменные.
Я ничего не создавал, а лишь перенёс спецификацию на язык программирования. Точно так же описывают структуры сетевых пакетов, IP-заголовков и т.д. Типизировать данные это обычная практика для языков высокого уровня.

ConfigurationDescriptor
Вообще не проблема. Собирается из типовых дескрипторов на раз два.
Код:
//===========
// MSD Descriptor Type
//===============
struct __attribute__((__packed__)) USB_MSD_DESCRIPTOR

  USB_INTERFACE_DESCRIPTOR              Interface_0;      // MSD Interface
  USB_ENDPOINT_DESCRIPTOR               EndPoint_1;       // | Data IN Endpoint
  USB_ENDPOINT_DESCRIPTOR               EndPoint_2;       // | Data OUT Endpoint
};

Код:
//===========
// CDC VCP Configuration Descriptor Type
//===============
struct __attribute__((__packed__)) USB_CDC_VCP_CONFIGURATION_DESCRIPTOR
{
  USB_CONFIGURATION_DESCRIPTOR          Config;
  USB_CDC_VCP_DESCRIPTOR                cdc;
};

Или составной, пожалуйста
Код:
//============
// MSD + CDC Configuration Descriptor Type
//================
struct __attribute__((__packed__)) USB_MSD_CDC_CONFIGURATION_DESCRIPTOR
{
  USB_CONFIGURATION_DESCRIPTOR           Config;
  USB_MSD_DESCRIPTOR                     msd;
  USB_INTERFACE_ASSOCIATION_DESCRIPTOR   iad;
  USB_CDC_VCP_DESCRIPTOR                 cdc;
};


HIDDescriptor.
С HID всё интереснее:
1. У него нет фиксированного формата, а надо набирать каждый раз под функционал устройства.
2. Я знаю как это сделать с помощью шаблона. Это несложная, но кропотливая работа. Мне она на практике не нужна. HID пробовал, но на практике не использую. Соответственно и время на это тратить не хочу.
3. В отличии от "чудоконфигуратора для GPIO", для HID есть неплохая общедоступная программа, которой можно быстро состряпать любой HID. Собственно п.2 ещё менее актуален становится.
4. Судя по вашему вопросу в этой теме, с макросами вы тоже не сильно преуспели.

Хотите сказать, это компилятор вам в исходник код вписывает?
Вы себе хоть немного представляете что такое инстанциация шаблона и выполнение кода на этапе компиляции?

У вас ручная оптимизация В ИСХОДНИКЕ.
Я не делаю это руками. Это делает компилятор. Cколько раз можно повторять? Я написал правила, компилятор сам по ним выбирает оптимальные решения.


Можно так.
Ваше право, а я просто подставлю нужные пины в класс и предоставлю компилятору всё разрулить. И если проходим по скорости, да и фиг бы с ним. Заказчику расскажу как в следующий раз сделать правильней.

Добавлено after 6 minutes 16 seconds:
Теперь то же самое, но каждый раз отдельно
Да какая разница? Ну будет адрес регистра каждый раз загружаться, что это изменит? Это постоянная составляющая. Смысл был в том, что для разных наборов данных выбирается разный метод.

Добавлено after 19 minutes 51 second:
Вот, пришла в голову аналогия. Написал я, допустим, крутой алгоритм "сортировки пузырьком". Скомпилировал, подал на вход данные, получил результат. Я вручную сортировал или компьютер это делал? Вроде нет сомнений, что компьютер. Точно так же с алгоритмом оптимизации методов работы с портом. Я написал алгоритм, а компилятор его выполняет, только не в рантайме, а в компайлтайме.
Последний раз редактировалось VladislavS Вс май 22, 2022 20:20:47, всего редактировалось 1 раз.

Re: Литература для stm32

Вс май 22, 2022 20:15:44

VladislavS писал(а):Смысл был в том, что для разных наборов данных выбирается разный метод.
Но этот метод можно заранее прописать, и Си-ки это сделают, все равно вы в коде не будете жонглировать пинами, и у вас будет четкая привязка к пинам.
VladislavS, за вашей красотой скрываются километры кодовой портянки. Что бы подергать пином порта эти километры кода не нужны, туда же spi i2c и тому подобное.
Практический смысл - нулевой. Лишняя трата времени.

Re: Литература для stm32

Вс май 22, 2022 20:38:20

Но этот метод можно заранее прописать, и Си-ки это сделают
В том то и дело что не сделают. Во-первых, это как раз и будет ручная оптимизация. Как раз тут ради несколько тактов будет тратится уйма времени. Делать подобное стоит, только если всё на автомате, без участия программиста. Во-вторых, 90% из них не знают, что таки оптимизации вообще возможны, потому что плохо знают железо. Вот вы смотрите на листинги разных clear() и зачем-то хотите их отдельно скомпилировать. Это говорит о непонимании того что там происходит. В-третьих, оставшимся 10% приходится по несколько дней рассказывать и показывать откуда берётся разница в скорости. Тяжёлый случай, но всречается.

VladislavS, за вашей красотой скрываются километры кодовой портянки.
Да дались вам эти портянки. Вон, макросописатель провозгласил 200 строк. Посмотрел свой код. 1000 строк общих классов плюс 300-600 строк на каждое семейство микроконтроллеров в зависимости от навороченности GPIO в оном. Ну так и разница по функционалу в разы. Тупо раздельнопиновая реализация те же 150-200 строк и будет.

Практический смысл - нулевой.
Откуда данные?

Лишняя трата времени.
Что вас так моё время волнует? Оно потрачено в увлекательном диалоге с Reflector, за что ему огромное спасибо. Приобретены новые знания, применение которых уже многократно окупило время на изучение.
Последний раз редактировалось VladislavS Вс май 22, 2022 20:50:44, всего редактировалось 5 раз(а).

Re: Литература для stm32

Вс май 22, 2022 20:39:11

я фигею! портянки не нужны, говорте? да вы только вспомните, сколько портянок УЖЕ работают на вас в виде компилятора, ассемблера, линкера, стстемы сборки и т.п.! а сам язык это, по-вашему, не портянки?! или только то, что вы сами выбрали, может так называться? реализация for - это сотни, если не тысячи, строк в компиляторе, но вы же пользуетесь именно этим оператором, отказавшись от минимализма машинных кодов или даже ассемблера?!

Re: Литература для stm32

Вс май 22, 2022 20:52:12

VladislavS писал(а):Делать подобное стоит, только если всё на автомате, без участия программиста
Как раз на автомате и без участия программиста
VladislavS писал(а):Вот вы смотрите на листинги разных clear() и зачем-то хотите их отдельно скомпилировать.
вы же листин показываете, если тут оптимизация кода пошла ну тогда давайте конкретно посмотрим. И если уж листин показываете, тогда пишите на каком компиляторе вы этого добились, iar или arm-gcc или может какой там у вас еще есть.

Re: Литература для stm32

Вс май 22, 2022 21:15:01

Вот и объясните, какого рожна вы на очередной круг поехали?
То есть вы подменили задачу и обвиняете меня, что настаиваю на исходной? Исходная задача была именно про ConfigurationDescriptor и HIDDescriptor, это вас зачем-то понесло на DeviceDescriptor, который меняется примерно никогда.
Вообще не проблема. Собирается из типовых дескрипторов на раз два.
Ну то есть как я и говорил, надо лазить туда-сюда чтобы настроить дескриптор. Номера дескрипторов, номера точек, размеры, параметры. А потом еще раз чтобы заполнить их значениями.
2. Я знаю как это сделать с помощью шаблона. Это несложная, но кропотливая работа. Мне она на практике не нужна. HID пробовал, но на практике не использую. Соответственно и время на это тратить не хочу.
А кто тут хвастался, что все элементарно делается? viewtopic.php?p=4234849#p4234849
3. В отличии от "чудоконфигуратора для GPIO", для HID есть неплохая общедоступная программа, которой можно быстро состряпать любой HID.
То есть нормального решения нет, пошли уродливые костыли?
4. Судя по вашему вопросу в этой теме, с макросами вы тоже не сильно преуспели.
Я не преуспел только с определением размера. Сейчас стоит костыль с ручным указанием. К счастью, требуется оно нечасто.
Я не делаю это руками. Это делает компилятор. Cколько раз можно повторять? Я написал правила, компилятор сам по ним выбирает оптимальные решения.
Оптимальное решение из написанных вами РУЧНЫХ оптимизаций. Сколько можно повторять это?!
В том то и дело что не сделают. Во-первых, это как раз и будет ручная оптимизация.
Сделают, конечно, какая разница на каком языке заниматься ручной оптимизацией.

Re: Литература для stm32

Вс май 22, 2022 21:19:35

Как раз на автомате и без участия программиста
О, ещё один! Вы хоть видите разницу между кодом выполняющимся в рантайме и на этапе компиляции? Код который выполняется на этапе компиляции в случае С++, программист вынужден бы делать руками/в голове/на листочке. В общем, тратить на это время.

вы же листин показываете, если тут оптимизация кода пошла ну тогда давайте конкретно посмотрим.
Ну так я исходный код приложил, сопоставьте его с листингом. Там же видно какой из методов "стрельнул".

И если уж листин показываете, тогда пишите на каком компиляторе вы этого добились, iar или arm-gcc или может какой там у вас еще есть.
Пофиг на каком. Дело не в компиляторе, дело в коде. На разных компиляторах будет небольшая разница в инструкциях загрузки адресов и констант, но общий смысл заданный кодом, не изменится.

Re: Литература для stm32

Вс май 22, 2022 21:28:18

VladislavS писал(а):О, ещё один!
Вызов с параметром покажите.
VladislavS писал(а):Ну так я исходный код приложил, сопоставьте его с листингом.
Я вижу оптимизацию компилятора. А для каждого пина можно свой метод прописать.
VladislavS писал(а):На разных компиляторах будет небольшая разница
Еще как большая. В совокупности эта разница вылазит в хорошие килобайты.
Вот к примеру
Функция CMSIS SystemCoreClockUpdate, на arm-gcc 104 байта, на iar 74 байта.
Но ее можно еще и за инлайнить.
Ладно. Функцию которую нельзя инлайнить, она через указатель вызывается.
Пример, V_1, на arm-gcc 264 байта, на iar 182 байта.
А вот эту, SysTick_Handler, на arm-gcc 44 байта, на iar 30 байта.

А общий результат
Что на это скажите? Надо смотреть детально?

Re: Литература для stm32

Вс май 22, 2022 22:26:30

Ну то есть как я и говорил, надо лазить туда-сюда чтобы настроить дескриптор. Номера дескрипторов, номера точек, размеры, параметры. А потом еще раз чтобы заполнить их значениями.
У вас какая-то извращённая фантазия. Просто берёшь и заполняешь поля структуры. Вы что прямо из головы дескрипторы пишете?

А кто тут хвастался, что все элементарно делается?
Ну так оно элементарно и делается, просто надо аккуратно все возможные поля по спецификации закодировать. А так как разных полей не мало, то это влечёт за собой временные затраты, которые мне тратить нет надобности.

То есть нормального решения нет, пошли уродливые костыли?
Где костыли? Удобный визуальный инструмент, дающий быстро гарантировано правильный дескриптор, это костыль? Чёрное это белое.

Оптимальное решение из написанных вами РУЧНЫХ оптимизаций.
Да поймите же, процесс оптимизации не состоит только в тупой подстановке, как это делает препроцессор с вашим макросом. Там выполняется множество алгоритмов, приводящих к инстанциации, которая тоже не является тупой подстановкой. Ничего из этого я не делаю руками, это делает компилятор.

Сделают, конечно, какая разница на каком языке заниматься ручной оптимизацией.
Только чисто теоретически. А на практике никто этого не делает. Потому что вот тут действительно руками. Ну и есть ещё категория "|=" потому что так удобнее.

Добавлено after 31 minute 14 seconds:
Вызов с параметром покажите.
Подставьте вместо PM значения 0xFFFF, 0x0FF0, 0xFF00 да посмотрите.

Что на это скажите?
Скажу, что размер прошивки последнее что вас должно волновать и то только в разрезе влезло/не влезло.

Re: Литература для stm32

Пн май 23, 2022 06:12:52

Слуште, млин, да все уже всё поняли. На кой на 50-й раз по кругу одно и то же мусолить про конфиг портов, ётс! Вот когда коту делать нех, он яйца лижет.

Re: Литература для stm32

Пн май 23, 2022 06:16:46

Тебя тут кто-то держит и заставляет читать?

Re: Литература для stm32

Пн май 23, 2022 07:23:33

Да едрическая ты сила. "Театр одного актера", млин. Его спрашивают:
--- Славка, что ты сделал?
--- Да вот, порты накофигил...
--- Ага, малаток. А с UART-ом закончил?
--- Неее, там всё сложно, еще путаю Idle и RTO.

Вобщем, это в кратце всё, что описано на 7 страницах этой, млин, темы. Этот театр одной темы будет продолжаться еще долго, потому что кроме конфига портов дальше у него - тьма и туман, даже с UART-ом толком не разобрался, путает флаги. В соседней теме полез было, да запутался в двух битах и вообще свалил, чтобы не засмеяли вовсе. VladislavS - узкий специалисътъ одной темы - конфига пинов. На этом - всё, дальше не волокет. Вот даже и не смей возражать, ты уже тут попытался с уартом, да облажался.

Re: Литература для stm32

Пн май 23, 2022 10:18:31

У вас какая-то извращённая фантазия. Просто берёшь и заполняешь поля структуры. Вы что прямо из головы дескрипторы пишете?
Именно об этом я и говорю: сначала создаешь структуру, потом заполняешь ее поля. Структуры-то для разных устройств разные.
Ну так оно элементарно и делается, просто надо аккуратно все возможные поля по спецификации закодировать.
Опять в двух местах менять.
Где костыли? Удобный визуальный инструмент,

Вот этот "удобный визуальный инструмент" на самом деле и есть уродливый костыль. Чем меньше приходится применять к коду сторонних программ, тем лучше. Я уже объяснял почему.
Да поймите же
Опять вы упорно игнорируете то, что я вам говорю. Вы РУКАМИ прописали четыре (или сколько там) вариантов. Да, компилятор потом может еще пройтись, что-то свернуть.
Да едрическая ты сила. "Театр одного актера", млин. Его спрашивают:
Какое ваше дело до чужих достижений? Своими хвастайтесь, тогда их и будем обсуждать.
Вы-то что сделали? Разобрались с портами и экзотическими режимами UART'а? Может, у вас есть свои библиотеки, которыми стоит пользоваться окружающим? Может, достойные повторения проекты?
Ответить