你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32将程序放在RAM中执行的相关问题

[复制链接]
仲裁者 提问时间:2021-8-25 14:11 /
大家好!
通过#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中执行了
收藏 评论2 发布时间:2021-8-25 14:11

举报

2个回答
xmshao 最优答案 回答时间:2021-8-26 11:44:15
第一个问题,通过#pragma arm section code = “RAMCODE ”和#pragma arm section。这种方式,可以同时将多个函数放到指定的section。
这些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.
xmshao 回答时间:2021-8-26 14:19:00
你那样操作的话,RAM是被一直占用着的。

对于G4/G0而言,当开启指令预取和使能cache时,代码在RAM运行并没有速率上的优势。这点你也不难验证。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版