触发事件有三种方式

整个协议栈中触发事件有三种方式
1、通过设置一个“软件定时器”,当其溢出时触发事件。osal_start_timerEx()—osalTimerUpdate()— osal_set_event() 
2、通过调用系统消息传递机制触发事件。osal_msg_send()—osal_set_event() 
3、直接调用osal_set_event()触发事件。 

前面两种方式其实是间接调用了osal_set_event(),协议中很多应用都是通过前面两种方式来触发。



在协议栈里面,调用osal_set_event()的函数最主要是两个: 
(1)osalTimerUpdate() 
(2)osal_msg_send() 


对于1,当有osal_start_timerEx()在系统软件定时器链表中添加一个软件定时器并启动时,系统通过osalTimerUpdate()对链表中的每一个软件定时器进行减1ms操作(具体参见有关于系统时钟的记录),当定时器溢出时,调用osal_set_event()触发事件,如下 
/************************ 
static void osalTimerUpdate( uint16 updateTime ) 

// When timeout, execute the task 
if ( srchTimer->timeout == 0 ) 

osal_set_event( srchTimer->task_id, srchTimer->event_flag );

 } 

}
/************************ 
对于2,对msg_ptr一系列处理后,调用osal_set_event()触发事件,如下 

/************************ 
byte osal_msg_send( byte destination_task, byte *msg_ptr ) 
{

osal_set_event( destination_task, SYS_EVENT_MSG );
return ( ZSUCCESS ); 
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值