解决Flash操作与BLE事件互斥问题:时间管理和事件调度
需积分: 0 159 浏览量
更新于2024-08-05
收藏 615KB PDF 举报
本文档主要关注在使用BlueNRG-1/2芯片进行蓝牙低功耗(BLE)通信时,如何处理与Flash操作之间的互斥问题。由于Flash擦除操作过程中会暂时关闭中断,导致在该期间无线电功能可能会受到影响,例如失去蓝牙信号或设备死机。ST的官方软件开发工具包(SDK)虽然提供了访问Flash的示例,但在处理多连接、主从模式以及多种蓝牙事件的复杂应用场景时,确保Flash操作与蓝牙事件之间的同步变得尤为困难。
为了解决这个问题,作者建议采用以下策略:
1. **初始化与中断管理**:
- 设置radio中断活动掩码,启用关键的中断事件(如0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020),以确保在必要的时候能接收蓝牙事件。
- 重写aci_hal_end_of_radio_activity_event函数,每当有中断发生时,记录并创建一个空闲时间节点。
2. **双向链表管理**:
- 使用双向链表结构来跟踪待执行的Flash操作,如擦除和写入任务。这样可以确保在有足够空闲时间时,按照先进先出(FIFO)原则执行Flash操作,而不是立即执行。
- 另外,还维护一个空闲时间链表,用于检测何时设备处于无蓝牙事件的空闲状态,以便执行Flash操作。
3. **主循环中的调度**:
- 设计一个专门的Flash操作调度函数,定期检查系统是否拥有足够的空闲时间来执行下一个Flash操作。如果有,就从待执行链表中取出第一个任务并执行,然后更新链表。
4. **避免干扰**:
- 避免在蓝牙数据传输或其他关键操作期间执行Flash擦除等长时间操作,以免对蓝牙性能造成干扰。
通过以上策略,开发者可以有效地平衡Flash操作与BLE事件之间的交互,减少因Flash操作导致的蓝牙不稳定问题,提升系统的稳定性和效率。这对于需要频繁操作Flash且依赖蓝牙功能的设备尤为重要,如物联网设备或嵌入式系统。
2024-03-15 上传
2022-07-14 上传
2022-09-20 上传
2022-07-14 上传
点击了解资源详情
2022-07-14 上传
2021-09-28 上传
2022-09-23 上传
2021-09-30 上传
BJWcn
- 粉丝: 35
- 资源: 293
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍