我有一个函数从一些易失性存储器读取,由DMA更新.DMA永远不会在与函数相同的内存位置上运行.我的应用程序是性能关键.因此,我意识到执行时间大约提高了.如果我没有将内存声明为volatile,则为20%.在我的函数范围内,内存是非易失性的.Hovever,我必须确保下次调用该函数时,编译器知道内存可能已经改变.
内存是两个二维数组:
volatile uint16_t memoryBuffer[2][10][20] = {0};
Run Code Online (Sandbox Code Playgroud)
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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否有正确的方法告诉我的编译器memoryBuffer在myTask()范围内是非易失性的,但是下次调用myTask()时可能会更改,所以我可以将性能提高20%?
平台Cortex-M4