你好,
我想建立一个处理程序特征when a value of 01 is supplied, it starts playing a tune that loops until a value of 00 is supplied. I'm using the ble_app_peripheral as a guide and have modified the LED on/off state to begin the while loop I want. What I need help on is the best way to exit the while loop or perhaps a better way to approach this. From my understanding whilst in the while loop, the handler won't actually do anything, is that correct?
非常感谢
设备:
嗨,richbk,
我不确定我是否完全理解您要做的事情,您将在特征中写入一个值,这将触发一个处理程序,该处理程序将保持手臂在while循环中(以便曲调继续播放)?我也不明白你所说的“处理者实际上什么都不会做”是什么意思。如果通过编写特征触发该处理程序,并且该处理程序中有while循环,那么只要while条件返回true,ARM就会继续执行该处理程序中的while循环。这可能会导致不同类型的问题,具体取决于while完成执行所需的时间。因此,如果您将ARM保持在while循环中,就不会执行scheduler(rwip\u schedule()函数),这意味着您将丢失不可编辑的事件,也不会更新watchdog(以防您想使用它,但这是您的最小问题)。如果您想长时间播放该曲调而不出现任何BLE问题,则必须触发操作(播放该曲调),然后使用app\u on BLE\u powered()或app\u on\u system\u power()回调函数来驱动扬声器(请查看UM-B-051 da1458x软件平台)参考第7.2.1段中的.pdf)。无论如何,因为我不确定我是否完全理解你的问题,让我知道如果有什么我误解了。
Thanks MT_dialog
嗨,MT\u Dialog,
非常感谢您抽出时间回复。
为了进一步解释我要做的事情,我基本上是在构建一个连接到手机的设备。当手机铃声响起时,设备将使用PWM播放一首曲子,当手机停止铃声响起时,设备将停止播放该曲子。为了开始播放曲子,我使用了一个特性(如LED示例),当设置为01时播放曲子,当设置为00时停止播放曲子。
As you've suggested the issue is that when I read the characteristic and start the while loop for the tune, the system is stuck in the loop without a way to detect the characteristic change and therefore break out of the loop.
考虑到这一点,您建议使用app\u on \u ble\u powered()回调是否能满足我的需要?我是否将tune循环放在回调函数中,并在整个tune循环中使用标志来确定特性是否已更改以停止播放tune?
非常感谢
嗨,richbk,
既然你想产生一个脉宽调制,你为什么不使用定时器的580为了这样做,只是设置它和触发定时器时的特点是写。通过将gpio切换到while循环中,您将无法生成PWM(我假设这是您希望在while循环中执行的操作,在写入特征时,会有一些延迟),即使使用ble-powered上的app-u,您也无法控制GPIO切换通过该函数的频率,而且您不能仅仅延迟代码的执行以获得正确的时间。如果您不想使用硬件定时器和PWM功能,并且只想切换GPIO,您也可以使用内核定时器,但请注意,它们的精度为10ms,不如PWM专用定时器准确。因此,我的建议是使用timer0和PWM功能,并且在编写IAS特征时,智能标记项目(检查用户\u proxr \u alert \u start()函数)也使用完全相同的方案(您还必须禁用睡眠,以便在触发PWM时不进入睡眠模式)。
Thanks MT_dialog
嗨,MT\u dialog,
太谢谢你了,这正是我想要的。