CC254x到CC2640
介绍
TI-RTOS是CC26xx设备上蓝牙低功耗项目的新操作环境。该软件是一个多线程环境,其中,协议栈、应用程序及其配置文件存在于不同的线程上。TI-RTOS具有与OSAL相似的功能,但实现它们的机制不同。本节介绍了在蓝牙低功耗协议栈之上开发应用程序时,TI-RTOS和OSAL之间的主要区别。虽然TI-RTOS的并入是主要架构的变化,但蓝牙低功耗API和相关程序与CC254x相似。
本节包括以下主题:
1.OSAL
2.用ICall分离的应用和协议栈
3.线程,信号量和队列
4.外围驱动程序
5.事件处理
这些差异大都是TI-RTOS独有的。本节将介绍这些差异以及它们与OSAL的关系。
OSAL
移植到TI-RTOS的一个重大变化是从OSAL环境中完全移除应用程序。虽然协议栈代码在自己的线程中使用OSAL,但应用程序线程只能使用在“ICallBleAPI.c”中定义的OSAL的API。许多功能,如“osal_memcpy,osal_memcmp和 osal_mem_alloc()”不可用。这些功能已被TI-RTOS,C运行时和ICall API所取代。比如,OSAL的“osal_mem_alloc()”被ICall API的“ICall_malloc()”取代等等。
用ICall分离的应用和协议栈
在CC2640蓝牙低功耗协议栈中,应用程序是与协议栈镜像不同的OSAL方法,它仅由单个镜像组成。这个分离的好处在ICall中有详细介绍。这种结构允许应用程序和协议栈的独立升级。
协议栈镜像的启动入口的地址在构建时由应用程序镜像知道,因此应用程序镜像知道协议栈镜像的启动位置。应用程序和协议栈之间的消息传递通过称为ICall的开发框架。(间接调用框架)此功能允许应用程序调用OSAL中使用的相同API,但由ICall解析并发送到协议栈进行处理。许多协议栈的功能被定义在 ICallBleAPI.c为应用程序透明地使用,而ICall则透明地处理协议栈的发送和接收。
线程、信号量和队列
与单线程操作系统(如OSAL)不同,TI-RTOS是多线程的,每个线程都有自定义优先级。TI-RTOS处理线程同步,为应用程序线程提供API,用于维护不同线程之间的同步。信号量是应用程序的主要同步源。信号量用于将事件消息传递给应用程序的事件处理器。
在蓝牙低功耗协议栈线程的上下文中运行的配置文件回调通过存储事件数据并在应用程序的上下文中发布应用程序的信号量来实现。类似地,在ISR上下文中运行的按键事件和时钟事件也会发出信号,将事件传递给应用程序。TI-RTOS独有的是,队列是应用程序如何按照事件的调用顺序处理事件,并从配置文件和协议栈运行回调函数。队列还提供事件处理的FIFO排序。示例项目可以使用队列来管理来自应用程序配置文件或GAP配置文件角色的内部事件(例如,Peripheral或Central)。ICall使用一个队列,它通过ICall API访问。
外围驱动程序
除了切换到基于RTOS的环境外,外设驱动程序代表了CC254x架构的重大变化。CC254x软件使用的任何驱动程序必须移植到相应的TI-RTOS驱动程序接口。
事件处理
类似OSAL,每个TI-RTOS任务具有实现了应用程序基本任务的两种功能:simple_peripheral_init()和 simple_peripheral_taskFxn()。
1.simple_peripheral_init()包含应用程序配置文件、GAP和GATT角色的ICall注册例程和初始化功能。通常在CC254x应用程序的START_DEVICE_EVT 事件的函数调用也在simple_peripheral_init()函数中进行。初始化包括设置应用程序应从配置文件和协议栈层接收的回调。
2.simple_peripheral_taskFxn()包含处理事件的无限循环。在循环进入并刚刚完成初始化之后,应用程序任务调用ICall_wait()阻塞其信号量,直到发生事件。
与CC254x应用程序的osal_set_event()类似,应用程序任务用simple_peripheral_clockHandler()设置事件之后用Semaphore_post(sem)发起应用程序的信号量,唤醒应用。另一种方法是使用simple_peripheral_enqueueMsg()排列消息来按照顺序处理事件。与CC254x应用程序的osal_start_timerEx()类似 ,您可以在使用Util_constructClock()的预定时间后使用时钟设置事件 。此函数还可以设置simple_peripheral项目中所示的周期性事件。
事件可以来自相同的任务,配置文件或协议栈。首先处理协议栈中的事件,并调用 与CC254x应用程序osal_msg_receive() 类似的ICall_fetchServiceMsg()。在回调函数中收到的内部事件和来自配置文件或GAP角色的消息必须被视为重入,并且也应在simple_peripheral_taskFxn()函数中处理。换句话说,处理应该在应用程序上下文中完成。在许多情况下,例如在GAP角色配置文件回调中,您必须将事件放在队列中以保留消息到达的顺序。
CC254x到CC2640相关推荐
- CC2540/CC2541/CC254x之OSAL操作系统抽象层
测试环境 协议栈版本:BLE-CC254x-1.4.0 开发环境IAR版本:IAR 8.20 硬件设备:CC2540/CC2541开发板 示例测试Demo工程:simpleBLEPeripheral工 ...
- 最新的CC2642R与CC2640、CC2640R2F有什么改进?
早在2016年,BLE 5.0协议便诞生了,BLE 5.0技术在市场上快速发展,因其比BLE 4.2拥有更远的通信距离,更高的速率,得到很多方案商的青睐. TI为顺应市场,也推出了支持BLE 5.0的 ...
- 【CC2640】CC2640架构及原理
CC2640和CC2640R2F的区别是什么? CC2640和CC2640R2F是低功耗蓝牙SOC的解决方案,两颗芯片的基本架构和工作原理相同,实现的功能略有不同. CC2640芯片组成? 主MCU( ...
- cc2640到cc2640R2F
前言 在蓝牙5协议发布之后,nordic率先推出了支持ble5.0协议的芯片nrf52840,配置之强大对于用了多年ti蓝牙芯片的我来说简直令人发指,256kram和1M flash的搭配完虐cc26 ...
- cmw测试ble_如何测试CC2640的BLE射频指标(一)
大家好 我是TI中国无线 半导体技术应用部门的 工程师Alvin Zhang 今天给大家介绍一下如何测试 TI的低功耗蓝牙芯片CC2640的低功耗蓝牙射频指标 基本上分成两个部分 第1个部分给大家介绍 ...
- CC2640 蓝牙动态切换广播数据
基于官方例程 ti\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\blestack\simple_periphe ...
- CC2640 看门狗配置
原文https://blog.csdn.net/zzfenglin/article/details/52253536 测试环境 协议栈版本:BLE-STACK V2.1 IAR开发环境版本:IAR f ...
- CC2640之看门狗
测试环境 协议栈版本:BLE-STACK V2.1 IAR开发环境版本:IAR for Arm 7.40 硬件设备:Amo-SmartRF v2.0 开发板(对应TI官方的SmartRF06EB 开发 ...
- CC254x简介-CC2541/CC2540
CC254x简介 CC254x系列芯片使用最为广泛的就是CC2540和CC2541,二者都是蓝牙4.0BLE低功耗芯片. CC2540简介 CC2540集成了2.4GHz射频收发器,是一款完全兼容80 ...
最新文章
- 日本地铁公益广告 拒绝三俗!
- mysql2008安装中文_Microsoft SQL Server 2008 R2 中文安装说明
- H.264软件解码器在PXA270平台上的优化
- OSChina 周四乱弹 ——因为穷和丑错过的体验
- iOS UITableView的使用 (选自oschina)
- org.springframework.web.client.RestClientException: Could not extract response
- java bigdecimal语法_Java Scanner hasNextBigDecimal()方法
- 已解决:如何使用IDEA生成java帮助文档java doc?
- 环境影响评价知识点整理
- centos下安装CH341驱动
- 文件版本转换( AutoCAD、3dMax、SketchUp高版本转低版本 )
- linux 同步北京时间_Linux系统同步系统时间为北京时间
- 1467 B. Hills And Valleys
- 计算机主机的声音线是哪个好,电脑显示器连接线哪种接口好|VGA、HDMI视频接口选哪个好...
- Node.js 获取本机Mac地址
- linux machine start,Linux中的MACH定义之MACHINE_START / MACHINE_END
- 域名和URL是什么?域名和IP是一一对应的吗?
- MySQL InnoDB Cluster部署
- C4D学习笔记2-动画-时间线及时间函数
- 关于零输入响应和零状态响应的想法