查看: 1585|回复: 0

[原创] IAR小课堂 | 如何将部分程序在RAM中运行

[复制链接]
  • TA的每日心情
    开心
    2023-6-12 14:34
  • 签到天数: 165 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2019-10-31 14:18:57 | 显示全部楼层 |阅读模式
    分享到:
    在实际项目开发中,有时候我们需要将一部分程序从 FLASH 拷贝到 RAM 中运行,以提高程序运行的速度。本文基于 IAR Embedded Workbench 列出了一些方法,可以在系统启动时自动从 FLASH 中将这部分程序拷贝到 RAM 中运行。本文使用的软件为IAR EWARM 8.40,硬件为STM32F401 NUCLEO。
    利用关键字__ramfunc
    IAR 中提供了“__ramfunc”关键字来声明将某个函数放在 RAM 中运行。函数使用该关键字声明后,编译器会将函数的代码放在一个具有读/写属性的区域(RAM),并在只读区域(ROM)创建该代码的初始式,系统启动时自动将需要初始化的函数代码从ROM 拷贝到 RAM。使用 __ramfunc 关键字的缺点就是不能指定函数在RAM中的具体位置。
    编译后的 map 文件中,可以看到函数
    GennerateRandomNumber()的地址在 RAM 范围:
    在定义为 __ramfunc 的函数中调用非 __ramfunc 函数,会出现下面的警告:
    “Warning[Ta022]: Possible rom access (array) from within a ramfunc function ”
    而且在 __ramfunc 的函数中调用不是 __ramfunc 的函数会降低执行速度。

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-26 08:25 , Processed in 0.117276 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.