我是 ARM 微控制器编程的初学者,有以下问题需要解决。
- 程序中有两个 ISR:ISR_Timer和ISR_Buffer。ISR_Timer 每 5 分钟执行一次。每次应填充外部设备缓冲区时(一秒钟内多次),都会执行 ISR_Buffer。外部设备缓冲区很小。
- ISR_Buffer从外部 SRAM 获取数据以填充缓冲区。SRAM中有两个大缓冲区。第一个当前使用,第二个用于重新计算。然后它们被交换。
- ISR_Timer设置标志,指示main()重新计算外部 SRAM 中的第二个缓冲区。之后 ISR_Buffer 使用该缓冲区。第一个用于下一次重新计算。重新计算大约需要 1 分钟。
问题是 main() 和 ISR_Buffer 都访问外部 SRAM,并且这些访问不是原子的。main() 函数在缓冲区重新计算期间将数据写入 SRAM。ISR_Buffers 读取数据以填充小型设备缓冲区。如何解决这个问题?
IDE:IAR。芯片:AT91SAM7。