Чт май 19, 2022 15:26:02
Чт май 19, 2022 15:32:53
Чт май 19, 2022 15:45:27
Чт май 19, 2022 15:47:59
Чт май 19, 2022 16:30:49
Вот-вот. А потом окажется, что для одного пина активный уровень "1", а для другого- "0".
*((volatile uint8_t *)&GPIOA->MODER+3) |= 3<<2;
А просто листинг посмотреть не судьба?
Я не собираюсь очередное подобие кала писать. Мне нужно лишь упростить написание и чтение кода.
Мы тут например USB обсуждали. Присоединяйтесь. Как вы считаете, как лучше абстрагировать переключение буферов точек с двойной буферизацией и надо ли это вообще делать? Как лучше обрабатывать события по обмену пакетом - поллингом или колбэками?Пасаны, вы бы с таким рвением упражнялись бы в работе
Чт май 19, 2022 16:42:08
Чт май 19, 2022 17:05:26
Чт май 19, 2022 17:13:26
Чт май 19, 2022 19:03:21
Отучаемся говорить за всех.USB теперь уже мало кого интересует
Нет смысла. Экономия трех тактов на старте не даст ровно никакого выигрыша.Плюс к этому, можно задать опцию "учесть состояние при включении питания", тогда можно не менять те биты, которые уже и так правильно стоят.
Да, примерно то же самое.AFRL и AFRH разве не то же самое?
И как у вашего алгоритма с читаемостью?менять будем данные только в 3-м байте. Соответственно применен байтовый доступ к регистру.
На тактовой процессора 72 МГц при FS подключении на обработку одного пакета больше 3000 тактов. Не успеть принять его за это время надо сильно постараться.
Чт май 19, 2022 19:41:17
Чт май 19, 2022 20:50:55
Чт май 19, 2022 22:21:16
Если бы три. А то в десятки раз на конфигурации всего чипа.
А что, ваш код уже стал поставляться вместе с компилятором?Ты много раз stdio.h читал?
Если у вас нет двойной буферизации и достаточно активный обмен, то не успеете. Просто потому что следующий пакет может прийти сразу после предыдущего. Вы можете свести шанс к минимуму уменьшением обработчика или все же воспользоваться двойной буферизацией, когда можно спокойно обрабатывать один буфер пока железо будет писать во второй.У меня примечательно "успеть". Это значит войти в прерывание, забрать пакет и поставить статус "готов" раньше, чем NACK пройдёт.
Пт май 20, 2022 06:32:13
Пт май 20, 2022 07:35:23
конфигурация при включении питания?!Ну так оно часто и выполняется.
Зачем усложнять то, что выполняется единственный раз?И вообще, зачем делать плохо, если можно делать хорошо?
Ваш код не входит в стандарт, поэтому будет естественным желание его изучить - какие там баги, насколько оптимально написан и т.п.Вы спрашивали про "читаемость". Как способ хранения и распространения кода связан с его читаемостью? Не надо его читать при применении вообще.
Это у вас методы привязаны к чипу, а у меня - к функции. Если мне надо push-pull, оно и будет GPIO_PP для любого чипа.риходится постоянно читать код библиотеки или держать в голове шифры от всего зоопарка чипов?
Я же приводил вроде ссылку на Хабр, где человек сравнивал HAL с нормальными реализациями. Там же есть осциллограммы как пакеты приходят.Либо сделать это быстро, а сэкономленное время потратить на обработку данных. 12 МБит это серьёзный поток для обсуждаемых микроконтроллеров. Не хочется чтобы он в /dev/null уходил.
Пт май 20, 2022 10:26:33
Пт май 20, 2022 10:44:25
Пт май 20, 2022 11:10:11
Пт май 20, 2022 11:48:20
И вас смущает задержка в пару тактов для операции, которая занимает 10^-11 от всего времени. Вы оптимизируете не там.Да. Всякие USB, SPI, I2C далеко не в каждом проекте используются. А GPIO в каждом. При каждом включении питания выполняется конфигурация.
От объема, а не от времени. Ну и 10% это явно завышенное число.Конфигурация при включении питания это лишь одна из функций, которая примерно 10% от всего кода GPIO.
Изучать новый язык только для того чтобы читать лично ваш код? Как-то недостаточно мотивации. Тем более что с этой задачей мой код справляется ничуть не хуже при лучшей читаемости.Ну, изучите С++ и будете свободно читать
LOGICAL_MIN(0x01) -> [0x14, 0x01]
LOGICAL_MIN(0x0102) -> [0x15, 0x01, 0x02]
LOGICAL_MIN(0x010203) -> [0x016, 0x01, 0x02, 0x03]
LOGICAL_MIN(0x01020304) -> [0x017, 0x01, 0x02, 0x03, 0x04]
Та, для которой подсказки не нужны, естественно. Или хотя бы можно зрительно окинуть диапазон возможных значений.С одной библиотекой IDE молчит как рыба об лёд, а с другой даёт красивые подсказки. Какая библиотека удобнее?
Который из push-pull? Даже если PP нет в чипе?
Мне-то откуда знать что в вашем коде? Это ж не stdio чтобы любой встречный знал.Кто-то запрещает сделать GPIO_PP в моём случае?
Пт май 20, 2022 13:15:16