У меня есть функция чтения из некоторой энергозависимой памяти, которая обновляется DMA. DMA никогда не работает в том же месте памяти, что и функция. Мое приложение критично критично. Следовательно, я понял, что время выполнения улучшено на ок. 20%, если я не объявляю память нестабильной. В рамках моей функции память является энергонезависимой. Hovever, я должен быть уверен, что в следующий раз, когда вызывается функция, компилятор знает, что память может быть изменена.
Память представляет собой два двумерных массива:
volatile uint16_t memoryBuffer[2][10][20] = {0};
DMA работает с противоположной "матрицей", чем программная функция:
void myTask(uint8_t indexOppositeOfDMA)
{
for(uint8_t n=0; n<10; n++)
{
for(uint8_t m=0; m<20; m++)
{
//Do some stuff with memory (readings only):
foo(memoryBuffer[indexOppositeOfDMA][n][m]);
}
}
}
Есть ли способ сообщить моему компилятору, что memoryBuffer является энергонезависимым в области myTask(), но может быть изменен в следующий раз, когда я вызову myTask(), чтобы я мог улучшить производительность на 20%?
Платформа Cortex-M4