如需要绘制PCB,设计电路可以和我联系。sunhenu@163.com.
分类: LINUX
2013-04-19 16:16:49
我使用的协议栈版本及例子信息:
D:\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples\SampleApp
打开sampleApp工程。
用户自己添加的应用任务程序在Zstack中的调用过程是:
main() ---> osal_init_system()---> osalInitTasks()---> SampleApp_Init()
(1).main() 执行 (在ZMain.c中)
main() ---> osal_init_system()
(2). osal_init_system()调用osalInitTasks(), (在OSAL.c中)
osal_init_system() ---> osalInitTasks()
(3). osalInitTasks()调用SampleApp_Init() , (在OSAL_SampleApp.c中)
osalInitTasks() ---> SampleApp_Init()
在osalInitTasks()中实现了多个任务初始化的设置,其中macTaskInit( taskID++ )到ZDApp_Init( taskID++ )的几行代码表示对于几个系统运行初始化任务的调用,而用户自己实现的SampleApp_Init()在最后,这里taskID随着任务的增加也随之递增.所以用户自己实现的任务的初始化操作应该在osalInitTasks()中增加.
//----------------------------------------------------------------------------------------------------
1、首先来看下主函数main()
int main( void ) //主函数的功能就是完成初始化任务,然后进入OSAL
{
// Turn off interrupts
/*关闭中断*/
osal_int_disable( INTS_ALL );
// Initialize HAL
/*初始化硬件*/
HAL_BOARD_INIT();
// Make sure supply voltage is high enough to run
/*电压检测,确保芯片能正常工作的电压*/
zmain_vdd_check();
// Initialize stack memory
/*初始化stack存储区*/
zmain_ram_init();
// Initialize board I/O
/*初始化板载IO*/
InitBoard( OB_COLD );
// Initialze HAL drivers
/*初始化硬件驱动*/
HalDriverInit();
// Initialize NV System
/*初始化NV系统*/
osal_nv_init( NULL );
// Determine the extended address
/*确定扩展地址(64位IEEE/物理地址)*/
zmain_ext_addr();
// Initialize basic NV items
/*初始化基本NV条目*/
zgInit();
// Initialize the MAC
/*初始化MAC*/
ZMacInit();
#ifndef NONWK
// Since the AF isn't a task, call it's initialization routine
afInit();
#endif
#ifdef LCD_SUPPORTED
HalLcdInit();
#endif
// Initialize the operating system
/*初始化操作系统*/
osal_init_system();
// Allow interrupts
/*开启中断*/
osal_int_enable( INTS_ALL );
// Final board initialization
/*最终板载初始化*/
InitBoard( OB_READY );
//HalLcdInit();
// Display information about this device
/*显示设备信息*/
zmain_dev_info();
/* Display the device info on the LCD */
#ifdef LCD_SUPPORTED
zmain_lcd_init();
#endif
osal_start_system(); // No Return from here 没有返回,即进入操作系统!!!
}
这里重点是两个函数:系统初始化函数 osal_init_system();系统主循环函数 osal_start_system();
参考文章为 http://wjf88223.blog.163.com。