小编Den*_*ard的帖子

提高读取易失性存储器的性能

我有一个函数从一些易失性存储器读取,由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

c embedded performance volatile dma

12
推荐指数
1
解决办法
584
查看次数

标签 统计

c ×1

dma ×1

embedded ×1

performance ×1

volatile ×1