MTK task 小结 4

今天继续昨天的,说一下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/archive/2010/07/28/5770303.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值