创建MTK task的demo

本文介绍了如何在MTK系统中创建自定义任务,包括修改custom_config.h和custom_config.c文件,定义任务索引、功能模块ID,添加创建函数声明,更新任务数组,定义消息ID,以及实现任务创建和主函数。

创建MTK task的demo

MTK的拓展进程基本都是在custom_config.c文件中的const comptask_info_struct custom_comp_config_tbl[ MAX_CUSTOM_TASKS]进行定义的,默认最多拓展16个。我们可以参照MTK中自带的两个task demo来创建我们自己的task,其相关步骤如下:

1 对custom_config.h文件的修改

RPS_CUSTOM_TASKS_END之前添加需要创建的task索引

typedef enum 

{

   INDX_CUSTOM1 = RPS_CUSTOM_TASKS_BEGIN,

   INDX_CUSTOM2,

   #ifdef __JY_DEBUG_TASK_TEST__

   INDX_JY_TASK_TEST,// added by chenwenbin

   #endif

   RPS_CUSTOM_TASKS_END

} custom_task_indx_type;

MOD_CUSTOM_END之前添加需要创建的task的功能模块ID,task之间的消息传递就是用这个ID。

typedef enum 

{

   MOD_CUSTOM1 = MOD_CUSTOM_BEGIN,

   MOD_CUSTOM2,

   #ifdef __JY_DEBUG_TASK_TEST__

   MOD_JY_TASK_TEST, // added by chenwenbin

   #endif

   MOD_CUSTOM_END

} custom_module_type;

2 对custom_config.c文件的修改

在该文件的适当位置添加一个create函数声明

extern kal_bool custom1_create(comptask_handler_struct **handle);

extern kal_bool custom2_create(comptask_handler_struct **handle);

#ifdef __JY_DEBUG_TASK_TEST__

extern kal_bool jy_task_test_create(comptask_handler_struct **handle);

#endif

在数组custom_mod_task_g[ MAX_CUSTOM_MODS ]中添加INDX_JY_TASK_TEST

custom_task_indx_type custom_mod_task_g[ MAX_CUSTOM_MODS ] =

{

   INDX_CUSTOM1,        /* MOD_CUSTOM1 */

   INDX_CUSTOM2,        /* MOD_CUSTOM2 */

   #ifdef __JY_DEBUG_TASK_TEST__

   INDX_JY_TASK_TEST,   // added by chenwenbin

   #endif

   INDX_NIL             /* Please end with INDX_NIL element */

};

对数组custom_comp_config_tbl [ MAX_CUSTOM_TASKS ]的修改

const comptask_info_struct custom_comp_config_tbl[ MAX_CUSTOM_TASKS ] =

{

   /* INDX_CUSTOM1 */

   {"CUST1", "CUST1 Q", 210, 1024, 10, 0,

#ifdef CUSTOM1_EXIST

   custom1_create, KAL_FALSE

#else

   NULL, KAL_FALSE

#endif

   },

   /* INDX_CUSTOM2 */

   {"CUST2", "CUST2 Q", 211, 1024, 10, 0,

#ifdef CUSTOM2_EXIST

   custom2_create, KAL_FALSE

#else

   NULL, KAL_FALSE

#endif

   },

#ifdef __JY_DEBUG_TASK_TEST__

   /* INDX_JY_TEST */

   {"JY_TASK_TEST", "JY_TASK_TEST Q", 212, 1024, 10, 0,

      jy_task_test_create, KAL_FALSE

   },

#endif

};

typedef struct {

   kal_char             *comp_name_ptr;          //task的名字

   kal_char             *comp_qname_ptr;         //外部队列的名字

   kal_uint32           comp_priority;           //优先级

   kal_uint16           comp_stack_size;         //栈大小

   kal_uint8            comp_ext_qsize;          //外部队列大小

   kal_uint8            comp_int_qsize;          //内部队列大小

   kal_create_func_ptr  comp_create_func;        //task创建函数

   kal_bool             comp_internal_ram_stack; //是否是internal_ram_stack

} comptask_info_struct;

3 在custom_sap.h文件末尾定义我们的消息ID

#ifdef __JY_DEBUG_TASK_TEST__

MSG_ID_JY_TASK_TEST,  // added by chenwenbin

#endif

4 对custom1_create.c文件的修改

在该文件的适当位置添加一个task_main函数声明

static void custom1_main(task_entry_struct * task_entry_ptr);

static void custom2_main(task_entry_struct * task_entry_ptr);

#ifdef __JY_DEBUG_TASK_TEST__

static void jy_task_test_main(task_entry_struct * task_entry_ptr);

#endif

在该文件末尾添加create和task_main函数的实现

#ifdef __JY_DEBUG_TASK_TEST__

kal_bool jy_task_test_create(comptask_handler_struct **handle)

{

   static const comptask_handler_struct jy_task_test_info =

   {

      jy_task_test_main,  /* task entry function */

      NULL,  /* task initialization function */

      NULL,  /* task configuration function */

      NULL,  /* task reset handler */

      NULL,  /* task termination handler */

   };

   *handle = (comptask_handler_struct *)&jy_task_test_info;

   return KAL_TRUE;

}

static void jy_task_test_main(task_entry_struct * task_entry_ptr)

{

    /*-------------------------------------------------------------------------*/

    /* Local Variables                                                         */

    /*-------------------------------------------------------------------------*/

    ilm_struct current_ilm;

    kal_uint32 my_index;

    /*-------------------------------------------------------------------------*/

    /* Code Body                                                               */

    /*-------------------------------------------------------------------------*/

    kal_get_my_task_index(&my_index);

    while(1)

    {

        receive_msg_ext_q(task_info_g[task_entry_ptr->task_indx].task_ext_qid, ¤t_ilm);

        stack_set_active_module_id(my_index, current_ilm.dest_mod_id);

        if(MSG_ID_JY_TASK_TEST == current_ilm.msg_id)

        {

            jy_trace_log("/n[%d]MOD_MMI --> MOD_JY_TASK_TEST/n", __LINE__);

        }

        free_ilm( ¤t_ilm);

    }

}

#endif

注:以上的修改必须在sysGen1.pl中找到对应的位置进行相应的修改,否则无法创建一个task,因为mtk的编译系统在new操作时根据sysGen1.pl来生成其他配置文件的。

sh-3.2# ./home/animation_demo USAGE: Choose one of the following options, then press enter: 'P' to toggle between PAUSE and PLAY 'S' to increase playback speed, 's' to decrease playback speed 'D' to toggle playback direction 'N' to move to next frame (in the current direction, better in PAUSE) 'Q' to quit Running...251 Pipeline state changed from NULL to READY: [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached Pipeline state changed from READY to PAUSED: Pipeline state changed from PAUSED to PLAYING: Seeking is ENABLED from 0:00:00.000000000 to 0:00:07.105306123 [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached End-Of-Stream reached.5464 / 0:00:07.170000000 (animation_demo:4695): GLib-CRITICAL **: 21:35:20.600: g_io_channel_unref: assertion 'channel != NULL' failed sh-3.2#
最新发布
08-21
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值