2017-03-13 9 views
0

私はSTM32F4xxコントローラを使用しています。 私は、UART(循環バッファ)をバッファするためにDMAを利用してきました。 私の懸念は、私のプログラムがDMAと同時に同じメモリ位置にアクセスするときにメモリ競合が発生する場合です。Cortex-M4メモリ競合(プログラムに対するDMA)

このように競合が起こる可能性がありますか、コントローラがこれを防ぐ手段を持っていますか?

ありがとうございました。

+0

あなたは競合とは何を意味し、何が起こると思いますか?同時に同じアドレスで複数のトランザクションを実行することができます。メモリ/周辺装置がそのアドレスを処理できない理由はありません。確かにいくつかの例外はありますが、うまく設計されたチップはトランザクションを待ち行列に入れ、システムにバックプレッシャをかけるか、クレジットを使用してすべてのトランザクションを処理します。私が理解しているように –

+1

競合が起こります。 2つのDMAまたはDMA +プログラムのいずれか)。これにより、何らかのフォルト例外が生成される可能私の懸念は、DMAが停止する場合。これは私が避けたいと思う効果です。プログラムがDMAが満たしているのと同じ場所を読み取る可能性があります。 – alsaleem

答えて

0

私はSTM32F401マニュアルでこれを見つけた:

BusMatrixは、マスター(CPU、DMA)との間のアクセス調停を管理します。アービトレーションはラウンドロビンアルゴリズムを使用します。

DMA(またはCPU)がアービトレーションによって(適時に)転送を実行できないことがあります。アンダーラン/オーバーランエラーが発生します(DMAではCPUが待機します)。

DMEIFxまたはFEIFxフラグが原因オーバーランまたはアンダーラン状態に設定されている場合は、障害のある ストリームは自動的に無効になり、それが中にENビットをリセットすることにより、ストリームを無効にするかどうかをソフトウェアに任されていませんDMA_SxCRレジスタこれは、この種のエラーが発生した場合にデータが失われないためです。

関連する問題