MTK task 小结 5

今天继续昨天的,说一下task之间的消息发送。

task 之间发送消息,第一是要添加一个消息 id,在custom_sap.h里面,

/* Add customization message id here */ MSG_ID_CUSTOM1_CUSTOM2 = CUSTOM_MSG_CODE_BEGIN, MSG_ID_CUSTOM2_CUSTOM1, MSG_ID_MSG_TEST, //添加了一个消息id


接下来是发送

MTK 发送消息是mod 到 mod,因为mod是挂载到task上,那么最终还是发送到task上。

MTK 发送消息是有一套固定的接口,对消息实体也有固定要求。

消息的主体是 ilm_struct 结构:

typedef struct ilm_struct { module_type src_mod_id; //源 mod id module_type dest_mod_id; //目的 mod id sap_type sap_id; // Service Access Pointer Identifier 不清楚干什么用的 msg_type msg_id; // 消息 id 就是上面创建的消息 id local_para_struct *local_para_ptr; //消息信息载体 1 peer_buff_struct *peer_buff_ptr; //消息信息载体 2 } ilm_struct;


这个消息结构不是随便malloc 出来的,是由专门的函数 allocate_ilm 来创建,这个函数会从一个pool 去申请,这样做可以方便控制,同时也可以减少内存分配释放操作,碎片的产生。

创建完毕后,可以填完剩下的信息, 注意 allocate_ilm 参数是当前要发送消息的mod id,不要搞错了。

比如:

ilm_struct *ilm_ptr = allocate_ilm(MOD_TASK_TEST); //创建一个消息结构 ilm_ptr->src_mod_id = MOD_TASK_TEST; //设定源mod id ilm_ptr->sap_id = 0; ilm_ptr->dest_mod_id = MOD_MMI; //设定目的mod id ilm_ptr->msg_id = (msg_type) MSG_ID_MSG_TEST; //设定消息id


接着需要一个消息 实体,也就是搭载具体消息信息的结构体

typedef struct local_para_struct { LOCAL_PARA_HDR } local_para_struct;
其实这个结构体只有一个头信息
#define LOCAL_PARA_HDR / kal_uint8	ref_count; / kal_uint16	msg_len;


分别用来记录该信息的引用次数以及长度。

在实际开发中,其实是扩展这个消息,头结构保持一致就可以(有点像C++的父类子类的意思);

比如:

typedef struct { LOCAL_PARA_HDR char msg_str[10]; int msg_int; }msg_test_struct;

当然这个结构体内存也不是随便分配的,有专门的函数

local_para_struct *local_para = construct_local_para(sizeof(msg_test_strct), TD_CTRL);//第二个参数现在不用。 strcpy(local_para->msg_str,”msg”); local_para->msg_int = 12;
 

Ok现在可以发送这个消息了

ilm_ptr->local_para_ptr = local_para; msg_send_ext_queue(ilm_ptr) ;

说明:发送消息函数是往task的外部消息队列里发送,这样task就可以通过 receive_msg_ext_q获得,

还有一对函数是处理内部消息队列的 msg_send_int_queue 和 receive_msg_int_q。这两者的不同在于,当调用外部消息接受函数时,如果没有外部消息队列为空,那么task将挂起,直到有消息到达,而内部消息队列则不会挂起,只是返回fasle;


原文转载自:http://blog.csdn.net/yanwuxufeng/article/details/5770303

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值