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

转载 2015年11月21日 13:22:55




一   事件机制

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

二   事件的触发启动

  函数1:启动一个定时器、定时delaytime时间、之后触发 TaskID 的event事件.延时时间以ms为单位。

osal_start_timerEx( TaskID, event , delaytime );

      函数2:置 tasksEvents[]数组的事件标志位为1、系统轮询这个数组确定是否触发事件

    osal_set_event( simpleBLEPeripheral_TaskID, SBP_START_DEVICE_EVT );

三  消息机制之创建发送

   

//给消息定义一个结构体并分配
   

//设置结构体
         msgPtr->hdr.event = KEY_CHANGE;
      msgPtr->state = state;
              msgPtr->keys = keys;
             //发送消息
     

二  消息机制之接收处理

  if ( events & SYS_EVENT_MSG )
  {
    uint8 *pMsg;
   
 )// 接收消息
    {
     
)//处理消息
     
) //删除消息空间
    }
    return (events ^ SYS_EVENT_MSG);
 
     

二  按键处理过程:

    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 */    

 void InitBoard( uint8 level )
   
---->  HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
/这个函数对,按键相关的寄存器设置为中断模式(协议栈默认的情况下是使用中断方式处理这个按键)

//同时向协议栈注册回调函数 OnBoard_KeyCallback ();

 osal_init_system() ;

-----> osalInitTasks(); //各任务初始化

 

------> 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 )

  

  - ->( pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL); //这里调用按键回调函数处理按键

--->OnBoard_KeyCallback()--处理键值向注册按键服务的任务发生消息

        ---> OnBoard_SendKeys  () 

--->osal_msg_send()  发送消息的函数

低功耗蓝牙BLE之连接事件、连接参数和更新方法

在一个连接当中,主设备会在每个连接事件里向从设备发送数据包

CC2540/CC2541/CC254x之OSAL消息队列

OSAL维护了一个消息队列,每一个消息都会被放到这个消息队列中去

【BLE】CC2541之添加自定义任务

本文介绍如何在SimpleBLEPeripheral工程中,添加一个香瓜任务

CC2530之DHT11温湿度测量

DHT11数字温湿度传感器内部含一个电阻式感湿元件和一个NTC(Negative Temperature Coefficient,负温度系数)测温元件,与一个高性能8位单片机相连接。实物图如下图所示:...

BLE 4.0 CC2540 协议栈之物理层

RF 参数: 1.工作在2.4GHZ ISM 频段; 2.GFSK(高斯频移键控)调制方式; 3.有多达40个通信信道,信道间距2MHZ。这40个信道中有三个固定的广播信道,避开了802.11协...

CC2640R2F BLE5.0 蓝牙协议栈GAPRole 任务

GAPRole 任务 GAP层始终处于下面4种角色之一运行: Broadcaster(广播者):设备发送不可连接的广播。Observer(观察者):设备扫描广播但无法启动连接。Peripheral...

CC254X BLE协议栈实验教程

  • 2016年09月20日 10:42
  • 11.8MB
  • 下载

【BLE】CC2541之解析协议栈的晶振初始化过程

本文以SimpleBLEPeripheral为例,解析协议栈的晶振初始化过程

全球最低功耗蓝牙单芯片DA14580的软件体系 -层次架构和BLE消息事件处理过程

网络罕见的蓝牙单芯片DA14580开发分享 -层次架构和BLE消息事件处理过程

BLE 协议栈 之"消息传递""事件触发"谁与争锋

BLE 协议栈中对于触发任务事件大可分为三种方式: 1 通过设置一个“软件定时器”,当其溢出时触发事件。osal_start_timerEx()—osalTimerUpdate()— osal_set...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制
举报原因:
原因补充:

(最多只允许输入30个字)