VxWorks romStar函数分析

VxWorks  romStar函数分析

Lmjx 2004-8-26 Email:limiao@yeah.net

 

以下对romStart进行了必要的删减,主要去掉了一些预编译选项。

void romStart

    (

    FAST int startType        /* start type */

    )

{

    volatile                  /* to force absolute adressing */

FUNCPTR absEntry;        /* to avoid PC Relative Jump Subroutine */

$$<<

       注释:

volatile关键字的作用是使编译器不对被指定的变量做优化,这样可以确保该变量每次被取到新的值。Volatile经常用来修饰全局的或者静态的或者在多任务环境下允许被改变的变量。

>>$$

   /*

     * Copy from ROM to RAM, minus the compressed image

     * if compressed boot ROM which relies on binArray

     * appearing last in DATA segment.

     */

      

    ((FUNCPTR)ROM_OFFSET(copyLongs)) (ROM_TEXT_ADRS, (UINT)romInit,

              ((UINT)binArrayStart - (UINT)romInit) / sizeof (long));

       $$<<

              注释:

该段代码将ROM中非压缩的部分拷贝到RAM中。ROM_OFFSET(copyLongs)计算出copyLongsROM中的地址,然后调有该函数。BinArrayStart地址以后装的是压缩的代码和数据。

>>$$

    /* clear all memory if cold booting */

  

    if (startType & BOOT_CLEAR)

       {

       $$<<

              注释:

如果是冷启动则将0-(romInit - STACK_SAVE)以及binArrayStart之后的RAM0

>>$$

       fillLongs ((UINT *)(SYS_MEM_BOTTOM),

              ((UINT)romInit - STACK_SAVE - (UINT)SYS_MEM_BOTTOM) /

             sizeof(long), 0);

 

       fillLongs ((UINT *)binArrayStart,

              ((UINT)SYS_MEM_TOP - (UINT)binArrayStart) / sizeof (long), 0);

 

       /*

        * Ensure the boot line is null. This is necessary for those

        * targets whose boot line is excluded from cleaning.

        */

       $$<<

              注释:

                     BOOT_LINE_ADRS中的内容清0,保证bootline的正确。

>>$$

       *(BOOT_LINE_ADRS) = EOS;

       }

      

        /* jump to VxWorks entry point (after uncompressing) */

    {

       $$<<

              注释:

                     将压缩内容解压缩到RAM_DST_ADRS,即RAM_HIGH_ADRS

>>$$

    if (UNCMP_RTN ((UCHAR *)ROM_OFFSET(binArrayStart),

                   (UCHAR *)RAM_DST_ADRS, &binArrayEnd - binArrayStart) != OK)

           return;              /* if we return then ROM's will halt */

    absEntry = (FUNCPTR)RAM_DST_ADRS;                     /* compressedEntry () */

      

}

$$<<

       注释:

              转移到RAM中执行。

>>$$

(absEntry) (startType);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值