首先来看看task的数据类型声明,在config\include\hal\task_config.h中对task和module类型进行了定义。

/*************************************************************************
* STRUCT
*  task_info_struct
*
* DESCRIPTION
*  The structure defines component task information at execution time
*
* FIELDS
*  task_name_ptr  -  pointer to task name
*  task_qname_ptr;   -  pointer to task external queue name
*  task_priority  -  task priority
*   task_stack_size  -  task stack size
*  task_id        -  created task entity id
*  task_ext_qid   -  created task external queue id
*  task_int_qid_ptr  -  pointer to created task internal queue
*  task_entry_func   -  task's entry function
*  task_cfg_func  -  task's configuration handler
*  task_init_func -  task's initialization handler
*  task_reset_func   -  task's reset handler
*  task_end_func  -  task's termination handler
*  task_ext_qsize -  task's external queue size
*
* GLOBALS AFFECTED
*
*************************************************************************/
typedef struct {
   kal_char             *task_name_ptr;
   kal_char             *task_qname_ptr;
   kal_uint32           task_priority;
   kal_uint32           task_stack_size;
   kal_taskid           task_id;
   kal_msgqid           task_ext_qid;
   int_q_type           *task_int_qid_ptr;
   kal_task_func_ptr    task_entry_func;
   task_cfg_func_ptr    task_cfg_func;
   task_init_func_ptr   task_init_func;
   task_reset_func_ptr  task_reset_func;
   task_end_func_ptr     task_end_func;
   kal_uint8            task_ext_qsize;
   kal_uint8            task_int_qsize;
#ifdef __SYS_INTERN_RAM__
   kal_bool          task_internal_ram_stack;
#endif /* __SYS_INTERN_RAM__ */
} task_info_struct;
View Code

 

typedef struct {
   task_indx_type     module_task_indx;
   mod_init_func_ptr module_init[ RPS_MAX_MODULES_IN_TASK ];
   mod_cfg_func_ptr  module_configure[ RPS_MAX_MODULES_IN_TASK ];
} module_info_struct;
View Code

 

/*************************************************************************
* STRUCT
*  syscomp_info_struct
*
* DESCRIPTION
*  The structure defines component task configuration information
*
* FIELDS
*  comp_name_ptr  -  pointer to component task name
*  comp_qname_ptr -  pointer to component task's external queue name
*  comp_priority  -  component task's priority
*  comp_stack_size   -  component task's stack size
*  comp_ext_qsize -  component task's external queue size
*  comp_int_qsize -  component task's internal queue size
*  comp_create_func- component entity's create function
*
* GLOBALS AFFECTED
*
*************************************************************************/
typedef struct {
   kal_char             *comp_name_ptr;
   kal_char             *comp_qname_ptr;
   kal_uint32           comp_priority;
   kal_uint32           comp_stack_size;
   kal_create_func_ptr  comp_create_func;
   kal_bool             comp_internal_ram_stack;
   kal_uint8            comp_ext_qsize;
   kal_uint8            comp_int_qsize;
   kal_uint8            comp_boot_mode;
} comptask_info_struct;
View Code

 

全局的task数组在task_config.c中定义为task_info_g,在stack_init_comp_info()中申请空间(kal_sys_mem_alloc)并初始化。数组的大小为enum类型RPS_TOTAL_STACK_TASKS,这个值由hal_task_config.h和app_task_config.h决定。这两个文件中,每个枚举量都是一个task_index。数组的值从sys_comp_config_tbl传递过来,这个数组在syscomp_config.c中定义,同样由hal_task_config.h和app_task_config.h决定。

 

在 stack_config.h中

#define task_index(p1) p1, 
typedef enum {
    #include "hal_task_config.h"
    #include "app_task_config.h"
    /*Total number of build time tasks*/
    RPS_TOTAL_STACK_TASKS,
}task_indx_type;

例如

app_task_config.h

/*************************Task CFG Begin****************/
/*task_indx_type*/
task_index(INDX_MMS)            /*WAP ps task*/ 
/*module_type and mod_task_g*/
task_module_map(INDX_MMS, MOD_MMS)

/*task's parameters*/
task_name("MMS")
task_queue_name("MMS Q")
task_priority(TASK_PRIORITY_MMS)
task_stack_size(3596)
#ifdef OBIGO_Q03C_MMS_V02
task_create_function(mms_create)
#else
null_task_create_entry(NULL)
#endif
task_stack_internalRAM(KAL_FALSE)
task_external_queue_size(20)
task_internal_queue_size(0)
task_boot_mode(NORMAL_M)
/*************************Task CFG END******************/

或者在~flash_cfg_tmp.c也可以看到

 typedef enum {
 #line 1 "config\\include\\hal\\hal_task_config.h"
 #line 1613 "config\\include\\hal\\hal_task_config.h"
 INDX_NIL, 
 ... 
 INDX_MMS,
... INDX_USER_EXT5, INDX_TEST_TASK_MBTK, INDX_TEST_TASK_MBTK2, INDX_TEST_TASK_MBTK3,
#line 3281 "config\\include\\app\\app_task_config.h" #line 1204 "config\\include\\hal\\stack_config.h" RPS_TOTAL_STACK_TASKS, }task_indx_type;

 

/*************************************************************************
* STRUCT
*  syscomp_info_struct
*
* DESCRIPTION
*  The structure defines component task configuration information
*
* FIELDS
*  comp_name_ptr  -  pointer to component task name
*  comp_qname_ptr -  pointer to component task's external queue name
*  comp_priority  -  component task's priority
*  comp_stack_size   -  component task's stack size
*  comp_ext_qsize -  component task's external queue size
*  comp_int_qsize -  component task's internal queue size
*  comp_create_func- component entity's create function
*
* GLOBALS AFFECTED
*
*************************************************************************/
typedef struct {
   kal_char             *comp_name_ptr;//<Task名称
   kal_char             *comp_qname_ptr;//<外部队列名称
   kal_uint32           comp_priority;//<Task优先级
   kal_uint32           comp_stack_size;//<Task堆栈大小
   kal_create_func_ptr  comp_create_func;//<创建Task的入口函数,返回kal_bool类型,要求参数为comptask_handler_struct **,定义见下方。
   kal_bool             comp_internal_ram_stack;//<暂不知道作何用处,一般为KAL_FALSE
   kal_uint8            comp_ext_qsize;//<外部队列大小
   kal_uint8            comp_int_qsize;//<内部队列大小
   kal_uint8            comp_boot_mode;
} comptask_info_struct;

 

 

 

/*************************************************************************
* STRUCT
*  syscomp_info_struct
*
* DESCRIPTION
*  The structure defines component task configuration information
*
* FIELDS
*  comp_entry_func   -  component task's entry function
*  comp_cfg_func  -  component task's configurantion handler
*  comp_init_func -  component task's initialization handler
*  comp_reset_func   -  component task's reset handler
*  comp_end_func  -  component task's termination handler
*  comp_modmain_func -  component task's module main handler
*
* GLOBALS AFFECTED
*
*************************************************************************/
typedef struct {
   kal_task_func_ptr    comp_entry_func;//<主函数,实现为一个消息循环
   task_init_func_ptr   comp_init_func;//<初始化函数
   task_cfg_func_ptr    comp_cfg_func;//<配置函数
   task_reset_func_ptr  comp_reset_func;//<重置函数
   task_end_func_ptr    comp_end_func;//<Task结束时调用
} comptask_handler_struct;

typedef kal_bool (*kal_create_func_ptr)(comptask_handler_struct **);

 

 

const comptask_info_struct sys_comp_config_tbl[RPS_TOTAL_STACK_TASKS] =
{
    #include "hal_task_config.h"
    #include "app_task_config.h"
};

 

#define task_name(p1)                       {p1, 
#define task_queue_name(p1)                  p1,   
#define task_priority(p1)                    p1,
#define task_stack_size(p1)                  (p1 + TASK_STACK_COMMON_PLUS),
#define null_task_create_entry(p1)          (kal_create_func_ptr)TASK_NO_CREATE_PATTERN,
#define task_create_function(p1)             p1,
#define task_stack_internalRAM(p1)           p1,
#define task_external_queue_size(p1)         p1, 
#define task_internal_queue_size(p1)         p1,
#define task_boot_mode(p1)                   p1},

 

/*************************Task CFG Begin****************/
/*task_indx_type*/
task_index(INDX_MMI) 
/*module_type and mod_task_g*/
#ifdef WISDOM_MMI
/* under construction !*/
/* under construction !*/
#else
task_module_map(INDX_MMI, MOD_MMI)
#endif
/* MOD_MMI is used by HAL file, please don't delete or modify it */

/*task's parameters*/
task_name("MMI")
task_queue_name("MMI Q")
task_priority(TASK_PRIORITY_MMI)

#if defined(NEPTUNE_MMI)
#if defined(__LOW_COST_SUPPORT_ULC__)
task_stack_size(3072)
#else /* __LOW_COST_SUPPORT_ULC__ */
task_stack_size(4096)
#endif /* __LOW_COST_SUPPORT_ULC__ */
#else  /* Default value */
#if defined(WISDOM_MMI)
#if defined(OPERA_BROWSER) /* MMI: + 4 KB */
/* under construction !*/
#else
/* under construction !*/
#endif
#else  /* WISDOM_MMI */
#ifdef __MOBILE_VIDEO_SUPPORT__
task_stack_size(20480)
#else
#if defined(__MRE_PACKAGE_FULL__) || defined(__MRE_PACKAGE_NORMAL__)
task_stack_size(16348) /* MRE APP opera need 16KB */
#elif defined(OPERA_BROWSER) /* MMI: + 4 KB */
task_stack_size(10240)
#else
task_stack_size(6144)
#endif
#endif
#endif /* WISDOM_MMI */
#endif /* NEPTUNE_MMI */    
#ifdef MMI_NOT_PRESENT
null_task_create_entry(NULL)
#elif !defined(WISDOM_MMI)
task_create_function(mmi_create)
#else
/* under construction !*/
#endif
task_stack_internalRAM(KAL_FALSE)
#if defined(WISDOM_MMI)
/* under construction !*/
/* under construction !*/
#else
   #if (defined(__GEMINI__)) && (GEMINI_PLUS >= 4)
/* under construction !*/
   #else
      task_external_queue_size(30)
   #endif
task_internal_queue_size(0)
#endif
task_boot_mode(NORMAL_M | USB_M)
/*************************Task CFG END******************/

 

/*****************************************************************************
 * FUNCTION
 *  mmi_create
 * DESCRIPTION
 *  MMI task create function for system service.
 * PARAMETERS
 *  handle      [IN]            
 *  a(?)        [IN/OUT]        Handle: provide the create task related routine function.
 * RETURNS
 *  The result is ok or not.
 *****************************************************************************/
kal_bool mmi_create(comptask_handler_struct **handle)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    static comptask_handler_struct mmi_handler_info = 
    {
        MMI_task,   /* task entry function */
        MMI_Init,   /* task initialization function */
        NULL,
        NULL,       /* task reset handler */
        NULL,       /* task termination handler */
    };

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    *handle = &mmi_handler_info;
    return KAL_TRUE;
}

 

发送消息

/*
  NOTE: User must take care about the usage of this API, 
        if the message is sent to the same task, the message
        will be sent to internal queue, task must process the 
        internal queue. Otherwise, internal queue will full.
*/
#define SEND_ILM( src_mod, dest_mod, sap, ilm_ptr)\
{ \
   ilm_ptr->src_mod_id  = src_mod;  \
   ilm_ptr->dest_mod_id = dest_mod; \
   ilm_ptr->sap_id = sap; \
   if (mod_task_g[src_mod] == mod_task_g[dest_mod]) { \
     msg_send_int_queue(ilm_ptr); \
   } else { \
     msg_send_ext_queue(ilm_ptr); \
   } \
}

 

posted on 2019-04-23 11:45  陌鉎こ城sHi  阅读(464)  评论(0编辑  收藏  举报