wrap_platform_reset处理器

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

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

你好Dialog_Support团队,

固件的执行几分钟后,设备将进入arch_system.c的wrap_platform_reset处理程序。

我的设备进行角色切换操作。它使用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已收到,我采取进一步行动。我对广告串接收数据的进一步处理定时器0和定时器2采用PWM。除了这个我没有进行任何额外的功能。

现在,如果我运行发现工具包中的固件,几分钟(约5-7)执行停止后,去wrap_platform_reset处理程序。这只有当我收到user_on_adv_report_ind功能的数据并进行进一步的操作情况。如果我不上收到的数据进行进一步的行动,那么固件不会去wrap_platform_reset处理程序。你可以让我知道原因是什么,什么是该解决方案的原因是什么?

感谢和问候,
前腿帕特尔

设备:
PM_Dialog
离线
最后一次露面:9小时36分钟前
员工
加入时间:2018年2月8日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
离线
最后一次露面:9小时36分钟前
员工
加入时间:2018年2月8日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.当在开发工具包和自定义板上运行同一个项目时,会有不同的行为吗?
- 是的。在开发工具包,它运行良好。但是定制电路板是stropped广告的时间变量量之后(从15分钟到2小时)。但是其他的SDK对前码。ble_app_peripheral,的Blinky,定时器0 PWM运行与定制电路板的罚款。

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

带着敬意,
前腿帕特尔

PM_Dialog
离线
最后一次露面:9小时36分钟前
员工
加入时间:2018年2月8日11:03
嗨,

嗨,

只是为了澄清一些事情的时候,我觉得我失去了你一秒钟,你提到有15分钟或用2小时的运行,但运行这个对开发套件运行良好后,您的自定义设备stucks?也只有你看到断言在wrap_platform_reset()函数发生调试会话期间您的定制电路板?那是对的吗 ?你有没有证实,运行在平台复位功能再次闪光设备stucks的FW什么时候?当设备处于wrap_platform_reset断言指令被执行之前卡住或通过拨动一个GPIO您可以通过热调试器附加做到这一点。

由于PM_dialog