解决Flash操作与BLE事件互斥问题:时间管理和事件调度
需积分: 0 138 浏览量
更新于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 上传
2023-06-06 上传
2023-05-19 上传
2023-06-06 上传
2023-05-19 上传
2023-06-06 上传
2023-05-25 上传
2023-04-08 上传
![](https://profile-avatar.csdnimg.cn/bde2aa2b0dc743baa0a58cb032e28d17_weixin_35817545.jpg!1)
BJWcn
- 粉丝: 33
- 资源: 294
最新资源
- 解决本地连接丢失无法上网的问题
- BIOS报警声音解析:故障原因与解决方法
- 广义均值移动跟踪算法在视频目标跟踪中的应用研究
- C++Builder快捷键大全:高效编程的秘密武器
- 网页制作入门:常用代码详解
- TX2440A开发板网络远程监控系统移植教程:易搭建与通用解决方案
- WebLogic10虚拟内存配置详解与优化技巧
- C#网络编程深度解析:Socket基础与应用
- 掌握Struts1:Java MVC轻量级框架详解
- 20个必备CSS代码段提升Web开发效率
- CSS样式大全:字体、文本、列表样式详解
- Proteus元件库大全:从基础到高级组件
- 74HC08芯片:高速CMOS四输入与门详细资料
- C#获取当前路径的多种方法详解
- 修复MySQL乱码问题:设置字符集为GB2312
- C语言的诞生与演进:从汇编到系统编程的革命