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