wrap_platform_reset处理程序

学到更多常见问题解答教程

5个帖子/ 0新
最后一篇
Ruchi Patel.
离线
最后一次露面:2年前一周前
加入:2017-03-29 10:50
wrap_platform_reset处理程序

hello dialog_support团队,

在执行固件几分钟后,设备进入WRAP_PLATFORM_RESET HARDLER的ARCH_SYSTEM.C。

我的设备执行角色交换机操作。它使用app_easy_timer对时间分享进行中央和外设角色。在这里,我正在附加角色交换机部分的代码片段。我的申请也没有建立任何类型的连接。它接收User_Advertise_Data并基于接收的数据,它执行进一步的操作。要读取广告数据字符串,我已使用user_on_adv_report_ind函数。我还附上了user_on_adv_report_ind函数的代码片段。

uint8_t广告= true;

void user_adv_stopped(uint8_t状态)
{
ARCH_SET_PXACT_GPIO();
//将差距角色更改为中央
广告= false;
user_app_configuration_func(gap_central_mst);
}

void user_scan_complete(UInt8_t状态)
{
广告=真;
user_app_configuration_func(gap_peripheral_slv);
}

void user_app_on_set_dev_config_complete()
{
ARCH_SET_PXACT_GPIO();
如果(广告)
{
app_easy_gap_non_connectable_advertise_start();
}
否则//准备扫描
{
//开始扫描和计时器以在一段时间后停止它
user_scan_start();
app_easy_timer(200,user_stop_scan);
}
}

void user_on_adv_report_ind(struct gapm_adv_report_ind const * param)
{
易失性静态UINT8_T PARAM_DATA [ADV_DATA_LEN];
param_data [23] = param-> report.data [23];
param_data [24] = Param-> Report.data [24];
param_data [25] = param-> report.data [25];
param_data [26] = param-> report.data [26];
}

取决于我在Param_data中收到的值,我正在采取进一步的行动。我使用了Timer0和Timer2的PWM以进一步处理在广告串中接收的数据。除此之外,我没有执行任何额外的功能。

现在,如果我在发现套件上运行固件,请在几分钟后(大约5-7)执行停止并转到Wrap_platform_Reset处理程序。只有在user_on_adv_report_ind函数中收到任何数据并执行进一步操作,才会发生这种情况。如果我没有对接收的数据执行进一步的操作,则固件不会转到Wrap_platform_Reset处理程序。你能告诉我它发生的原因吗?这是什么解决方案?

感谢致敬,
Ruchi Patel.

设备:
PM_DIALOG.
离线
最后一次露面:8小时3分钟前
员工
加入:2018-02-08 11:03
嗨Ruchi Patel,

嗨Ruchi Patel,

您可以澄清从User_On_Adv_Report_ind函数收到数据后执行的操作吗?Wrap_Platform_Reset处理程序命中的可能原因如下:

1.高量的UART流量来形成主机。
2.印刷太多内容VI Arch_Printf,Malloc将失败,并调用平台重置功能Wrap_Platform_Reset
3.设备运行耗尽内存,如果设备运行过内存,则会导致设备重置

如果问题与绑定问题的内存有关,那么您应该增加堆大小。否则,您应该控制UART波特率。

谢谢,PM_DIALOG.

PM_DIALOG.
离线
最后一次露面:8小时3分钟前
员工
加入:2018-02-08 11:03
嗨Ruchi Patel,

嗨Ruchi Patel,

正如已经提到的那样最明显的Wrap_platform_Reset的原因是由于内存分配失败,这意味着您的SW中存在内存泄漏,您将在某处分配数据,并且您从未释放它们(您可以在参数错误中验证函数应该是reset_mem_alloc_fail)。关于您的应用程序的最佳堆这是您应该通过更改DA1458x_config_Advanced.h文件中的堆的大小进行实验的东西,无法确切地知道应用程序所需的堆的确切大小, but in case my assumption is correct and there is an memory leakage, increasing your heap won’t help, it will just increase the time that the device would eventually halt in a platform reset. From the app_on_adv_report_ind callback i don’t see anything suspicious that can cause this (i don’t see any memory allocation that can cause this kind of behavior). Since at the beginning the device was stuck in the first 6 min and now stucks in 15 or 20 minutes when running from flash, are the heaps configured the same way? or you have you made any adjustments ? Is there a different behavior when running the same project on a dev kit and on a custom board ? Also you mention your baud rate, are you using UART and if you are using the UART are you using the arch_printf() functionality ?

谢谢pm_dialog.

Ruchi Patel.
离线
最后一次露面:2年前一周前
加入:2017-03-29 10:50
你好pm_dialog,

你好pm_dialog,

感谢您的答复。

1.由于在开始时,设备陷入了前6分钟,现在从闪光灯运行时陷入了15或20分钟,是相同的堆的堆?
- 是,堆大小在这种情况下都相同。

2.在DEV套件和定制板上运行相同的项目时是否有不同的行为?
- 是的。在开发套件上它运行罚款。但在定制板上,在可变时间(15分钟到2小时)后,它是界面的广告。但其他SDK的EX代码。BLE_APP_PERITERALAL,BLINKY,TIMER0 PWM与定制板运行精细。

3.您还提到了您的波特率,您使用的是UART,如果您使用的是使用ARCH_PRINTF()功能?
- UART的波特率为115200.我正在使用UART执行ARCH_PRINTF(),但现在我不使用ARCH_PREMPF()功能。

带着敬意,
Ruchi Patel.

PM_DIALOG.
离线
最后一次露面:8小时3分钟前
员工
加入:2018-02-08 11:03
嗨,

嗨,

只是为了清除一些事情,我想我失去了一秒钟,你提到你的自定义装置在15分或2小时的操作后卡住,但在Dev套件上运行这个操作罚款?在调试会话期间,也只在您的自定义板上,您可以看到断言发生在Wrap_platform_reset()函数中?那是对的吗 ?您是否验证了从闪存运行FW时,设备在平台重置功能中再次粘在一起?您可以通过热附加调试器来执行此操作,而在执行WRAP_PLATFORM_RESET中的断言指令之前,设备将被卡住或通过切换GPIO。

谢谢pm_dialog.