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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

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

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

Сообщение VladislavS »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235662#p4235662"]И для них каждый раз нужна разная конфигурация порта?[/uquote]В них вообще не нужна конфигурация порта. Я передаю в класс заранее подготовленный интерфейс, к которому он подключен. Например, программируемый резистор 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>;
Спойлер

Код: Выделить всё

enum class RDAC_NUM : uint16_t { _1 = 0x0000, _2 =  0x0100 };

template<typename TSPI>
class TAD5142
{
public:
  TAD5142() = delete;

  static inline void SoftwareReset()
  {
    TSPI::template Write<16>(0xB000);
  }

  static inline void SetRDAC(RDAC_NUM r_num, uint8_t rdac)
  {
    TSPI::template Write<16>(0x1000 + uint16_t(r_num) + rdac);
  }

  static inline void RDAC2EEPROM(RDAC_NUM r_num)
  {
    TSPI::template Write<16>(0x7001 + uint16_t(r_num));
  }

};
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235662#p4235662"]Стандартных недостаточно?[/uquote]Что такое стандартные? Сегодня он на каком-то из SPI STM32 висит, завтра на Microblaze, а послезавтра вообще на ногодрыге. Класс TAD5142 об этом ничего не знает.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235662#p4235662"]Я вполне представляю какого размера ваш код для портов. Явно больше моих 200 строк.[/uquote]Ну так ваш макрос и делает не больше 5% от моего.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235662#p4235662"]Я видел пример формирования дескрипторов USB через шаблоны - там приходится прописывать одно и то же дважды, сначала описание типа, потом заполнение его значениями. Причем не единственный раз при написании библиотеки, а постоянно.[/uquote]Шо, опять? Ну ничего, я терпеливый. Большинство дескрипторов имеют строго определённый формат, описанный в спецификации USB. На языке С/С++ форматы описывают структурами. Это в принципе неизменяемые данные. Например, DEVICE_DESCRIPTOR.
Спойлер

Код: Выделить всё

struct __attribute__((__packed__)) USB_DEVICE_DESCRIPTOR
{
  uint8_t         bLength;            // размер дескриптора
  DescriptorType  bDescriptorType;    // тип дескриптора
  uint16_t        bcdUSB;             // версия usb
  uint8_t         bDeviceClass;       // класс устройства
  uint8_t         bDeviceSubClass;    // подкласс
  uint8_t         bDeviceProtocol;    // протокол
  uint8_t         bMaxPacketSize0;    // максимальный размер пакета для нулевой конечной точки
  uint16_t        idVendor;           // VID
  uint16_t        idProduct;          // PID
  uint16_t        bcdDevice;          // версия (ревизия) устройства
  uint8_t         iManufacturer;      // индекс строки с названием производителя
  uint8_t         iProduct;           // индекс строки с названием устройства
  uint8_t         iSerialNumber;      // индекс строки с серийным номером устройства
  uint8_t         bNumConfigurations; // количество поддерживаемых конфигураций
};
Что вы в нём собрались редактировать? Он есть, задан в спецификации, лежит себе в заголовочном файле. Когда мне надо сделать реальный дескриптор, то я беру и создаю константу этого типа. В ней я могу менять только значения полей, но не их размер, состав и порядок. Иначе нарушу спецификацию. Отлично, беру и заполняю ОДИН РАЗ.
Спойлер

Код: Выделить всё

constexpr USB_DEVICE_DESCRIPTOR DeviceDescriptor =
{
  .bLength            = sizeof(DeviceDescriptor),
  .bDescriptorType    = DescriptorType::DEVICE,
  .bcdUSB             = 0x0200,                   // usb 2.0
  .bDeviceClass       = 0x02,                     // Communications and CDC Control
  .bDeviceSubClass    = 0x02,                     //
  .bDeviceProtocol    = 0x00,                     // No class specific protocol required
  .bMaxPacketSize0    = 0x40,                     // 64
  .idVendor           = 0x0483,                   // VID
  .idProduct          = 0x5740,                   // PID
  .bcdDevice          = 0x0200,                   //
  .iManufacturer      = 0x01,                     //
  .iProduct           = 0x02,                     //
  .iSerialNumber      = 0x03,                     //
  .bNumConfigurations = 0x01                      //
};
Всё, отдаю это на компиляцию. Компилятор проверит, совпадает ли то что я там написал с типом USB_DEVICE_DESCRIPTOR. В другом проекте я этот дескриптор заполню по другому (сменю VID/PID, например), но определение типа USB_DEVICE_DESCRIPTOR трогать никогда не буду. Вообще никогда. Совсем никогда.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235662#p4235662"]Еще раз: компилятор подобные оптимизации делать не вправе.[/uquote]То есть, то что я вам показал с листингом не существует? Не верь глазам своим?

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235662#p4235662"]Вот именно это и есть ручная оптимизация: вы берете регистр и руками выбираете в какой байт писать, или вообще писать не в ODR, а в BSRR.[/uquote]Да сколько же можно тупить? Это делаю не я, а компилятор во время компиляции исходя из поданных на вход данных. Я только один раз задал ему правило как это делать. Дальше он делает это САМ, не то что бы не руками, но и без моего участия вовсе. Я всего этого при написании прикладного кода вообще не вижу.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235662#p4235662"]Так вы поэтому свой код не показываете, что боитесь что вам в любую мелочь будут тыкать.[/uquote]Мой код USB только ленивый не видел. Как для обычных STM32, так и для STM32 с USB_OTG. А часть кода я действительно не показываю по разным причинам.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235662#p4235662"]Или воспользуюсь более подходящими интерфейсами вместо ногодрыга.[/uquote]Пошлёте заказчика, который принесёт плату, разведённую на ногодрыг, лесом? Ну можно и так, конечно, разок.
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

О чем вы вообще спорите? Какой в этом весь смысл?
На выходе получите те же функции
Спойлер

Код: Выделить всё

			public:
				static DataT Read()
				{
				  return Regs()->ODR;
				}
				static void Write(DataT value)
				{
					Regs()->ODR = value;
				}
				static void ClearAndSet(DataT clearMask, DataT value)
				{
					Regs()->BSRR = (value | (uint32_t)clearMask << 16);
				}
				static void Set(DataT value)
				{
					Regs()->BSRR = value;
				}
				static void Clear(DataT value)
				{
					Regs()->BSRR = ((uint32_t)value << 16);
				}
				static void Toggle(DataT value)
				{
					Regs()->ODR ^= value;
				}
				static DataT PinRead()
				{
					return Regs()->IDR;
				}
или так
Спойлер

Код: Выделить всё

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
    
  return ((uint16_t)GPIOx->ODR);
}

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  
  GPIOx->ODR = PortVal;
}
Что изменилось? Да ни чего не изменилось. Единственный остается вопрос - доступ через указатель. От того как ваш компилятор откалибрует этот доступ, так и будет. Для себя вы эти две функции можете переписать более эффективно, уберете указатель, еще что-то.

На что вы клюете? На размер? На красивую запись? На что еще?
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

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

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

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235752#p4235752"]На выходе получите те же функции[/uquote]Может те же, а может и нет. Возьмите функцию Clear, например, подставьте в неё те же данные, что вот в этом сообщении. Сравните результат.
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

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 уже было бы поинтересней.
Реклама
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

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

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

Сообщение VladislavS »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]Тогда зачем вы их перечисляли в качестве ответа на вопрос о настройках порта?[/uquote]Я не понимаю этот вопрос.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]А учитывая, что мой макрос выполняет все, что требуется, получается, в вашем 95% - мусор?[/uquote]Получается "виноград то кислый" :)

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]И поэтому их нет смысла даже обсуждать.[/uquote]Вот и объясните, какого рожна вы на очередной круг поехали?

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]Вы бы еще хвастаться начали, как создаете целочисленные переменные.[/uquote]Я ничего не создавал, а лишь перенёс спецификацию на язык программирования. Точно так же описывают структуры сетевых пакетов, IP-заголовков и т.д. Типизировать данные это обычная практика для языков высокого уровня.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]ConfigurationDescriptor[/uquote]Вообще не проблема. Собирается из типовых дескрипторов на раз два.

Код: Выделить всё

//===========
// 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;
};
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]HIDDescriptor.[/uquote]С HID всё интереснее:
1. У него нет фиксированного формата, а надо набирать каждый раз под функционал устройства.
2. Я знаю как это сделать с помощью шаблона. Это несложная, но кропотливая работа. Мне она на практике не нужна. HID пробовал, но на практике не использую. Соответственно и время на это тратить не хочу.
3. В отличии от "чудоконфигуратора для GPIO", для HID есть неплохая общедоступная программа, которой можно быстро состряпать любой HID. Собственно п.2 ещё менее актуален становится.
4. Судя по вашему вопросу в этой теме, с макросами вы тоже не сильно преуспели.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]Хотите сказать, это компилятор вам в исходник код вписывает?[/uquote]Вы себе хоть немного представляете что такое инстанциация шаблона и выполнение кода на этапе компиляции?

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]У вас ручная оптимизация В ИСХОДНИКЕ.[/uquote]Я не делаю это руками. Это делает компилятор. Cколько раз можно повторять? Я написал правила, компилятор сам по ним выбирает оптимальные решения.


[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235762#p4235762"]Можно так.[/uquote]Ваше право, а я просто подставлю нужные пины в класс и предоставлю компилятору всё разрулить. И если проходим по скорости, да и фиг бы с ним. Заказчику расскажу как в следующий раз сделать правильней.

Добавлено after 6 minutes 16 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=4235775#p4235775"]Теперь то же самое, но каждый раз отдельно[/uquote]Да какая разница? Ну будет адрес регистра каждый раз загружаться, что это изменит? Это постоянная составляющая. Смысл был в том, что для разных наборов данных выбирается разный метод.

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

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

Сообщение Dimon456 »

VladislavS писал(а):Смысл был в том, что для разных наборов данных выбирается разный метод.
Но этот метод можно заранее прописать, и Си-ки это сделают, все равно вы в коде не будете жонглировать пинами, и у вас будет четкая привязка к пинам.
VladislavS, за вашей красотой скрываются километры кодовой портянки. Что бы подергать пином порта эти километры кода не нужны, туда же spi i2c и тому подобное.
Практический смысл - нулевой. Лишняя трата времени.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235794#p4235794"]Но этот метод можно заранее прописать, и Си-ки это сделают[/uquote]В том то и дело что не сделают. Во-первых, это как раз и будет ручная оптимизация. Как раз тут ради несколько тактов будет тратится уйма времени. Делать подобное стоит, только если всё на автомате, без участия программиста. Во-вторых, 90% из них не знают, что таки оптимизации вообще возможны, потому что плохо знают железо. Вот вы смотрите на листинги разных clear() и зачем-то хотите их отдельно скомпилировать. Это говорит о непонимании того что там происходит. В-третьих, оставшимся 10% приходится по несколько дней рассказывать и показывать откуда берётся разница в скорости. Тяжёлый случай, но всречается.

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235794#p4235794"]VladislavS, за вашей красотой скрываются километры кодовой портянки.[/uquote]Да дались вам эти портянки. Вон, макросописатель провозгласил 200 строк. Посмотрел свой код. 1000 строк общих классов плюс 300-600 строк на каждое семейство микроконтроллеров в зависимости от навороченности GPIO в оном. Ну так и разница по функционалу в разы. Тупо раздельнопиновая реализация те же 150-200 строк и будет.

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235794#p4235794"]Практический смысл - нулевой.[/uquote]Откуда данные?

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235794#p4235794"]Лишняя трата времени.[/uquote]Что вас так моё время волнует? Оно потрачено в увлекательном диалоге с Reflector, за что ему огромное спасибо. Приобретены новые знания, применение которых уже многократно окупило время на изучение.
Последний раз редактировалось VladislavS Вс май 22, 2022 20:50:44, всего редактировалось 5 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

VladislavS писал(а):Делать подобное стоит, только если всё на автомате, без участия программиста
Как раз на автомате и без участия программиста
Спойлер

Код: Выделить всё

  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;
  }
программист видимо к этому руку не приложил
VladislavS писал(а):Вот вы смотрите на листинги разных clear() и зачем-то хотите их отдельно скомпилировать.
вы же листин показываете, если тут оптимизация кода пошла ну тогда давайте конкретно посмотрим. И если уж листин показываете, тогда пишите на каком компиляторе вы этого добились, iar или arm-gcc или может какой там у вас еще есть.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Вот и объясните, какого рожна вы на очередной круг поехали?
То есть вы подменили задачу и обвиняете меня, что настаиваю на исходной? Исходная задача была именно про ConfigurationDescriptor и HIDDescriptor, это вас зачем-то понесло на DeviceDescriptor, который меняется примерно никогда.
Вообще не проблема. Собирается из типовых дескрипторов на раз два.
Ну то есть как я и говорил, надо лазить туда-сюда чтобы настроить дескриптор. Номера дескрипторов, номера точек, размеры, параметры. А потом еще раз чтобы заполнить их значениями.
2. Я знаю как это сделать с помощью шаблона. Это несложная, но кропотливая работа. Мне она на практике не нужна. HID пробовал, но на практике не использую. Соответственно и время на это тратить не хочу.
А кто тут хвастался, что все элементарно делается? https://radiokot.ru/forum/viewtopic.php ... 9#p4234849
3. В отличии от "чудоконфигуратора для GPIO", для HID есть неплохая общедоступная программа, которой можно быстро состряпать любой HID.
То есть нормального решения нет, пошли уродливые костыли?
4. Судя по вашему вопросу в этой теме, с макросами вы тоже не сильно преуспели.
Я не преуспел только с определением размера. Сейчас стоит костыль с ручным указанием. К счастью, требуется оно нечасто.
Я не делаю это руками. Это делает компилятор. Cколько раз можно повторять? Я написал правила, компилятор сам по ним выбирает оптимальные решения.
Оптимальное решение из написанных вами РУЧНЫХ оптимизаций. Сколько можно повторять это?!
В том то и дело что не сделают. Во-первых, это как раз и будет ручная оптимизация.
Сделают, конечно, какая разница на каком языке заниматься ручной оптимизацией.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235819#p4235819"]Как раз на автомате и без участия программиста[/uquote]О, ещё один! Вы хоть видите разницу между кодом выполняющимся в рантайме и на этапе компиляции? Код который выполняется на этапе компиляции в случае С++, программист вынужден бы делать руками/в голове/на листочке. В общем, тратить на это время.

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235819#p4235819"]вы же листин показываете, если тут оптимизация кода пошла ну тогда давайте конкретно посмотрим.[/uquote]Ну так я исходный код приложил, сопоставьте его с листингом. Там же видно какой из методов "стрельнул".

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235819#p4235819"]И если уж листин показываете, тогда пишите на каком компиляторе вы этого добились, iar или arm-gcc или может какой там у вас еще есть.[/uquote]Пофиг на каком. Дело не в компиляторе, дело в коде. На разных компиляторах будет небольшая разница в инструкциях загрузки адресов и констант, но общий смысл заданный кодом, не изменится.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

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

Сообщение Dimon456 »

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

А общий результат
Спойлер

Код: Выделить всё

arm-gcc
Program Size:
      text	   data	    bss	    dec	    hex	filename
     21685	    144	    808	  22637	   586d	Proekt_32F030.elf

iar 	 
  14'784 bytes of readonly  code memory
   1'718 bytes of readonly  data memory
   1'864 bytes of readwrite data memory
я даже бинарники сравнил, в плане размера.
Не поверил, прошил, работает.
Что на это скажите? Надо смотреть детально?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235829#p4235829"]Ну то есть как я и говорил, надо лазить туда-сюда чтобы настроить дескриптор. Номера дескрипторов, номера точек, размеры, параметры. А потом еще раз чтобы заполнить их значениями.[/uquote]У вас какая-то извращённая фантазия. Просто берёшь и заполняешь поля структуры. Вы что прямо из головы дескрипторы пишете?

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235829#p4235829"]А кто тут хвастался, что все элементарно делается?[/uquote]Ну так оно элементарно и делается, просто надо аккуратно все возможные поля по спецификации закодировать. А так как разных полей не мало, то это влечёт за собой временные затраты, которые мне тратить нет надобности.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235829#p4235829"]То есть нормального решения нет, пошли уродливые костыли?[/uquote]Где костыли? Удобный визуальный инструмент, дающий быстро гарантировано правильный дескриптор, это костыль? Чёрное это белое.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235829#p4235829"]Оптимальное решение из написанных вами РУЧНЫХ оптимизаций.[/uquote]Да поймите же, процесс оптимизации не состоит только в тупой подстановке, как это делает препроцессор с вашим макросом. Там выполняется множество алгоритмов, приводящих к инстанциации, которая тоже не является тупой подстановкой. Ничего из этого я не делаю руками, это делает компилятор.

[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235829#p4235829"]Сделают, конечно, какая разница на каком языке заниматься ручной оптимизацией.[/uquote]Только чисто теоретически. А на практике никто этого не делает. Потому что вот тут действительно руками. Ну и есть ещё категория "|=" потому что так удобнее.

Добавлено after 31 minute 14 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=4235835#p4235835"]Вызов с параметром покажите.[/uquote]Подставьте вместо PM значения 0xFFFF, 0x0FF0, 0xFF00 да посмотрите.

[uquote="Dimon456",url="/forum/viewtopic.php?p=4235835#p4235835"]Что на это скажите?[/uquote]Скажу, что размер прошивки последнее что вас должно волновать и то только в разрезе влезло/не влезло.
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

Слуште, млин, да все уже всё поняли. На кой на 50-й раз по кругу одно и то же мусолить про конфиг портов, ётс! Вот когда коту делать нех, он яйца лижет.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Тебя тут кто-то держит и заставляет читать?
СпойлерМоргни правым глазом, если тебя держат в заложниках.
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

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

Вобщем, это в кратце всё, что описано на 7 страницах этой, млин, темы. Этот театр одной темы будет продолжаться еще долго, потому что кроме конфига портов дальше у него - тьма и туман, даже с UART-ом толком не разобрался, путает флаги. В соседней теме полез было, да запутался в двух битах и вообще свалил, чтобы не засмеяли вовсе. VladislavS - узкий специалисътъ одной темы - конфига пинов. На этом - всё, дальше не волокет. Вот даже и не смей возражать, ты уже тут попытался с уартом, да облажался.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

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

Вернуться в «ARM»