大家好! 通过#pragma arm section code = “RAMCODE ”和#pragma arm section。这种方式,可以同时将多个函数放到指定的section。然后修改.sct文件,自定义一个RAMCODE的段,并放在RAM中的某段地址中,那么编译时,编译器会自动把这几个函数放在内存中执行,而不是flash,提高执行速度。 我的问题是,这种操作下,被这几个函数占用的RAM空间会一直被占用吗(类似全局变量那种,声明了后会一直占用RAM)?还是说只有在对应函数执行时才会占用RAM,执行完后这段RAM会自动释放,可以用作他用? 另外还有一个问题,G0和G4这两个系列的单片机,Flash和RAM的访问速度能差多少呢?我之前用的是TI的280049型号的DSP芯片,这款芯片Flash的访问速度已经可以达到RAM访问速度的90%以上,因此如果STM32的Flash访问速度也能达到这种水平,那么我就没必要把代码放在RAM中执行了 |
远离深坑、STM32G031K8T6,不知道后面是否会优化修正?
STM32G031进hardfault的问题
如何对程序加密
STM32G071中FLASH_CR寄存器中强制选项字节加载位(OBL_LAUNCH)置1,仿真器就连接不了MCU
STM32G0 调用HAL_PWR_EnterSTOPMode 进入停机模式中断唤不醒什么原因,有人碰到没
如何进行STM32G031的PWM溢出中断设置
STM32G070 定时器初始化后直接进入中断
STM32G070 I2C从机配置SBC字节控制模式如何实现发送?
STM32G070 GPIO寄存器ODR、BSRR和BRR
STM32G070 DMA外设到外设模式
这些RAM将一直被占据着。
第二个问题,以G4来讲,如果只是希望将代码放进RAM以提示执行速率,这个就没必要了。当开启指令预取和使能I/D Cache后,
即启用了ART技术后,代码RAM里的执行速率并无优势,反而处于劣势,这个你也自己实际测试验证下。顺便说下,G0 G4是完全不同的两个系列。
我这边基于G0芯片就某个矩阵乘法代码做了下简单测试,结果供方向性及结论性参考与判断。
在指令预取与指令cache使能条件下, 相应测试结果如下:
0x5efb timing units with code in flash, 0x6674 timing unitswith code in RAM.
对于G4/G0而言,当开启指令预取和使能cache时,代码在RAM运行并没有速率上的优势。这点你也不难验证。