您的位置:首页 > 其它

ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制

2014-06-16 15:22 225 查看
一 事件机制

每一个任务都会有很多种事件,包括系统消息、任务事件等等。

二 事件的触发启动

函数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() 发送消息的函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: