原创 【小华仔学习z-stack】halprocesspoll与初始化

2010-8-1 15:53 4306 9 9 分类: 通信

欢迎大家访问我的博客http://zacard168.blog.163.com/


在osal的轮训任务只有halprocesspoll()里面只轮询timer和UART,在调试的过程中均没有引起task任务切换的标志出现。因此,鄙人可以大胆的猜想,在操作系统的初始化中是不是设置了定时轮询的任务。先调出所有初始化函数:


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


  // Initialize board I/O
  InitBoard( OB_COLD );


  // Initialze HAL drivers
  HalDriverInit();


  // Initialize NV System
  osal_nv_init( NULL );


  // Determine the extended address
  zmain_ext_addr();


  // Initialize basic NV items
  zgInit();


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


  /* Display the device info on the LCD */
#ifdef LCD_SUPPORTED
  zmain_lcd_init();


在这些初始化函数中,比较有嫌疑的就是InitBoard()了,追踪定义再onboard.c里面。发现在这里初始化了timer,HalTimerConfig()里面一大堆参数,先不管。在最后初始化了key,


    /* Initialize Key stuff */
    OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;
    HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);


感觉这里有情况果然,追踪HalKeyConfig()的定义(在key.c里面)发现最后一行osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_POLLING_VALUE);halkey的时钟的任务ID是hal_TaskID,事件是HAL_KEY_EVENT,轮训时间是HAL_KEY_POLLING_VALUE=100ms.也就是说每100ms轮询一次按键。从这里可以看出,timer就是操作系统的心脏。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条