查看: 2041|回复: 0

[分享] 在RAM中执行代码

[复制链接]
  • TA的每日心情
    慵懒
    2018-11-15 16:18
  • 签到天数: 39 天

    连续签到: 1 天

    [LV.5]常住居民I

    16

    主题

    259

    帖子

    3

    高级会员

    Rank: 4

    积分
    993
    最后登录
    2023-1-6
    发表于 2017-11-17 09:51:50 | 显示全部楼层 |阅读模式
    上次看到一个帖子说在RAM中执行程序代码,然后我有感而发,看了HCS12 PE生成的FALSH驱动,了解到擦PFLASH时有段代码就是在RAM中执行的,然后我根据此程序依样画葫芦写了以下代码。基于kinetis芯片。
    typedef void(*  Func32bit)(void);       


    typedef struct {
       uint8_t code[100];             /* Structure required to copy code to ram memory  100可以根据代码大小调整*/
      /* Size of this structure needs to be at least (but best) the size of the FnCmdInRam_ */
    } FnCmdInRamStruct;



    void ExcuteCodeInRam(void)
    {
            GPIOA_PDDR|=1;
            GPIOA_PTOR|=1;
    }

    static void CallFnCmdInRam()
    {
      FnCmdInRamStruct FnCmdInRam = *(FnCmdInRamStruct *)(ExcuteCodeInRam); /* Create a copy of Wait in RAM routine on stack */

      ((Func32bit)&FnCmdInRam)();        /* Call code in RAM */
      return;
    }


    在主程序中执行 CallFnCmdInRam()函数即可在RAM中执行相关代码,但这样做比较吃堆栈,而且要关中断。
    但是我想说其实这样执行其实比在FALSH中执行慢,因为有段拷贝数据的时间被浪费。
    而我们平时所说的在RAM中执行快是基于个人计算机而言,个人计算机由于硬盘擦写慢才使用RAM来处理数据,从而加快处理速度。
    还有种在RAM执行的方法是基于S12芯片的,在PRM文件中用 RELOCATE TO 这个词即可把ROM代码复制在RAM中执行。
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 11:51 , Processed in 0.082106 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表