你好,
我目前正在使用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采样。
布尔
cyibin.
我理解app_easy_timer不会让我到2khz采样。但是,即使我使用具有最低可能时间单元10ms的应用程序易于计时器不起作用。以下是使用app_easy_timer的编辑部分。当App_peripheral_ctrl_timer_delay设置为2个时间单位时,它适用于Fine,但使用1后不久断开连接。
以下是使用Timer0而不是App_easy_Timer的编辑部分,该零件应该能够更快地采样2kHz。但是,当使用App_easy_Timer时,我可以获得相同的断开连接并呼叫platform_reset_func,当时计时器0或低于10ms间隔时。这里的时间间隔设置为20ms,它工作正常。但是,如果您要将重新加载到1000(5ms),例如它将断开连接和调用platform_reset_func。user_cust1_impl.c中的其余部分在这两个例子中都是相同的。
谢谢!
只是为了避免误解,user_custs_impl文件之外的其余项目是SDK的外设蓝牙低电平示例。
嗨michael12344,
导致断开的原因是发送通知命令到SDK配置文件太频繁。
您应该使用ADC采样生成的数据,然后以较低的频率发送它们。
布尔
cyibin.
你好,
有没有办法来解决这个问题?如果数据可以连续地传出,则将是更理想的,而是将所有样本收集到发送数据。是否有另一种发送/接收数据的方法,这些方法会更好,或者可以像我想要的一样经常或近常进行?
谢谢
嗨michael12344,
τheplatform_reset_func()由platform_reset()调用,是由ROM代码实现的函数。您获得此断言的最可能原因是由于内存不足,因为您可能会尝试分配您永远不会消耗的消息。例如,如果要分配通知消息,并且您有一个小的连接间隔,则邮件堆叠堆积,直到连接事件到达,但在连接事件到达之前,使用大的连接间隔耗尽内存。哪个是您使用的连接间隔?
谢谢,PM_DIALOG.
你好,
是外围设备或中央设备上的连接间隔吗?我在user_peripheral.c和user_config.c中找到了以下内容,它看起来将10ms的最小和最大连接间隔设置为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.