Вт май 17, 2022 21:37:25
Вт май 17, 2022 21:41:45
Вт май 17, 2022 22:12:00
Вт май 17, 2022 22:59:34
Ср май 18, 2022 00:47:52
Ср май 18, 2022 05:33:31
Ср май 18, 2022 06:51:39
Ср май 18, 2022 07:08:56
template<typename TGpio, uint32_t Mask = TGpio::pins_mask>
static consteval auto AddPinsFromRange()
{
return []<auto... Is>(std::index_sequence<Is...>)
{
return (std::conditional_t<((1U<<Is)&Mask)!=0, TypeList<TPin<TGpio,Is, typename TGpio::tpins_mode>>, TypeList<>>{} + ...);
} (make_reverse_index_sequence<TGpio::width>());
}
Ср май 18, 2022 07:48:46
Традиционное HAL'овское переливание из пустого в порожнее, когда одни и те же данные безо всякого изменения передаются между пятью функциями и тремя одинаковыми проверками. Да еще и запись длиннее и сложнее для понимания, чем работа с регистрами.Что плохого тебе сделали структуры?
Ср май 18, 2022 08:21:12
Ср май 18, 2022 08:30:37
Ср май 18, 2022 10:16:47
Ср май 18, 2022 10:38:27
Ср май 18, 2022 10:39:21
Хорошо. Без HAL это делается проще.когда например штук пять таймеров или штуки три SPI используют фрагменты одинакового кода, есть большой смысл сократить однотипные операции.
Эм-м-м, написание своих библиотек. Вот, например, реализация USB: https://github.com/COKPOWEHEU/usbЕсть мнение: "Критикуешь - предложи лучше".
Чтобы заставить контроллер работать так, как надо мне, а не вполсилы. Тот же USB, на Хабре проскакивало сравнение HAL'овской реализации с нормальной: https://habr.com/ru/post/558556/Вот ни разу не возникает. Как-то вообще фиолетово что у них там. Не понимаю, чего вы в него лезете?
Свои ЛГБТ-шные определения оставьте при себе, меня они не интересуют.Ну это имеет своё ЛГБТшное определение...
Позиция Эдди мне близка. Но говорю я из своего опыта, а не повторяю чужие слова или лозунги.Эдя покусал?
Тогда уж сразу DMA на этот буфер натравливайте, копировать из памяти в USB он вроде умеет (16 бит -> 32 бита), хоть на передачу байтиков не придется ядро тратить.Надо реализацию с круговым буфером, которую я для F303 сделал, перенести на остальные линейки.
Ср май 18, 2022 10:51:39
Ср май 18, 2022 12:18:50
реализация портов ввода-вывода (pinmacro.h), тоже более удобная,
Ср май 18, 2022 12:59:29
#elif defined(STM32F1)
#define USB_IRQn USB_LP_CAN1_RX0_IRQn
#define USB_IRQHandler USB_LP_CAN1_RX0_IRQHandler
#define USB_CNTR_LPMODE USB_CNTR_LP_MODE
#elif defined(STM32F3)
#define USB_IRQn USB_LP_CAN_RX0_IRQn
#define USB_IRQHandler USB_LP_CAN_RX0_IRQHandler
Ср май 18, 2022 13:48:25
И как это помогает посмотреть где повис код?
Ср май 18, 2022 14:17:32
Ср май 18, 2022 18:14:43
полноценное написание на С++ резко поднимет планку вхождения и размер портянок будет тоже немалым.
Там как раз выбрали неудачное подмножество С++. Слишком много ООП, избыточная универсальность вместо системы настроек и предупреждений.Ардуина писана на С++, в принципе даже с наворотами.
А с чего еще начинать изучение контроллера, как не с GPIO? То есть подобная библиотека сама пишется в самом начале освоения. Жаль только, я не видел удачного интерфейса, под который можно было бы подгонять свою.Та нууууу. "Волшебные циферки" и огромные портянки лишнего кода. Та нуууу... Хотя, кто как хочет, так и дрочет, как известно... Но блин, переписывать на свой лад то, что уже давно придумано - эт не та сфера, куда стоило бы применять силы.
Вот! А ведь HAL еще вдвое менее оптимальна.где-то с год назад обсуждали - неоптимально написано.
Это обсуждение я, видимо, пропустил. Хотя stm32 ведь равнодушна к выравниванию, разве нет? Или там просто потеря скорости?В функции записи в конечную точку очень опасный переход от (uint8_t *) к (uint16_t *) - посмотри макрос __UNALIGNED_UINT16_READ из CMSIS, иначе когда-нибудь тут выстрелит.
Даже HAL умеет несколько ног за раз конфигурировать.