$ R5 i0 z3 [: M! l7 n: ] 最近有人问起程序在STM32G4片内不同存储空间运行的速度差异。说实在的,这个很难说死或说出个绝对的数据,毕竟结果除了跟执行代码的存放空间有关外,还跟代码本身的内容、程序逻辑、编译工具及优化等级等都息息相关。我这里设计了一个小测试程序做了下简单比较,以供参考。* v/ M1 O4 ?& K9 a+ Y 1 l0 F" l% ~* C, `% J 我们不妨先看看STM32G4系列内部系统框架图。下图是STM32G4芯片的系统框架图,我将测试程序放在图中三个黄色高亮位置来运行。1 G3 s S; S( P4 Z $ e" I. S9 M& r% A - h- j: ^/ [# L* D9 F6 X 我将程序分别放在CCM、通用SRAM1、Flash区来运行,基于不同的配置,即是否开启指令预取、指令/数据Cache等,得到下面一个表格。代码所在区域栏里的数据代表各种情形下的执行时间。7 e4 A6 @5 ~. n- `; ]' x6 @ 1 `" t5 q) j* d# `. M$ h- w7 e 从上面表格可以看出,相同配置下在CCM里执行速率总是最高。/ _$ R2 ]1 A* V g" u8 s 9 q& M- E! C0 C8 M# m 至于代码放在SRAM和Flash里的执行速率,不同配置下结果并不太一样。比如在开启prefetch和使能指令/数据Cache时,即第(1)种配置条件下,在SRAM里运行的速率是最慢的,只有在上图中的第(3)种情形下,代码在SRAM里运行速率相比在FLASH里运行才凸显出明显优势。 对于STM32G4系列芯片,芯片复位后其Prefetch功能是关闭的,而指令/数据Cache是开启的,即复位后默认为上面的第(2)种情形。结合上图,我们不难看出情形(1)与情形(2)的差别不大,至少不显著。) o) a2 g; t! ~2 F7 W- t. W$ W% j2 P I$ t: _* s; ?1 ^ w& ~ 上面数据虽只是基于特定代码测试而得,但作为基本的方向性判断还是可以的。3 {! J6 u* {4 r) n$ [ ^ |
STM32固件库分享,超全系列整理
【经验分享】STM32G4_CORDIC与定点带符号整数数据格式
STM32的CAN FD位定时设置注意事项
基于STM32G474 中 Triggered-half 模式的实现
基于STM32G4的数字控制 15kW双向PFC
基于STM32G431简介
今天14:00 | 基于STM32的MATLAB电机控制方案直播
基于STM32G474外红外接收经验分享
STM32G431RBT6之Key模块入门
STM32G431RBT6--LED模块入门