程序的执行都是从main函数开始,也就是说我们的程序的入口都是main函数(注:对于嵌入式开发人员来说main函数也是普通的函数,也是被调用的,那么也可以被改为其他的函数名称,这需要你自己编写启动代码),对于Z-Stack协议栈来说main函数在ZMain.c(Z-StackProjectszstackZMainti2530DB)里面定义,下面我们首先分析一下main函数实现的功能,然后我会连载和详细分析里面包含的每一个函数的作用。 下面我们拷贝一下Z-Stack里面main函数的代码来分析一下,代码如下:
int main( void )
{
osal_int_disable( INTS_ALL );
HAL_BOARD_INIT();
zmain_vdd_check();
InitBoard( OB_COLD );
HalDriverInit();
osal_nv_init( NULL );
ZMacInit();
zmain_ext_addr();
zgInit();
#ifndef NONWK
afInit();
#endif
osal_init_system();
osal_int_enable( INTS_ALL );
InitBoard( OB_READY );
zmain_dev_info();
#ifdef LCD_SUPPORTED
zmain_lcd_init();
#endif
#ifdef WDT_IN_PM1
WatchDogEnable( WDTIMX );
#endif
osal_start_system();
return 0;
}
osal_int_disable( INTS_ALL )-->关闭所有中断
HAL_BOARD_INIT()-->硬件板子的初始化,比如led的初始化
zmain_vdd_check()-->检测电压,确保电压能使CC2530运行
InitBoard( OB_COLD )-->板子I/O的初始化
HalDriverInit();-->硬件驱动的初始化
osal_nv_init( NULL )-->对NV系统的初始化
ZMacInit()-->MAC的初始化
zmain_ext_addr()-->扩展地址的确定
zgInit()-->初始化NV条目
afInit()-->AF层的初始化,在禁止NONWK的时候需要初始化AF层
osal_init_system()-->初始化操作系统
osal_int_enable( INTS_ALL )-->开中断
InitBoard( OB_READY )-->板级最终初始化
zmain_dev_info()-->设备信息的显示
zmain_lcd_init()-->如果定义了LCD,那么执行LCD初始化
WatchDogEnable( WDTIMX )-->如果定义了看门狗,那么执行使能看门狗函数
osal_start_system()-->系统执行的入口,注意正常情况是不会运行到此函数的下一句,也就是return语句的,因为进入此函数以后会一直在里面循环执行任务,并不会跳出次循环。