协议栈和OS理解之一

来源:互联网 发布:unity3d 模型闪烁 编辑:程序博客网 时间:2024/06/06 02:19

刚开始学习zstack,真的不知如何下手,因为手边还是有不少资料的,于是就这本看看那本看看,但是由于每种资料的思路不一样,因此我看了很久也没搞清楚OSAL的作用,什么是绑定,为什么要添加任务等等,今天看了一本书叫《zigbee技术实践教程》,里面讲操作系统讲的特别通俗易懂。现在我将自己的一些理解写下来吧!

    我们都知道,一个项目哪怕一段可运行的程序,开始部分都是在main函数里,当然协议栈也不例外,那我们先分析一下zmain.c吧

 

 ZSEG int main( void )
  { 
    //Turn off interrupts-关闭中断
    osal_int_disable( INTS_ALL ); 
   //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-初始化HAL驱动
   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

  //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();

  液晶支持显示
  #ifdef LCD_SUPPORTED
  zmain_lcd_init();
  #endif

  osal_start_system(); // No Return from here-没有返回

}

从zmain.c里可以知道这个函数一共做了两件事,系统初始化(由启动代码初始化硬件和软件架构需要的各个模块)和开始执行操作系统实体。里面的具体工作有:关闭中断---电压检测---初始化stack存储区 ---初始化板载IO--- 初始化HAL驱动 ---初始化NV系统 ---确定扩展地址(64位IEEE/物理地址)---初始化基本NV条目--- 初始化MAC ---操作系统---- 允许中断-----最终板初始化 ---显示设备信息  液晶支持显示。启动代码为操作系统做好准备工作后,就开始执行操作系统入口程序,并将控制权彻底交给操作系统。