|

楼主 |
发表于 2014-6-11 22:05:25
|
显示全部楼层
我测试了一下普通内存的读写,发现也很慢。下面的代码是向CPU内的SRAM写2MB数据,竟然耗时18 ms。查看汇编指令,总共执行了约2100224条指令,也就是说,168MHz Cortex-M4的性能只达到了116.7MIPS。STM32F4号称210 DMIPS,为什么实际效果这么差?如果在SRAM中运行,速度更慢,耗时26 ms,只有80.8 DMIPS。我用Timer测过HCLK,CPU主频确实是168 MHz。下面是测试代码和汇编代码。
=========================== 测试代码 ==========================
// 从CPU写数据到整个WordBuf(4KB),写512遍(共2MB) uint32_t WordBuf[1024];
iStartTime = bsp_GetRunTime();
for (k=0; k<512; k++)
{
pSRAM = WordBuf;
for (i = 0; i < 1024; i++)
{
*pSRAM++ = i;
}
}
iEndTime = bsp_GetRunTime();
idTime = iEndTime - iStartTime;
=========================== 对应的汇编代码 ==========================
0x20005896 F44F3B80 MOV r11,#0x10000
487: iStartTime = bsp_GetRunTime();
0x2000589A F7FFFC01 BL.W bsp_GetRunTime (0x200050A0)
0x2000589E 4680 MOV r8,r0
488: for (k=0; k<512; k++)
489: {
0x200058A0 F04F0900 MOV r9,#0x00
0x200058A4 E009 B 0x200058BA
490: pSRAM = WordBuf;
0x200058A6 AD0E ADD r5,sp,#0x38 <------ 运行 512次
491: for (i = 0; i < 1024; i++)
492: {
0x200058A8 2400 MOVS r4,#0x00 <------ 运行 512次
0x200058AA E001 B 0x200058B0 <------ 运行 512次
493: *pSRAM++ = i; // 26 ms
494: }
495: }
0x200058AC C510 STM r5!,{r4} <------ 运行 524288次
0x200058AE 1C64 ADDS r4,r4,#1 <------ 运行 524288次
0x200058B0 F5B46F80 CMP r4,#0x400 <------ 运行 524288次
0x200058B4 D3FA BCC 0x200058AC <------ 运行 524288次
0x200058B6 F1090901 ADD r9,r9,#0x01 <------ 运行 512次
0x200058BA F5B97F00 CMP r9,#0x200 <------ 运行 512次
0x200058BE D3F2 BCC 0x200058A6 <------ 运行 512次
496: iEndTime = bsp_GetRunTime();
0x200058C0 F7FFFBEE BL.W bsp_GetRunTime (0x200050A0)
0x200058C4 4607 MOV r7,r0 |
|