你好,
我目前正在使用BLE外设示例的一个修改版本来尝试用ADC采样信号。我基本上已经用从ADC而不是计数器读取值的代码替换了adc_adcval1_timer_cb_handler中的代码。我遇到的问题是调用adc处理器函数的时间。我需要采样我的信号在2000Hz或2000采样每秒。当我试图获得计时器在10毫秒或以下时,我得到断开连接和platform_reset_func函数在调用adc处理器几次后被调用。我已经尝试了应用程序简单定时器的例子已经使用,我也尝试了使用timer0回调方法。两者似乎都有同样的问题。我想知道是否有一些限制因素与代码或软件本身的时间,我没有意识到?还有什么类型的事情导致调用platform_reset func?
谢谢!
关键词:
设备:
迈克尔,
你能给我看一下你的源代码吗?
目前我可以确认的是,app_easy_timer API的时间单位是10ms,这在2Khz采样时是不合适的。
布尔
CYibin
我理解app_easy_timer不会让我到达2Khz采样。然而,即使当我使用app easy定时器的最低可能的时间单位10毫秒也不起作用。下面是使用app_easy_timer编辑的部分。当APP_PERIPHERAL_CTRL_TIMER_DELAY设置为2个时间单位时,它工作得很好,但在使用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读取期间是否发送了任何挂起的消息,并确保正在使用在处理消息时获得的消息,或者正在分配应该释放它们的数据。例如,如果你取样ADC,你分配消息,以便在有一个连接时通过通知发送数据,设备最终将耗尽内存,如果设备耗尽内存,这将导致设备重置。尝试从da1458x_config_advanced定义并增加DB_HEAP_SZ,例如,您可以将值设置为2048。
谢谢,PM_DIALOG.