ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制
来源:互联网 发布:matlab矩阵绝对值 编辑:程序博客网 时间:2024/04/30 14:39
一 事件机制
每一个任务都会有很多种事件,包括系统消息、任务事件等等。
二 事件的触发启动
函数1:启动一个定时器、定时delaytime时间、之后触发TaskID的event事件.延时时间以ms为单位。
osal_start_timerEx( TaskID,event,delaytime);
函数2:置 tasksEvents[]数组的事件标志位为1、系统轮询这个数组确定是否触发事件
osal_set_event( simpleBLEPeripheral_TaskID, SBP_START_DEVICE_EVT );
三 消息机制之创建发送
keyChange_t *msgPtr;
msgPtr = (keyChange_t *)osal_msg_allocate( sizeof(keyChange_t) );
//给消息定义一个结构体并分配
if ( msgPtr )
{
//设置结构体
msgPtr->hdr.event = KEY_CHANGE;
msgPtr->state = state;
msgPtr->keys = keys;
//发送消息
osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );
}
二 消息机制之接收处理
if ( events & SYS_EVENT_MSG )
{
uint8 *pMsg;
if ( (pMsg = osal_msg_receive( SimpleOsal_TaskID )) != NULL )// 接收消息
{
SimpleOsal_ProcessOSALMsg( (osal_event_hdr_t *)pMsg)//处理消息
VOID osal_msg_deallocate( pMsg)//删除消息空间
}
return (events ^ SYS_EVENT_MSG);
}
二 按键处理过程:
1.按键初始化
HalDriverInit();
---> HalKeyInit();// 相关寄存器的设置、 这个函数协议栈里边默认是使能的
..........
-->HAL_KEY_SW_6_SEL &= ~(HAL_KEY_SW_6_BIT); /* Set pin function to GPIO */
-->HAL_KEY_SW_6_DIR &= ~(HAL_KEY_SW_6_BIT); /* Set pin direction to Input */
.........
2.注册按键回调函数:
void InitBoard( uint8 level )
----> HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
//这个函数对,按键相关的寄存器设置为中断模式(协议栈默认的情况下是使用中断方式处理这个按键)
//同时向协议栈注册回调函数OnBoard_KeyCallback();
3.按键注册函数:
osal_init_system();
----->osalInitTasks();//各任务初始化
----> SimpleOsal_Init( task_id )//application任务初始化函数
------>uint8 RegisterForKeys( uint8 task_id )
/ / 将第一个调用这个函数的TASK_ID 赋值给一个registeredKeysTaskID全局变量
4.按键中断处理函数-----hal_key.h发生中断时的调用顺序
HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )
--> halProcessKeyInterrupt()-----产生HAL事件
-->osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);
//启动Hal_TaskID任务的HAL_KEY_EVENT事件处理过程这个处理函数定义在hal_driver.c里边
--> uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )
--->HalKeyPoll();按键轮询函数----获得键值
- ->(pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);//这里调用按键回调函数处理按键
--->OnBoard_KeyCallback()--处理键值向注册按键服务的任务发生消息
---> OnBoard_SendKeys ()
--->osal_msg_send() 发送消息的函数
- ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制
- ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制
- ble协议栈cc2540x-1.3.2之hal_board_cfg.h
- ble学习笔记十四---------ble协议栈之按键事件
- BLE 协议栈 之"消息传递""事件触发"谁与争锋
- 事件处理机制之AnsyncTask异步任务
- Zstack协议栈OSAL中添加任务事件消息、发送数据详细过程
- BLE协议栈之Central事件慢慢谈
- 事件处理机制之Handler消息传递机制浅析
- 更新TI BLE蓝牙协议栈过程BLEv1.2
- 全球最低功耗蓝牙单芯片DA14580的软件体系 -层次架构和BLE消息事件处理过程
- Android事件处理之四 Handler消息传递机制
- Linux网络协议栈之数据包处理过程(非技术人员勿看)
- Linux网络协议栈之数据包处理过程(非技术人员勿看)
- ZigBee 中 z-Stack协议中的任务、事件、消息处理流程
- 从SetTimer看Windows消息处理机制
- 从SetTimer看Windows消息处理机制 .
- 从SetTimer看Windows消息处理机制
- VB.NET使用API技巧讲解
- 微服务的优缺点
- Java Hessian小试(转)
- Git远程操作详解
- 而他不能这样做 许多影子纤尘不染的别去
- ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制
- iOS学习,秒表计时
- 错误error C2665: 'operator new' : none of the 5 overloads could convert all the argument types
- 饮食养生无限度补充营养非合理
- JAXB完成XML与Java对象的互转
- java基础
- android进程 清理及activity栈管理
- 春季皮肤干燥要多吃什么菜?
- ajax例子