Zstack之InitBoard()函数分析

void InitBoard( uint8 level )
{
  if ( level == OB_COLD )
  {
    // IAR does not zero-out this byte below the XSTACK.
    *(uint8 *)0x0 = 0; //这一句什么意思,参见我的其他博客
    // Interrupts off
    osal_int_disable( INTS_ALL );
    // Check for Brown-Out reset
    ChkReset();//主函数默认会进入到这一步
  }
  else  // !OB_COLD
  {
    /* Initialize Key stuff */
    HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);
  }

}

ChkReset的源码为:

void ChkReset( void )  //检查掉电复位
{
  uint8 rib;


  // Isolate reset indicator bits
  rib = SLEEPSTA & LRESET; //sleepSTA寄存器在halboardinit函数中已经发生了改变,
  //不再是初始值0x9d,而是0x40,相与之后为0x00。(这个地方得小心一点)


  if ( rib == RESETPO )
  {
    // Put code here to handle Power-On reset  那么主函数默认也就会进入到这里执行下去。。。
  }
  else if ( rib == RESETEX )
  {
    // Put code here to handle External reset
  }
  else if ( rib == RESETWD )
  {
    // Put code here to handle WatchDog reset
  }
  else  // Unknown reason - not expected.
  {  //寄存器的值可能都不是初始值了,暂时不分析。
    HAL_ASSERT(0);
  }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值