Я новичок в программировании микроконтроллеров 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.