特征处理程序循环

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
5 posts / 0 new
最后一篇文章
里奇贝克
离线
最后一次见到:2个月3周前
已加入:2017-04-24 20:24
特征处理程序循环

你好,

我想建立一个处理程序特征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?

非常感谢

设备:
MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
嗨,richbk,

嗨,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

里奇贝克
离线
最后一次见到:2个月3周前
已加入:2017-04-24 20:24
嗨,MT\u 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?

非常感谢

MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
嗨,richbk,

嗨,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

里奇贝克
离线
最后一次见到:2个月3周前
已加入:2017-04-24 20:24
嗨,MT\u dialog,

嗨,MT\u dialog,

太谢谢你了,这正是我想要的。