当前位置:   article > 正文

RH850 setup RAM初始化过程分析

RH850 setup RAM初始化过程分析

        大家都知道,我们的变量,这里说的变量是指初始化或未初始化的全局变量,静态全局变量,初始化或未初始化的静态局部变量,这些变量的地址已经在编译器程序连接后固定,且在map表里可以查看到,分配于date段和未初始化的分配于bss段中,但这些变量的值在编译后以二进制文件存于ROM中,并在MCU setup时由ROM搬运到RAM中,那么变量是怎么由ROM搬到RAM的map地址处呢?RAM数据又是怎么初始化的呢?带着如上问题一起来分析一下

1,Bebug发现,reset后会将在setup时候会将整个RAM段清除

map中ram段开始地址如下

                  febd0000+000000 ___ghs_ramstart

map中ram段结束地址如下

                  febf0000+000000 ___ghs_ramend

首先将所有RAM数据清0,汇编代码如下,将 ghs_ramstart地址存于R6,将___ghs_ramend存于R7,将R6地址里面的数据清0,R7寄存器里面地址+8,比较R6,R7有没有到ramend处,如没有继续清除R6地址里面数据,如相等向下执行

2,ram清除完成后进入_start处开始执行,接下来执行至ghs_ind_crt0处

我们查看 build_v800.pdf,文档查看有关_start信息,描述和如上调试结果一致,接下来就是调用

调用ghs_borad_memory_init,初始化RAM

查看 build_v800.pd,ghs_board_memory_init 在ind_initmem.800中

代码如下

___ghs_board_memory_init:

        -- If the program is not built to boot from ROM, return
    MOV32(___ghs_romstart, r1)
    MOV32(___ghs_romend, r14)
    jarl    .L1,r5
.L1:
    cmp    r1,r5
    blt    return
    cmp    r14,r5
    bgt    return

map地址如下

         00020000+000000 ___ghs_romstar

         00200000+000000 ___ghs_romend

很可惜___ghs_board_memory_init实现在库中,无法看到,接下来程序跑到main时候,RAM已经初始化完成了,虽然没有看到RAM初始化过程,但梳理了一下大概过程,也是比较有意思的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/272052
推荐阅读
相关标签
  

闽ICP备14008679号