osal_init_system()函数研究(转)

来源:互联网 发布:软件汉化工具 编辑:程序博客网 时间:2024/05/29 03:37

原链接:http://bbs.ednchina.com/BLOG_ARTICLE_443996.HTM


[cpp] view plain copy
  1. //初始化操作系统,主要是堆栈,时钟,电源模式,任务号分配  
  2. osal_init_system();  
  3.   
  4. //通过创建定义在任务表【OSAL_Tasks.h】中的任务来初始化任务系统【OSAL.c】  
  5. byte osal_init_system( void )  
  6. {  
  7.   //初始化内存分配系统【OSAL_Memory.c】  
  8.   osal_mem_init();  
  9.   
  10.   //初始化消息队列,其实就是一个指针  
  11.   osal_qHead = NULL;  
  12.   
  13.   //初始化系统定时器【OSAL_Timers.c】  
  14.   osalTimerInit();  
  15.   
  16.             void osalTimerInit( void )  
  17.             {  
  18.                 // Initialize the rollover modulo  
  19.                 tmr_count = TICK_TIME;  
  20.                   
  21.                 //【OnBoard.h】  
  22.                 // #define TICK_TIME   1000   //每次时钟滴答的时间(毫秒)  
  23.                 tmr_decr_time = TIMER_DECR_TIME;  
  24.                 // #define TIMER_DECR_TIME    1  
  25.                 osal_timer_activate( false );  
  26.               
  27.                         //初始化系统定时器,实际上是停止了时钟定时器【OSAL_Timers.c】  
  28.                         void osal_timer_activate( byte turn_on )  
  29.                         {  
  30.                             osal_timer_hw_setup( turn_on );  
  31.                             //设置时钟硬件【OSAL_Timers.c】  
  32.                             void osal_timer_hw_setup( byte turn_on )  
  33.                             {  
  34.                                 if (turn_on)  
  35.                                 {  
  36.                                     HalTimerStart (OSAL_TIMER, tmr_count );  
  37.                                     //启动时钟  
  38.                                 }  
  39.                                 else  
  40.                                 {  
  41.                                     HalTimerStop (OSAL_TIMER);    
  42.                                 }  
  43.                             }  
  44.                             timerActive = turn_on;  
  45.                         }  
  46.               
  47.                 timerActive = false;  
  48.                 osal_systemClock = 0;  
  49.             }  
  50.   
  51.   //初始化电源管理系统  
  52.   osal_pwrmgr_init();  
  53.   
  54.             //配置器件使用的电源模式【OSAL_PwrMgr.c】  
  55.             void osal_pwrmgr_init( void )  
  56.             {  
  57.                 pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON;  
  58.                 //默认不打开节能模式  
  59.                 //【OSAL_PwrMgr.h】  
  60.                 //#define PWRMGR_ALWAYS_ON  0   //不使用节能模式  
  61.                 //#define PWRMGR_BATTERY    1    //使用电池供电,允许进入休眠模式  
  62.                 //pwrmgr_attribute_t  pwrmgr_attribute;  
  63.                         typedef struct  
  64.                         {  
  65.                             uint16 pwrmgr_task_state;  
  66.                             uint16 pwrmgr_next_timeout;  
  67.                             uint16 accumulated_sleep_time;  
  68.                             uint8  pwrmgr_device;  
  69.                         } pwrmgr_attribute_t;  
  70.                 pwrmgr_attribute.pwrmgr_task_state = 0;            // Cleared.  All set to conserve  
  71.             }  
  72.   
  73.   //初始化系统任务,为每个任务调用初始化函数  
  74.   osalInitTasks();  
  75.     
  76.             //【sapi.c】  
  77.             void osalInitTasks( void )  
  78.             {  
  79.                 uint8 taskID = 0;  
  80.                 tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);  
  81.                 osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));  
  82.                   
  83.                 // uint16 *tasksEvents;  
  84.                 // const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );  
  85.                 //任务队列中其实是一个个的事件处理函数,这里分配了任务要用的内存空间。  
  86.                 //然后为每个任务分配一个不同的任务ID,ID递增,按照初始化的顺序排列在tasksArr队列中  
  87.                 macTaskInit( taskID++ );  
  88.                 nwk_init( taskID++ );  
  89.                 Hal_Init( taskID++ );  
  90.                   
  91.                 #if defined( MT_TASK )  
  92.                     MT_TaskInit( taskID++ );  
  93.                 #endif  
  94.                   
  95.                 APS_Init( taskID++ );  
  96.                 ZDApp_Init( taskID++ );  
  97.                 SAPI_Init( taskID );  
  98.             }  
  99.   
  100.   //Setup efficient search for the first free block of heap.  
  101.   //跳过第一个块  
  102.   osal_mem_kick();  
  103.   return ( ZSUCCESS );  

原创粉丝点击