mpc8260 15

其中,STACK_SAVE是为RomStart()函数准备的最大堆栈大小。对于8260来说,其堆栈增长方向是向下的,在本单板调试过程中采用的是ROM驻留型映像启动顺序,因此堆栈的起始地址为STACK_RESIDENT。在经过多次的宏定义后最终被设置为RAM_HIGH_ADRS宏,具体在configAll.h和config.h头文件中实现。至于ROM驻留型映像和非ROM驻留型映像详细介绍有很多这方面的教材或资料,这里不再加以解释。

初始化好堆栈指针,还要计算跳转到C程序中romStart()函数的入口地址:

(romStart – romInit + ROM_TEXT_ADRS),其中ROM_TEXT_ADRS为引导ROM入口地址的宏。建议在该过程中使用的寄存器最好是前面代码段中未使用过的,否则还要在堆栈指针初始化时进行寄存器的入栈保护操作。

整个过程的如下:

        lis     sp, HIADJ (STACK_ADRS)   /* sp used as stack register for PPC */
        addi    sp, sp, LO(STACK_ADRS)
        addi    sp, sp, -FRAMEBASESZ        /* get frame stack */ 
        lis     r7, HIADJ(romInit)
        addi    r7, r7, LO(romInit)
        lis     r8, HIADJ(ROM_TEXT_ADRS)
        addi    r8, r8, LO(ROM_TEXT_ADRS)
        lis r6, HIADJ(romStart) 
        addi r6, r6, LO(romStart) /* load R6 with C entry point */
        sub r6, r6, r7  /* romStart-romInit+ROM_TEXT_ADRS */
   add r6, r6, r8   
       mtspr LR, r6  /* save destination address into LR register */
blr    /* jump to the C entry point */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值