你好呀,
我试图建立一个特征处理程序,当提供一个值为01时,它开始播放一个循环,直到提供一个值为00。我使用ble_app_peripheral作为一个指南,并修改了LED开/关状态,以开始我想要的while循环。我需要帮助的是退出while循环的最好方法,或者可能是更好的方法。根据我对while循环的理解,这个处理程序实际上不会做任何事情,对吗?
提前谢谢了
嗨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
嗨mt_dialog,
非常感谢您花时间回复。
尝试更多地解释我想做什么,我基本上构建了一个与手机相关的设备。当电话圈时,设备使用PWM播放调谐,当手机停止振铃时,设备停止播放曲调。要开始播放,我正在使用特征(如LED示例),当它设置为01时,它播放调谐,并且当它设置为00时,它停止播放调谐。
正如您所建议的,问题是当我读取特性并启动while循环时,系统会卡在循环中,没有方法检测特性变化,从而中断循环。
考虑到您的建议将使用app_on_ble_powered()回调为我需要的工作?我会把调整循环放在回调函数中,并在整个调谐循环中使用标志来确定特性是否已更改以阻止调谐播放?
非常感谢
由于您想生成PWM,为什么不使用580的定时器以便这样做,并刚刚将其设置并在写入特性时触发计时器。通过toggliing gpios进入一段时间的循环,你不会产生pwm(我想这就是你想在你的循环中做什么,有一些延迟,在写作的时候),即使使用app_on_ble_powered,你也不会能够控制GPIO切换的频率将经过该功能,并且您也不能延迟执行代码的代码,以获得适当的时间。如果您不想使用硬件定时器和PWM功能,并且您想要切换GPIO,您也可以使用内核定时器,但请注意它们具有10ms的精度,并且它们与PWM专用定时器不准确。因此,我的建议是使用Timer0和PWM功能,并且当编写IAS特性时,Smart_Tag项目使用完全相同的方案(检查user_proxr_alert_start()函数)(您必须禁用睡眠状态当触发PWM时,进入睡眠模式)。
非常感谢你,似乎是我正在寻找的。
嗨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
嗨mt_dialog,
非常感谢您花时间回复。
尝试更多地解释我想做什么,我基本上构建了一个与手机相关的设备。当电话圈时,设备使用PWM播放调谐,当手机停止振铃时,设备停止播放曲调。要开始播放,我正在使用特征(如LED示例),当它设置为01时,它播放调谐,并且当它设置为00时,它停止播放调谐。
正如您所建议的,问题是当我读取特性并启动while循环时,系统会卡在循环中,没有方法检测特性变化,从而中断循环。
考虑到您的建议将使用app_on_ble_powered()回调为我需要的工作?我会把调整循环放在回调函数中,并在整个调谐循环中使用标志来确定特性是否已更改以阻止调谐播放?
非常感谢
嗨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
嗨mt_dialog,
非常感谢你,似乎是我正在寻找的。