z-stack halprocesspoll与初始化

在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就是操作系统的心脏。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值