OSAL任务调度

OSAL的main函数在zmain.c文件中定义,(本文以TI官方例程GenericApp为例)原型如下:

int main( void )

{

  osal_int_disable( INTS_ALL );

  HAL_BOARD_INIT();

  zmain_vdd_check();

  InitBoard( OB_COLD );

  HalDriverInit();

  osal_nv_init( NULL );

  ZMacInit();

  zmain_ext_addr();

  zgInit();

#ifndef NONWK

  // Since the AF isn't a task, call it's initialization routine

  afInit();

#endif

  // Initialize the operating system

  osal_init_system();

  osal_int_enable( INTS_ALL );

  // Final board initialization

  InitBoard( OB_READY );

  zmain_dev_info();

#ifdef LCD_SUPPORTED

  zmain_lcd_init();

#endif

#ifdef WDT_IN_PM1

  /* If WDT is used, this is a good place to enable it. */

  WatchDogEnable( WDTIMX );

#endif

  osal_start_system(); // No Return from here

  return 0;  // Shouldn't get here.

} // main()

    

   主函数开始所调用的函数大都是对系统的初始化工作,这里只做简单介绍:

osal_int_disable( INTS_ALL );关闭中断

HAL_BOARD_INIT();初始化和底板有关的东西比如led灯

zmain_vdd_check();检查电压值

InitBoard( OB_COLD );对底板的初始化,主要是按键

HalDriverInit();物理层驱动初始化

osal_nv_init( NULL );初始化非易失变量系统

ZMacInit();媒体层初始化

zgInit();初始化基本nv条目

osal_int_enable( INTS_ALL );开启中断

其中对于任务调度十分重要的函数是osal_init_system()和osal_start_system()。在上述代码中用蓝色字体标出。

osal_init_system()的作用是初始化操作系统,其原型是:

1. uint8 osal_init_system( void )

2. {

3.   // 内存管理系统初始化

4.   osal_mem_init();

5.   // 初始化消息队列

6.   osal_qHead = NULL;

7.   // 定时器初始化

8.   osalTimerInit();

9.   // 电源管理初始化

10.   osal_pwrmgr_init();

11.   // 初始化任务调度系统

12.   osalInitTasks();

13.   // 有关堆内存的设置

14.   osal_mem_kick();

15.   return ( SUCCESS );

16. }

以上代码中关于任务调度的函数osalInitTasks()在OSAL_GenericApp.c文件中定义,这是我们写程序zigbee应用程序第一个需要修改的地方。其定义如下:

1. void osalInitTasks( void )

2. {

3.   uint8 taskID = 0;

4.   tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);

5.   osal_memset( tasksEvents, 0, (sizeof( 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值