我的背景是 EE ,这是我的第一个 StackO 问题(双重打击),所以如果问题表述不当,我提前道歉。
我已经扩展了 BTstack 库中的示例程序(移植到 Raspberry Pi 3b+ 的 C 语言中的“le_data_channel_server”),允许它接收、确认和响应随附的 iOS 应用程序发送给它的 L2CAP 数据包。我正在处理的项目要求实现“超时”功能,如果程序在过去 40 毫秒内没有收到 L2CAP 数据包,它会执行某些操作。iOS 应用程序在它打算这样做时每 30 毫秒可靠地发送 L2CAP 数据包。示例 pi 程序基本上由一个带有许多嵌套 switch case 的 packet_handler 函数组成。
我尝试通过调用 btstack 函数“btstack_run_loop_get_time_ms()”来实现该功能,该函数在“L2CAP_DATA_PACKET”案例开始时提供自程序开始运行以来经过的时间,以记录在变量中接收数据包的时间“time1”,当在“time2”中接收到后续数据包时,使用标志变量和 if 语句交替更新哪个时间变量。将两者相减可以很好地跟踪连续接收数据包时经过的时间。但是,我只关心没有收到数据包的情况,因此当没有达到“L2CAP_DATA_PACKET”的情况时,我知道这个实现不会真正按照我需要的方式工作。有没有一种方法可以让我在后台运行一个计时器,1)可以在收到数据包时重置,2)在 40 毫秒过去后触发中断或更改全局变量而没有达到“L2CAP_DATA_PACKET”?依赖到达“L2CAP_DATA_PACKET”的时间是一个坏主意,因为程序可能会在其他区域花费时间,而它仍在接收数据包?任何和所有的建议/建议将不胜感激。达到是一个坏主意,因为该程序可能会在仍在接收数据包的同时在其他区域花费时间?任何和所有的建议/建议将不胜感激。到达是一个坏主意,因为程序可能会在仍在接收数据包的同时在其他区域花费时间?任何和所有的建议/建议将不胜感激。