tc275怎么移植到ram中去,把函数

https://blog.csdn.net/weixin_30319097/article/details/101342009?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase
将函数载入到RAM中运行需要以下三个步骤:

(1)用编译器命令#pragma section “

” #pragma section 将想要载入RAM运行的函数存储为自定义段名的程序段,其中ax是#pragma section命令中的可选设置——,a表示allocatable,x表示executable,具体

#pragma section “.flash_driver” ax

void PFlashProgram( uint32 flash, uint32 addr, uint32 word_l, uint32 word_u )
{
uint32 load_cnt;
uint16 endinitSfty_pw = IfxScuWdt_getSafetyWatchdogPasswordInline();

IfxFlash_enterPageMode(addr);

/* wait until unbusy */
IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_P0);

/* write 32 bytes (8 doublewords) into assembly buffer */
for (load_cnt = 0; load_cnt < 4; load_cnt++)
{
    IfxFlash_loadPage2X32(addr, word_l, word_u);
}

/* write page */
IfxScuWdt_clearSafetyEndinitInline(endinitSfty_pw);
IfxFlash_writePage(addr);
IfxScuWdt_setSafetyEndinitInline(endinitSfty_pw);

/* wait until unbusy */
IfxFlash_waitUnbusy(flash, IfxFlash_FlashType_P0);

}
#pragma section
(2)在链接脚本中,以自定义的程序段为输入,定义输出段output section:

/* user defined output section, used to allocate ram space(VMA) for code running in ram, /
/
and also allocate rom space(LMA) to store it */
.code2ram :
{
*(.flash_driver)
(.flash_driver.)
. = ALIGN(8);
} > psram_local AT> pfls0 =0
(3)将该输出段.code2ram的LMA、VMA和SIZE等信息加入到copy table中,以使CPU启动时将该段(函数)从ROM拷贝到RAM中(从而正常运行)。这里贴出相关的上下文以便于读者的整体理解

(注:这里有一个VMA和LMA概念的问题,会在之前的博文——链接脚本(linker script)用法解析(一)中讲解)

/* user defined output section, used to allocate ram space(VMA) for code running in ram, /
/
and also allocate rom space(LMA) to store it */
.code2ram :
{
*(.flash_driver)
(.flash_driver.)
. = ALIGN(8);
} > psram_local AT> pfls0 =0

   .rodata : FLAGS(arl)
{
    *(.rodata)
    *(.rodata.*)
    *(.gnu.linkonce.r.*)    
    /*
      * Create the clear and copy tables that tell the startup code
      * which memory areas to clear and to copy, respectively.
      */
    . = ALIGN(16) ;
    PROVIDE(__clear_table = .) ;
    LONG(0 + ADDR(.CPU2.zbss));     LONG(SIZEOF(.CPU2.zbss));
    LONG(0 + ADDR(.CPU2.bss));    LONG(SIZEOF(.CPU2.bss));
    LONG(0 + ADDR(.CPU1.zbss));     LONG(SIZEOF(.CPU1.zbss));
    LONG(0 + ADDR(.CPU1.bss));    LONG(SIZEOF(.CPU1.bss));
    LONG(0 + ADDR(.CPU0.zbss));     LONG(SIZEOF(.CPU0.zbss));
    LONG(0 + ADDR(.CPU0.bss));    LONG(SIZEOF(.CPU0.bss));
    LONG(0 + ADDR(.zbss));     LONG(SIZEOF(.zbss));
    LONG(0 + ADDR(.sbss));     LONG(SIZEOF(.sbss));
    LONG(0 + ADDR(.bss));    LONG(SIZEOF(.bss));
    LONG(0 + ADDR(.sbss4));    LONG(SIZEOF(.sbss4));
    LONG(-1);                 LONG(-1);
    PROVIDE(__copy_table = .) ;
    LONG(LOADADDR(.CPU2.zdata));    LONG(0 + ADDR(.CPU2.zdata));    LONG(SIZEOF(.CPU2.zdata));
    LONG(LOADADDR(.CPU2.data));    LONG(0 + ADDR(.CPU2.data));    LONG(SIZEOF(.CPU2.data));
    LONG(LOADADDR(.CPU1.zdata));    LONG(0 + ADDR(.CPU1.zdata));    LONG(SIZEOF(.CPU1.zdata));
    LONG(LOADADDR(.CPU1.data));    LONG(0 + ADDR(.CPU1.data));    LONG(SIZEOF(.CPU1.data));
    LONG(LOADADDR(.CPU0.zdata));    LONG(0 + ADDR(.CPU0.zdata));    LONG(SIZEOF(.CPU0.zdata));
    LONG(LOADADDR(.CPU0.data));    LONG(0 + ADDR(.CPU0.data));    LONG(SIZEOF(.CPU0.data));
    LONG(LOADADDR(.zdata));    LONG(0 + ADDR(.zdata));    LONG(SIZEOF(.zdata));
    LONG(LOADADDR(.sdata));    LONG(0 + ADDR(.sdata));    LONG(SIZEOF(.sdata));
    LONG(LOADADDR(.data));    LONG(0 + ADDR(.data));    LONG(SIZEOF(.data));
    LONG(LOADADDR(.sdata4));    LONG(0 + ADDR(.sdata4));    LONG(SIZEOF(.sdata4));
    LONG(LOADADDR(.code2ram));        LONG(0 + ADDR(.code2ram));        LONG(SIZEOF(.code2ram));
    LONG(-1);                 LONG(-1);                 LONG(-1);
    . = ALIGN(16);
  } > pfls0
  
  .text  : FLAGS(axl)
{
    *(.text)
    *(.text.*)
    *(.gnu.linkonce.t.*)
    *(.gnu.warning)        /* .gnu.warning sections are handled specially by elf32.em. */
    . = ALIGN(16);
} > pfls0

以上的示例来源于TC297的Flash驱动测试程序。

转载于:https://www.cnblogs.com/uestcliming666/p/11464709.html
最主要的修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面三张图修改完毕就可以实现将某个函数移植到ram中运行

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值