1,ZigBee协议栈
协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。
ZigBee栈就是将各个层的协议集结在一起,以函数的形式实现API调用
2,ZigBee协议栈安装、编译与下载
首先安装CC2530的协议栈,和安装软件一样的操作;
3,源代码学习与解析
此处源代码来自亿研电子提供的资料:特此感谢!
首先是main函数
int main( void )
{
// Turn off interrupts
osal_int_disable( INTS_ALL ); //关闭所有中断
// Initialization for board related stuff such as LEDs
HAL_BOARD_INIT(); //初始化系统时钟
// Make sure supply voltage is high enough to run
zmain_vdd_check(); //检查芯片电压是否正常
// Initialize board I/O
InitBoard( OB_COLD ); //初始化I/O ,LED 、Timer 等
// Initialze HAL drivers
HalDriverInit(); //初始化芯片各硬件模块
// Initialize NV System
osal_nv_init( NULL ); //初始化Flash 存储器
// Initialize the MAC
ZMacInit(); //初始化MAC 层
// Determine the extended address
zmain_ext_addr(); //确定IEEE 64位地址
#if defined ZCL_KEY_ESTABLISH
// Initialize the Certicom certificate information.
zmain_cert_init();
#endif
// Initialize basic NV items
zgInit(); //初始化非易失变量
#ifndef NONWK
// Since the AF isn't a task, call it's initialization routine
afInit();
#endif
// Initialize the operating system
osal_init_system(); //初始化操作系统
// Allow interrupts
osal_int_enable( INTS_ALL ); //使能全部中断
// Final board initialization
InitBoard( OB_READY ); //最终板载初始化
// Display information about this device
zmain_dev_info(); //显示设备信息
/* Display the device info on the LCD */
#ifdef LCD_SUPPORTED
zmain_lcd_init(); //初始化LCD
#endif
#ifdef WDT_IN_PM1
/* If WDT is used, this is a good place to enable it. */
WatchDogEnable( WDTIMX );
#endif
osal_start_system(); // No Return from here 执行操作系统,进去后不会返回
return 0; // Shouldn't get here.
} // main()
重点关注初始化系统与进入系统函数;
下面是初始化系统函数
uint8 osal_init_system( void )
{
// Initialize the Memory Allocation System
osal_mem_init();
// Initialize the message queue
osal_qHead = NULL;
// Initialize the timers
osalTimerInit();
// Initialize the Power Management System
osal_pwrmgr_init();
// Initialize the system tasks.
osalInitTasks();//任务初始化
// Setup efficient search for the first free block of heap.
osal_mem_kick();
return ( SUCCESS );
}