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

一   事件机制

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

二   事件的触发启动

函数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处理过程看任务、事件、消息机制

时间: 2024-12-17 18:29:30

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

TI BLE协议栈软件框架分析

看源代码的时候,一般都是从整个代码的入口处开始,TI  BLE 协议栈源码也不例外.它的入口main()函数就是整个程序的入口,由系统上电时自动调用. 它主要做了以下几件事情: (一)底层硬件初始化配置 (二)创建任务并初始化任务配置 (三)检测并执行有效的任务事件 Main() 函数源码如下: 一:底层硬件初始化设置 75行,设置系统时钟,使能内存缓冲功能. 78行,关中断,刚启动时,系统运行不稳定,一般会首先关中断. 81行,硬件相关的I/O 口配置. 84行,初始化mcu 内部的flash

深入浅出低功耗蓝牙(BLE)协议栈

BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 协议栈框架 一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提.在深入BLE协议栈各个组成部分之前,我们先看一下BLE协议栈整体架构. 如上图所述,要实现一个BLE应用,首先需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己

zigbee 中的按键驱动的设置

对于按键驱动修改不错的博文:https://wenku.baidu.com/view/12e61922aef8941ea66e05b9.html https://blog.csdn.net/stone8761/article/details/79563594 此外,使用的TI BLE协议栈版本是1.3.2. KEY服务API KEY服务一共有7个API.分别是: HalKeyInit() HalKeyConfig() HalKeyRead() HalKeyEnterSleep() HalKeyE

BLE 蓝牙协议栈开发

1.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1) 2.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2) 3.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)

蓝牙4.0 BLE

读了N多文档,其中推荐的有: Webee的<蓝牙4.0是战演练> Ghostyu的 <BLE权威教程> 1:透穿实现: 利用TI的BLE包里的工程直接烧 上位设备用 central,下位设备用peripheral工程 做以下处理: central 的NPI初始化时添加uart CB,并在串口回调函数中 直接添加write char函数写进特征值(实现上位从串口接收并通过蓝牙发送), 使能特征值通知,并在通知处理事件中将数据从串口发送(实现上位的从蓝牙接受并从串口发送) periph

蓝牙4.0 BLE学习笔记

一.知识普及 1.蓝牙4.0分为两个部分: 1)Bluetooth Ready,兼容传统蓝牙的高速部分: 2)Bluetooth Smart,BLE(Bluetooth Low Energy),功耗低,速率低.最大传输速率4~5k字节/s: 2.BLE协议栈: 1)只是一个协议规范,BLE协议栈是该协议的代码实现:蓝牙组织SIG负责制定协议,芯片公司负责实现协议: 2)BLE协议栈是芯片公司预先编好的源码或者库: 3.CC2540/2541,CC254x就是一颗带有蓝牙功能的51单片机,BLE协

[蓝牙] 2、蓝牙BLE协议及架构浅析&amp;&amp;基于广播超时待机说广播事件

第一章 BLE基本概念了解 一.蓝牙4.0和BLE区别 蓝牙4.0是一种应用非常广泛.基于2.4G射频的低功耗无线通讯技术.蓝牙低功耗(Bluetooth Low Energy ),人们又常称之为BlueTooth Smart,是由SIG( the Bluetooth Special Interest Group) 在2010年6月起草,在原有标准的蓝牙4.0核心协议上添加的一种低功耗技术. 蓝牙低功耗不等同于蓝牙4.0,只是蓝牙4.0的一个分支.蓝牙4.0是蓝牙3.0+ HS(高速蓝牙)规范的

【BLE】CC2541之自己定义长短按键

本篇博文最后改动时间:2017年01月06日,11:06. 一.简单介绍 本文以SimpleBLEPeripheral为例,介绍怎样将普通IO口(P12)自己定义为长短按键,实现按键3S以内松开为短按键.3S之后松开为长按键. 注:本文加入按键方法不与协议栈的按键相冲突,协议栈自带的按键仍可正常使用. 二.实验平台 协议栈版本号:BLE-CC254x-1.4.0 编译软件:IAR 8.20.2 硬件平台:smart RF开发板(主芯片CC2541) 三.版权声明 博主:甜甜的大香瓜 声明:喝水不

【BLE】CC2541之加入自己定义任务

本篇博文最后改动时间:2017年01月06日,11:06. 一.简单介绍 本文介绍怎样在SimpleBLEPeripheralproject中.加入一个香瓜任务. (香瓜任务与project原有任务相互独立.互不影响) 二.实验平台 协议栈版本号:BLE-CC254x-1.4.0 编译软件:IAR 8.20.2 硬件平台:Smart RF(主芯片CC2541) 三.版权声明 博主:甜甜的大香瓜 声明:喝水不忘挖井人,转载请注明出处. 原文地址:http://blog.csdn.NET/feilu