Size: a a a

2021 June 15

KK

Kirill Kotyagin in Hardware & Radio
Нет проблем, черкану. Но на всякий случай хотел бы попросить @romanetz_rus сделать review написанного выше. Дело в том, что я с HAL особо не дружу и вдруг там есть какая-то магия, которая от меня скрылась. Ну типа из серии HAL все сам волшебно настраивает и все хорошо. Но в исходниках я ничего такого не нашел.
источник

r

romanetz in Hardware & Radio
тут очень тонкий момент...
дело в том, что вызов HAL_I2C_Mem_Write - блокирующий, а HAL_I2C_Mem_Write_DMA - неблокирующий
источник

r

romanetz in Hardware & Radio
и впрямую нельзя так менять
источник

r

romanetz in Hardware & Radio
потому что сам алгоритм может развалиться
источник

KK

Kirill Kotyagin in Hardware & Radio
Не совсем неблокирующий, он блокирующие ждёт завершения предыдущей транзакции. Но все равно, потенциально и это тоже, в дополнение к deadlock.
источник

r

romanetz in Hardware & Radio
вызов с DMA - там просто DMA заряжается и включается прерывание по окончанию транзакции DMA
источник

KK

Kirill Kotyagin in Hardware & Radio
https://github.com/STMicroelectronics/STM32CubeF1/blob/c750eab6990cac35ab05020793b0221ecc1a8ce5/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c#L3153

Цикл по ожиданию готовности I2C, если не дождались за timeout, возвращаем HAL_I2C_ERROR_TIMEOUT
источник

KK

Kirill Kotyagin in Hardware & Radio
Хех) Не могу красиво вставить snippet) Лучше там посмотреть… Ссылка прямо на строку кода.
источник

r

romanetz in Hardware & Radio
первый вызов будет неблокирующий )
источник

KK

Kirill Kotyagin in Hardware & Radio
Первый естественно, если HAL_I2C_Mem_Write_DMA смешивать с другими функциями отправки - это вообще беда :)
источник

KK

Kirill Kotyagin in Hardware & Radio
Я говорил о том, что сама с собой эта функция умеет синхронизироваться, но даже для того чтобы это работало, требуется корректно назначить приоритеты прерываний. В-общем, сейчас напишу коммент в GitHub.
источник

r

romanetz in Hardware & Radio
я как-то u8g2 на стмке запускал
источник

KK

Kirill Kotyagin in Hardware & Radio
И как оно?
источник

r

romanetz in Hardware & Radio
ну как - работает
источник

KK

Kirill Kotyagin in Hardware & Radio
А вот HAL_SPI_Transmit_DMA как раз вообще ничего не пытается дождаться. Если hspi->State != HAL_SPI_STATE_READY оно просто возвращает HAL_BUSY, чем шлет вызывающего козе в трещину. Поскольку это никак не обрабатывается в PR, то это просто сломанный алгоритм.
источник

AH

Alexey Hanekawa in Hardware & Radio
А в качестве мачты для яги можно использовать стальную мачту? Она будет оказывать влияние?
источник

KK

Kirill Kotyagin in Hardware & Radio
Можно, будет, незначительное.
источник

KK

Kirill Kotyagin in Hardware & Radio
done, надо похоже отаппрувить, а то коммент висит в статусе pending
источник

KK

Kirill Kotyagin in Hardware & Radio
А нет, не надо, все готово.
источник

AA

Aleksander Alekseev in Hardware & Radio
спасибо!
источник