STMCU小助手
发布时间:2021-12-7 12:00
6 P$ r. p9 B3 A
最近有人问起程序在STM32G4片内不同存储空间运行的速度差异。说实在的,这个很难说死或说出个绝对的数据,毕竟结果除了跟执行代码的存放空间有关外,还跟代码本身的内容、程序逻辑、编译工具及优化等级等都息息相关。我这里设计了一个小测试程序做了下简单比较,以供参考。' h7 g$ b" ] R, q4 _& ?6 d 4 S% h$ j G) v3 T 我们不妨先看看STM32G4系列内部系统框架图。下图是STM32G4芯片的系统框架图,我将测试程序放在图中三个黄色高亮位置来运行。+ I/ L3 l$ G/ P7 h* J( l " S- v* {$ l- o+ I
6 V, K+ q% s; _ 我将程序分别放在CCM、通用SRAM1、Flash区来运行,基于不同的配置,即是否开启指令预取、指令/数据Cache等,得到下面一个表格。代码所在区域栏里的数据代表各种情形下的执行时间。 5 a& D0 C6 D2 B
& ]% W I3 M+ C: | 从上面表格可以看出,相同配置下在CCM里执行速率总是最高。0 [, k4 D M! }: B Y3 p ! l, F7 D! ]1 y& G! N5 V 至于代码放在SRAM和Flash里的执行速率,不同配置下结果并不太一样。比如在开启prefetch和使能指令/数据Cache时,即第(1)种配置条件下,在SRAM里运行的速率是最慢的,只有在上图中的第(3)种情形下,代码在SRAM里运行速率相比在FLASH里运行才凸显出明显优势。+ J* q6 C3 G: d4 m) r 对于STM32G4系列芯片,芯片复位后其Prefetch功能是关闭的,而指令/数据Cache是开启的,即复位后默认为上面的第(2)种情形。结合上图,我们不难看出情形(1)与情形(2)的差别不大,至少不显著。3 i8 T6 W* S( X+ u$ l6 J% B. v& @( I 上面数据虽只是基于特定代码测试而得,但作为基本的方向性判断还是可以的。' Z( ~1 {5 P3 P2 b 7 @* j3 K9 Y) ?6 G/ c5 k% G . `6 t2 ?- V4 Y% E3 C5 ^5 g |
经验分享 | 基于STM32G4芯片TIM+SPI+DMA应用示例
STM32G47x 双 Bank 模式下在线升级
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【经验分享】STM32G4之基本定时器
NUCLEO-G474RE 扩展 LSM6DSO 传感器数据融合实操演示全解析
经验分享 | STM32G474 高精度定时器同步功能全解析 从内部互联到多芯片协同的实现方案
经验分享 | STM32G4双BANK启动应用演示
STM32G4 LPTIM+DMAMUX 实现并行输出应用示例
实战经验 | LAT1578 SAU对NSC分区的影响
经验分享 | STM32G474 HRTIM Triggered-half模式实现两相交错电源180°相位同步方案
微信公众号
手机版