你好,
我目前正在使用BLE外围设备的修改版本,尝试使用ADC对信号进行采样。我基本上用代码替换了adc_adcval1_timer_cb_handler中的代码,以从ADC而不是计数器读取值。我拥有的麻烦是对ADC处理程序函数的调用的时间。我需要在每秒2000Hz或2000个样本上进行样本。当我尝试在10毫秒处或低于10 ms的定时器时,我会断开连接,并且在几个调用ADC处理程序后调用Platform_reset_func函数。我尝试过App易于计时器,示例使用,我也尝试使用Timer0带回调方法。似乎似乎有同样的问题。我想知道关于我不知道的代码或软件的时机是否存在一些限制因素?还有什么样的事情导致呼叫平台_Reset func?
谢谢!
关键词:
设备:
嗨,迈克尔,
你能告诉我你的源代码吗?
到目前为止,我可以确认您,App_easy_timer API的时间单位是10ms,它不适用于2kHz采样。
Br
cyibin.
我理解app_easy_timer不会让我到2khz采样。但是,即使我使用具有最低可能时间单元10ms的应用程序易于计时器不起作用。以下是使用app_easy_timer的编辑部分。当App_peripheral_ctrl_timer_delay设置为2个时间单位时,它适用于Fine,但使用1后不久断开连接。
这里是使用timer0而不是app_easy_timer编辑的部分,应该能够更快的采样2Khz。然而,当timer0设置为或低于10ms间隔时,我将获得与使用app_easy_timer时相同的断开连接和调用platform_reset_func。在这里,间隔被设置为20毫秒,它工作得很好。但是,如果您将RELOAD更改为1000 (5ms),它将断开连接并调用platform_reset_func。在这两个示例中,user_cust1_implc的其余部分是相同的。
谢谢!
为了避免误解,user_custs_impl文件之外的项目其余部分是SDK中的外围Bluetooth低能耗示例。
嗨michael12344,
导致断开的原因是发送通知命令到SDK配置文件太频繁。
您应该首先存储ADC采样产生的数据,然后以较低的频率发送它们。
Br
cyibin.
你好,
有什么办法可以解决这个问题吗?如果数据可以连续输出,而不是收集所有的样本然后发送数据,那将是更理想的。有没有其他更好的发送/接收数据的方法,或者可以按照我的要求频繁或接近频繁地进行?
谢谢
嗨michael12344,
Τhe platform_reset_func()由platform_reset()调用,是一个由ROM代码实现的函数。产生此断言的最可能的原因是内存不足,因为您可能试图分配从未使用过的消息。例如,如果您正在分配通知消息,并且您有一个小的连接间隔,那么消息将被堆起来直到连接事件到达,但是如果连接间隔较大,则在连接事件到达之前就会耗尽内存。您使用的连接间隔是什么?
谢谢,PM_Dialog
你好,
连接间隔是在外围设备还是中心设备上设置的?我在user_peripheral.c和user_config.c中发现了以下内容,它们似乎设置了10ms到20ms的最小和最大连接间隔。
嗨michael12344,
可以把连接间隔(.intv_min和.intv_max)改大一点吗?
谢谢,PM_Dialog
你好,
我尝试将IntV_min和Intv_max更改为更大的值30-45ms和100-160ms。但是,问题似乎仍然存在,因为仍然调用platform_reset_func()。还有什么我可以尝试提高数据吞吐量吗?
嗨michael12344,
可能,在您的应用程序中,每个连接后,可能会有一些内存泄漏丸。当WRAP_PLATFORM_RESET()发生时,请确保错误代码是reset_mem_alloc_fail,您将必须调试这一点以便找到它。此外,检查ADC读取期间是否存在任何挂起的消息,并确保您在处理消息时会收到您获得的消息,或者您正在分配它们应该被释放的数据。例如,如果您正在分配消息,则在分配消息,以便在有一个连接的情况下将数据发送到通知后,设备最终会用完内存,并且如果设备运行内存,则会导致设备重置。尝试定义和增加DA1458x_config_advanced的db_heap_sz,例如,您可以放置2048的值。
谢谢,PM_Dialog