欢迎大家访问我的博客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就是操作系统的心脏。
文章评论(0条评论)
登录后参与讨论