打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
BLE协议栈——事件与消息
BLE协议栈中事件与消息的概念很容易让人混淆,总体上来说可以这样理解事件与消息的概念:

1)OS依靠事件来决定执行哪个任务
OS具有一个任务事件表依次存储各个任务的事件标志events,每个任务的events对应该事件表中的一项,为16位,OS通过查询事件列表来执行不同的任务。事件列表内存分配:
tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt)
每个任务的事件标志events在事件列表中的顺序与任务号一致,例如taskID为1的任务的events对应事件表中第一项,taskID为2的任务的events对应事件表中第二项。当任务事件标志events中的某位置位时,表示发生了特定事件,在函数osal_run_system()中会执行发生事件的任务。

2)任务在特定事件处理中一般需要获取并处理消息
每个任务除了具有一个16位的events外,还有自己的消息。消息存放在消息池中,消息池头指针:osal_msg_q_t osal_qHead。消息由消息头和消息体组成,消息头结构:
typedef struct
{
  void   *next; //指向下一条消息
  uint16 len; //消息体长度
  uint8  dest_id; //任务ID
} osal_msg_hdr_t;
消息体结构(以按键消息为例):
typedef struct
{
  osal_event_hdr_t hdr;
  uint8             state; // shift
  uint8             keys;  // keys
} keyChange_t;
其中osal_event_hdr_t  hdr为事件头结构:
typedef struct
{
  uint8  event;
  uint8  status;
} osal_event_hdr_t;

当一个任务有对应的事件发生时,OS会执行该任务,任务判断事件类型并从消息池中提取自己的消息加以处理。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ZStack OSAL的事件(event)与消息(message)——part1 & par...
[转载]蓝牙4.0 BLE 数据传输 (二)
将TIzigbee开源协议栈中的OS操作系统移植出来,放在STC12C60S2中使用
Zstack OSAL详解
OSAL系统框架专题【转载】
任务处理函数_ProcessEvent
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服