Соревнование памяти Cortex-M4 (DMA против программы)
Я использую контроллер STM32F4xx. Я использовал DMA для буферизации UART (круговые буферы). Я обеспокоен тем, что, если моя программа получит доступ к той же ячейке памяти в то же время, что и DMA, возникнет конфликт памяти.
Может ли конфликт возникнуть таким образом, или у контроллера есть меры для предотвращения этого?
Благодарю.
1 ответ
Я нашел это в руководстве STM32F401:
BusMatrix управляет арбитражем доступа между мастерами (CPU, DMA). Арбитраж использует алгоритм циклического перебора.
Может случиться, что DMA (или CPU) не сможет выполнить передачу (в нужное время) из-за арбитража. Это вызывает ошибку опустошения / переполнения (в DMA процессор будет ждать).
Если флаг DMEIFx или FEIFx установлен из-за состояния переполнения или переполнения, неисправный поток не отключается автоматически, и это зависит от программного обеспечения, отключать или нет поток путем сброса бита EN в регистре DMA_SxCR. Это связано с тем, что при возникновении такого рода ошибок не происходит потери данных.