特征处理循环

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个职位/ 0个新职位
最后一篇
Richbk.
离线
最后一次露面:6个月,4个星期前
加入:2017-04-24 20:24
特征处理循环

你好呀,

我试图设置一个特征处理器,当提供一个值01时,它开始播放一个曲调,直到提供一个值00。我使用ble_app_peripheral作为指南,并修改了LED的开/关状态,以开始我想要的while循环。我需要帮助的是退出while循环的最佳方法,或者是更好的方法。根据我的理解,while循环中的while处理程序实际上不会做任何事情,对吗?

提前谢谢了

设备:
mt_dialog.
离线
最后一次露面:6个月3周前
职员
加入:2015-06-08 11:34
嗨Richbk,

嗨Richbk,

我不确定我完全明白你想要做什么,你会在一个特征中编写一个值,这将触发一个处理器,它会在循环中保持手臂(使调整会继续播放)?我也无法理解你的意思,“处理程序实际上不会做任何事情”。如果通过编写特征触发该处理程序,并且在该处理程序中有一段时间循环,则手臂将继续在该处理程序中执行while循环,只要条件返回true。这可以造成不同类型的问题,具体取决于要完成的时间,以完成执行。因此,如果您将手臂保持在循环的同时,则不会执行调度程序(RWIP_Schedule()函数),这意味着您将要丢失BLE事件,因此您不会更新看门狗(以防您想要使用它,但是这是你的最少的问题)。如果您想在没有任何BLE问题的情况下播放该调整,则必须触发操作(调谐播放),然后使用app_on_ble_powered()或app_on_system_power()回调函数以驱动您的演讲者(请查看UM-B-051 DA1458X软件平台参考文献.pdf在第7.2.1段中)。无论如何,因为我不确定我完全理解你的问题,请告诉我是否有什么我误解了。

由于MT_dialog

Richbk.
离线
最后一次露面:6个月,4个星期前
加入:2017-04-24 20:24
嗨mt_dialog,

嗨mt_dialog,

非常感谢您花时间回复。

尝试更多地解释我想做什么,我基本上构建了一个与手机相关的设备。当电话圈时,设备使用PWM播放调谐,当手机停止振铃时,设备停止播放曲调。要开始播放,我正在使用特征(如LED示例),当它设置为01时,它播放调谐,并且当它设置为00时,它停止播放调谐。

正如您所建议的,问题是当我阅读特征并开始曲调的while循环时,系统卡在循环中,没有方法检测特征变化,因此打破循环。

考虑到您的建议将使用app_on_ble_powered()回调为我需要的工作?我会把调整循环放在回调函数中,并在整个调谐循环中使用标志来确定特性是否已更改以阻止调谐播放?

非常感谢

mt_dialog.
离线
最后一次露面:6个月3周前
职员
加入:2015-06-08 11:34
嗨Richbk,

嗨Richbk,

由于您想生成PWM,为什么不使用580的定时器以便这样做,并刚刚将其设置并在写入特性时触发计时器。通过toggliing gpios进入一段时间的循环,你不会产生pwm(我想这就是你想在你的循环中做什么,有一些延迟,在写作的时候),即使使用app_on_ble_powered,你也不会能够控制GPIO切换的频率将经过该功能,并且您也不能延迟执行代码的代码,以获得适当的时间。如果您不想使用硬件定时器和PWM功能,并且您想要切换GPIO,您也可以使用内核定时器,但请注意它们具有10ms的精度,并且它们与PWM专用定时器不准确。因此,我的建议是使用Timer0和PWM功能,并且当编写IAS特性时,Smart_Tag项目使用完全相同的方案(检查user_proxr_alert_start()函数)(您必须禁用睡眠状态当触发PWM时,进入睡眠模式)。

由于MT_dialog

Richbk.
离线
最后一次露面:6个月,4个星期前
加入:2017-04-24 20:24
嗨mt_dialog,

嗨mt_dialog,

非常感谢你,似乎是我正在寻找的。