Zstack之InitBoard()函数分析

本文详细解析了一个名为InitBoard的函数,该函数用于根据不同级别初始化板载设备,并介绍了ChkReset函数的工作原理,用于检查系统复位原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值