wrap_platform_reset处理程序

了解更多常见问题解答教程

5个帖子/ 0个新帖子
最后一篇
前腿帕特尔
离线
最后一次露面:两年前,一周前
加入:2017-03-29专机
wrap_platform_reset处理程序

你好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;

空白user_adv_stopped (uint8_t状态)
{
arch_set_pxact_gpio ();
//将GAP角色改为中心角色
广告= false;
user_app_configuration_func (GAP_CENTRAL_MST);
}

空白user_scan_complete (uint8_t状态)
{
广告= true;
user_app_configuration_func(gap_peripheral_slv);
}

空白user_app_on_set_dev_config_complete ()
{
arch_set_pxact_gpio ();
如果(广告)
{
app_easy_gap_non_connectable_advertise_start();
}
else //准备扫描
{
//开始扫描和计时器以在一段时间后停止它
user_scan_start ();
user_stop_scan app_easy_timer (200);
}
}

void user_on_adv_report_ind(结构gapm_adv_report_ind const * param)
{
volatile静态uint8_t param_data[ADV_DATA_LEN];
param_data [23] = param-> report.data [23];
param_data [24] = Param-> Report.data [24];
param_data[25] =参数- > report.data [25];
param_data[26] =参数- > report.data [26];
}

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

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

感谢和问候,
前腿帕特尔

设备:
PM_DIALOG.
离线
最后一次露面:8小时1分钟前
员工
加入:2018-02-08 11:03
嗨,前腿帕特尔

嗨,前腿帕特尔

您可以澄清从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小时1分钟前
员工
加入:2018-02-08 11:03
嗨,前腿帕特尔

嗨,前腿帕特尔

如前所述wrap_platform_reset发生的最明显的原因是由于内存分配失败,这意味着有一个内存泄漏你的西南,你分配数据的地方和你永远不会释放他们(您可以验证在函数的参数错误,应该RESET_MEM_ALLOC_FAIL)。关于应用程序的最佳堆这是你应该尝试通过改变大小的堆da1458x_config_advanced.h文件,没有办法知道应该堆的确切大小,您的应用程序应该有,但是如果我的假设是正确的,有一个内存泄漏,增加你的堆不会帮助的,它只会增加设备的时间最终会停止在一个平台复位。从app_on_adv_report_ind回调中,我没有看到任何可能导致这种情况的可疑情况(我没有看到任何可能导致这种行为的内存分配)。从一开始设备被卡在第一个6分钟,现在卡在15或20分钟时,从flash运行,堆配置相同的方式?或者你做了什么调整?当在开发工具包和自定义板上运行同一个项目时,会有不同的行为吗?你还提到你的波特率,你在使用UART,如果你在使用UART,你在使用arch_printf()功能吗?

由于PM_dialog

前腿帕特尔
离线
最后一次露面:两年前,一周前
加入:2017-03-29专机
你好PM_Dialog,

你好PM_Dialog,

感谢您的答复。

1.从一开始设备被卡在第一个6分钟,现在卡在15或20分钟时,从flash运行,堆配置相同的方式?
- 是,堆大小在这种情况下都相同。

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

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

带着敬意,
前腿帕特尔

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

嗨,

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

由于PM_dialog