私はARMマイクロコントローラープログラミングの初心者で、次の問題を解決する必要があります。
- プログラムにはISR_TimerとISR_Bufferの 2 つの ISR があります。ISR_Timer は 5 分ごとに実行されます。ISR_Buffer は、外部デバイス バッファがいっぱいになるたびに実行されます (1 秒間に数回)。外部デバイス バッファは小さいものです。
- ISR_Bufferは、外部 SRAM からバッファを満たすデータを受け取ります。SRAM には 2 つの大きなバッファがあります。1 番目は現在使用されており、2 番目は再計算に使用されています。次に、それらが交換されます。
- ISR_Timerは、 main()が外部 SRAM の 2 番目のバッファーを再計算することを示すフラグを設定します。その後、ISR_Buffer はそのバッファーを使用します。最初のものは、次の再計算に使用されます。再計算には約 1 分かかります。
問題は、main() と ISR_Buffer の両方が外部 SRAM にアクセスし、それらのアクセスがアトミックでないことです。main() 関数は、バッファの再計算中にデータを SRAM に書き込みます。ISR_Buffers はデータを読み取り、小さなデバイス バッファを埋めます。この問題を解決するには?
井出: IAR. チップ: AT91SAM7。