platform_reset论点

8个职位/0个新职位
最后一篇文章
蛇毒素
离线
最后一次见到:1年5个月前
已加入:2015-08-15 19:34
platform_reset论点

How do I get the reset reason after the DA14580 resets, loads the otp to SysRam and starts to run? I have the application flags set and otp code is loaded and executed immediately. I want to know if it is a hard reset or soft reset and if possible, I'd like to pass a custom value for the reason for the reset.

设备:
MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
Hi NScherdin,

Hi NScherdin,

没有标准的方法可以做到这一点,也没有专门的机制可以应用,您可以尝试应用一种方案,在保留内存区域中保留一个变量(取决于系统RAM是否在睡眠时关闭),在一个HW\u reset代码中初始化它,并通过更改代码传递的处理程序中变量的状态代码来根据您的重置更改状态。Hardfault、platform\u reset、NMI\u Handler等。如果您使用保留内存区域,您应该记住,每次通过SystemInit()函数重新启动系统时,它都被设置为零,您必须调整该函数,以便在发生重置时不重新初始化以前存储的重置原因。

谢谢你的对话

蛇毒素
离线
最后一次见到:1年5个月前
已加入:2015-08-15 19:34
Can you explain how the

你能解释一下platform\u reset参数是如何使用的吗?它似乎是由ROM在复位后用来确定如何加载用户程序。

After some digging it appears the error value sent to platform reset is provided in system.init(). It is used by rwip_init(error). This would indicate there is already a mechanism that is passing this error state from the previous running instance to the new instance. What I need to know is can I send my own value instead of one of the predefined ones:

///FW检测到的可能错误
#定义重置无错误0x00000000
#定义重置内存分配失败0xf2f2

/// Reset platform and stay in ROM
#定义复位到ROM 0xA5A5A5
///重置平台并重新加载FW
#定义重置和加载0xc3c3

#在更新0x11111111后定义重置

我可以修改系统初始化来检查错误值,如果它是我的值,则将错误代码设置回RESET\u NO\u error,然后设置我自己的变量来告诉我的主程序如何处理。

我这样做的原因是为了节省代码空间。目前,我有一个ota引导加载程序,工作得很好,但我保留了一个精简版的OTP加载,如果闪存固件损坏(而不是保留两个不同的固件副本在闪存技术上都可能会损坏)。它工作得很好,但它需要我在主用户程序中保留一个ota代码的副本,这会浪费4到5k的代码空间。如果我可以简单地重置并传递一个错误,告诉我的otp引导加载程序运行otp内存中包含的ota引导加载程序,那么我就可以从flash用户程序中完全删除该代码块,并使用带有自定义错误值的platform\u重置。

如果这是不可能的,是的,我会使用内存标志,但似乎这已经是固有的,以您当前的系统,我想保存每一个字节的代码空间,我可以。

MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
Hi NScherdin,

Hi NScherdin,

在定义了BLE_HOST_PRESENT的SDK中,rwip_init()在ROM代码中实现,platform_reset_func()(从platform_reset()调用)也是由ROM代码实现的函数,但它不检查任何值以执行预定义的操作。它不将先前的重置原因存储到任何特定变量,也没有从何处加载用户代码的任何实现,它只是将SYS\u CTRL\u REG中的SW\u reset位设置为1,并重新启动引导过程。

谢谢你的对话

蛇毒素
离线
最后一次见到:1年5个月前
已加入:2015-08-15 19:34
Can you then explain the

然后你能解释一下在系统初始化中调用rwip初始化时的错误值吗?似乎rwip\u init要求error为RESET\u NO\u error或not。如果总是RESET\u NO\u ERROR,那么rwip\u init中的以下代码就没有意义了。如果错误值可以不是RESET\u NO\u error,那么有什么可能性?设置的值来自哪里

如果(错误! = RESET_NO_ERROR)
{

#如果(目前和未来)
rBle_发送消息(错误);
#elif(BLE\ U HOST\ U PRESENT和GTL\ U ITF)
rBle\u hl\u发送消息(错误);
#endif//BLE\ EMB\存在
}

MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
Hi NScherdin,

Hi NScherdin,

system_init()函数中的rwip_init()函数不是系统启动时实际调用的函数,函数实现上面的#define始终是1,调用的rwip_init()来自ROM代码,而不是SDK中实现的。尽管如此,函数还是非常相似的,如果您提到的话,在#elif中调用的rbleŠhlŠu sendŠmessage(error)只是ROM代码中的一个空函数。我假设实现是一个用于调试或测试目的的riviera\u waves,没有实现您想要的功能的机制,正如我allready提到的,平台\u reset\u func不存储或检查任何变量,它只是重置设备。

谢谢你的对话

蛇毒素
离线
最后一次见到:1年5个月前
已加入:2015-08-15 19:34
Ok. That explains that.

Ok. That explains that.

One last related questions. How do I find out the reason for a reset/crash? I see a couple people mention RESET_MEM_ALLOC_FAIL as the reason for their reset. I have a potential memory allocation failure causing a reset and I want to confirm that is the case.

MT\u对话框
离线
最后一次见到:2个月3周前
工作人员
已加入:2015-06-08 11:34
Hi NScherdin,

Hi NScherdin,

ROM代码跟踪这种分配失败,并以reset\u MEM\u ALLOC\u FAIL作为参数强制平台重置,如果自定义代码中存在重置,则ram不足是原因。

谢谢你的对话