亲爱的Dialog_Support,
我已经将一个变量的值存储到Flash中,我想在看门狗定时器重置后检索该值。但我无法认识到由于看门狗或任何其他原因而发生重置。我读过这篇文章
https://support.dialog-semicondiondiondiondum/how-could-i-know-hether-reset -...
我来知道如果我们在保留RAM中声明变量,那么我们可以在看门狗之后检索它。另一种解决方案是使用外部存储器。当我的应用程序没有任何外部内存时,我必须将变量声明到保留RAM中。我已经尝试这样做,但在看门狗重置后我无法检索其值。因此,您可以建议我将值存储到保留RAM中的任何示例,并在设备重置后重返回来。
先感谢您
带着敬意,
Ruchi Patel.
关键词:
设备:
嗨Ruchi Patel,
您能够将数据存储到保留RAM中,作为您已发布的过去线程中所描述的。请注意,在设备重置后,存储数据将丢失。请检查SystemInit()函数,并找到setBits16(PMU_CTRL_REG,RETENT_MODE,0xF);因此,由于您已经看到了归零器,因此已经看到了归零器的归零器,因此在沉睡的沉睡中升起时应该完成的东西,所以归零ram的归零器是应该完成的。除了用户数据,额外的BLE信息(BLE堆,堆栈等)。
重置后,归零功能将再次运行,并将消除保留存储区域中的任何数据。为了避免您可以做的是要知道您的“数据”驻留在保留存储区域和初始化期间,您应该避免将它们归零。没有参考设计或示例,演示了,我所做的是以下内容:
在SIMPTIONFILE中定义为深度睡眠的保留存储区域分配一个容纳应不初始化的空间。
§LR_Retention_ram00x00080768(Retram_len + Exchange_memory_size + sz_aft_rst_data){
§ret_reset01 0x00080768 uninit sz_aft_rst_data {.any(Unitialized_data_test)} < - 标记新区域。
所以现在您知道将使用Unitialized_Data_Test标记的数据将从地址0x00080768驻留到地址0x00080768 + sz_aft_rst_data。由于您知道您可以转到SystemInit()函数并指示功能不归零0x00080768和0x00080768 + sz_aft_rst_data之间的内存。
//用零填充0x80000 - 0x83000
unsigned int * p_retmem =(无符号int *)0x80000;
for(i = 0xbff; i> = 0; I--)
{
if((p_retmem>(未签名int *)0x80768)&&(p_retmem <(unsigned int *)(0x80768 + 80)))
*(valatile unsigned *)p_retmem ++;
别的
*(valaTile unsigned *)p_retmem ++ = 0;
}
谢谢,PM_DIALOG.
我需要这个功能,以便在手表狗咬伤时进行静默复位。
我正在使用SDK5,这与这种解释不完全兼容。
你能把这个指南重新申请SDK5吗?
我进一步调查了一点
如果我使用uint8_t silent_reset __attribute __((部分(“保留_mem_area_uninit”))))));(省略ZERO_INIT属性)我的变量“SILENT_RESET”最终在“执行区域RET_DATA”的开始时,它的类型数据不是零 - 如:
0x07FD4804 0x07FD4804 0x00000001数据RW
虽然看狗并没有生存一口。
如果我使用__Attribute __((部分(“保留_mem_area_uninit”))));一个人应该认为它最终在执行区域ret_data_uninit,但它最终在lr_irom3结束时 - 为什么??
嗨Jarirenejensen,
keile的扇区是对齐的32个字节,因此应用程序所需的最大未初始化的保留数据(CFG_RET_DATA_UNINIT_SIZE定义在DA1458X_STACK_CONFIG.H标题文件中必须是4(4×8 = 32bytes)的倍数,更大或等于总和总数据。如果CFG_RET_DATA_UNINIT_SIZE在4中不是倍数,则KEIL将其截断为4的最小倍数,否则如果数据不能拟合,则将删除孔部分。请确保CFG_RET_DATA_UNINIT_SIZE为4的倍数。
谢谢,PM_DIALOG.
谢谢 - 这是我错过的有点。