本帖最后由 DX3906 于 2023-9-5 11:29 编辑
我是在at32f415上用EventRecorder测出来的,AC5的memcpy拷贝8192字节数据,for循环重复十次的时间304.05us,换成AC6之后只需要30.81us!9.8倍的差距!AC5是-o3,AC6是-ofast
刚开始怀疑AC6把EventRecorder的代码优化了导致时间不准,改成了用GPIO高低电平翻转的高电平宽度来测时间,但是结果也差不多
逻辑分析仪测到的结果,AC5 447us,AC6 48us
这是我的测试代码,实在想不明白AC6是怎么做到如此巨大提升的,要真有这么夸张的话,DMA做内存拷贝完全没优势了
[C] 纯文本查看 复制代码 define BUF_SIZE 8192
__ALIGNED(4) uint8_t txbuf[BUF_SIZE] = {0};
__ALIGNED(4) uint8_t rxbuf[BUF_SIZE] = {0};
/**
* @brief Main program
* @param None
* @retval None
*/
int main(void)
{
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
system_clock_config();
// nvic_configuration();
dwt_config();
dma_m2m_init();
bsp_dbg_uart_config();
/* 初始化EventRecorder */
EventRecorderInitialize(EventRecordAll, 1);
EventRecorderStart();
while(1)
{
dwt_delay_ms(1);
for(uint32_t i = 0; i < BUF_SIZE; i++)
{
txbuf[i] = rand();
}
EventStartA(2);
GPIOB->scr = GPIO_PINS_0;
for(uint32_t i = 0; i < 10; i++)
{
memcpy((uint32_t*)rxbuf, (uint32_t*)txbuf, BUF_SIZE);
}
GPIOB->clr = GPIO_PINS_0;
EventStopA(2);
dwt_delay_ms(1);
}
}
|