解决Flash操作与BLE事件互斥问题:时间管理和事件调度

需积分: 0 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且依赖蓝牙功能的设备尤为重要,如物联网设备或嵌入式系统。