我想将债券信息存储在NOINIT部分,这样当通过深度睡眠重置时,我的债券信息不会丢失。
你好,cgha,
由于您使用的是DA14580,并且我假设是SDK5.04,所以应该对SDK进行一些更改,以便在重置期间保留初始化的数据。DA14585/6和我们最新的SDK6(最新版本6.0.10),具有存储初始化数据的能力。你有没有想过搬进DA14585/6?有一个软件示例演示了此功能。
软件示例:DA14585/586检测复位源
谢谢,下午好
你能告诉我应该对sdk5.0.4做些什么更改来存储和获取重置后的值吗。在我的想法中,我应该对散点文件进行更改,在sdk5.0.4中,为了在重置后保留值,我应该修改其他地方吗?
我在正常模式下使用扩展睡眠,当ble上接收到睡眠命令时,da14580进入深度睡眠,需要重启时另一个mcu会给da14580一个复位信号,重启后需要保留绑定信息,连接回绑定的ios设备。
我注意到我要存储的数据位于散点文件中标记为uninit的区域,例如,映射文件显示我的数据起始地址为0x00082448,数据长度为476字节,散点文件将该区域列为uninit“ZI_RET20 0x00080768 uninit 0x22b8”,但似乎我的数据仍然丢失后复位,即使当我设置da14580延长睡眠前复位(因为我注意到这个地区是在SysRAM地区)。
请检查SystemInit()函数,您会发现SetBits16(PMU\u CTRL\u REG,RETENTION\u MODE,0xF),因此,保留ram的所有位都被设置为零,正如您已经看到的一样,当设备启动时,应该对保留内存区域进行清零,因为在深度睡眠时,保留区域除了保存用户数据外,还保存其他BLE信息(BLE堆、堆栈等)。
重置后,归零功能将再次运行,并将清除保留内存区域中的所有数据。为了避免这种情况,您可以做的是知道“数据”在保留内存区域中的位置,并且在初始化过程中应避免将它们归零。没有任何参考设计或示例可以证明,我要做的是:
在为深度睡眠定义了保留内存区域的scatterfile中,分配一个空间来保存不应该初始化的数据。
部分RETRAM_LEN将从新节中使用,因此请从#define RETRAM_LEN中删除要使用的字节数,并添加新节的大小(新RETRAM_LEN=RETRAM_LEN–SZ_AFT_RST_DATA):
§ LR\u RETENTION\u RAM0 0x00080768(重传长度+交换内存大小+SZ\u AFT\u RST\u数据){
在LR\u RETENTION\u RAM0中声明一个从0x00080768开始的执行区域。新的执行区域将从区域0x00080768开始,并且将具有您需求的范围(例如,假设您想要的范围是SZ\u AFT\u RST\u DATA 80字节)。因此散点文件将更改为:
§ RET\u RESET01 0x00080768 uniit SZ\u AFT\u RST\u DATA{.ANY(unitialized\u DATA\u test)}<-标记新区域。
执行此操作后,ZI\u RET00将从地址0x00080768+SZ\u AFT\u RST\u DATA开始,而不是从0x00080768开始。
因此,现在您已经知道,将使用单元化的\u data \u测试标记的数据将驻留在地址0x00080768到地址0x00080768+SZ \u AFT \u RST \u data之间。因为您知道,可以转到SystemInit()函数并指示该函数不要将0x00080768和0x00080768+SZ\u AFT\u RST\u数据之间的内存归零。
//在0x80000-0x83000中填充零unsigned int*p_retmem=(unsigned int*)0x80000;对于(i=0xBFF;i>=0;i--){如果((p_retmem>(unsigned int*)0x80768)&((p_retmem<(unsigned int*)(0x80768+80)))*(volatile unsigned*)p_retmem++;else*(volatile unsigned*)p_retmem++=0;}
你好,cgha,
由于您使用的是DA14580,并且我假设是SDK5.04,所以应该对SDK进行一些更改,以便在重置期间保留初始化的数据。DA14585/6和我们最新的SDK6(最新版本6.0.10),具有存储初始化数据的能力。你有没有想过搬进DA14585/6?有一个软件示例演示了此功能。
软件示例:DA14585/586检测复位源
谢谢,下午好
你能告诉我应该对sdk5.0.4做些什么更改来存储和获取重置后的值吗。在我的想法中,我应该对散点文件进行更改,在sdk5.0.4中,为了在重置后保留值,我应该修改其他地方吗?
我在正常模式下使用扩展睡眠,当ble上接收到睡眠命令时,da14580进入深度睡眠,需要重启时另一个mcu会给da14580一个复位信号,重启后需要保留绑定信息,连接回绑定的ios设备。
我注意到我要存储的数据位于散点文件中标记为uninit的区域,例如,映射文件显示我的数据起始地址为0x00082448,数据长度为476字节,散点文件将该区域列为uninit“ZI_RET20 0x00080768 uninit 0x22b8”,但似乎我的数据仍然丢失后复位,即使当我设置da14580延长睡眠前复位(因为我注意到这个地区是在SysRAM地区)。
你好,cgha,
请检查SystemInit()函数,您会发现SetBits16(PMU\u CTRL\u REG,RETENTION\u MODE,0xF),因此,保留ram的所有位都被设置为零,正如您已经看到的一样,当设备启动时,应该对保留内存区域进行清零,因为在深度睡眠时,保留区域除了保存用户数据外,还保存其他BLE信息(BLE堆、堆栈等)。
重置后,归零功能将再次运行,并将清除保留内存区域中的所有数据。为了避免这种情况,您可以做的是知道“数据”在保留内存区域中的位置,并且在初始化过程中应避免将它们归零。没有任何参考设计或示例可以证明,我要做的是:
在为深度睡眠定义了保留内存区域的scatterfile中,分配一个空间来保存不应该初始化的数据。
部分RETRAM_LEN将从新节中使用,因此请从#define RETRAM_LEN中删除要使用的字节数,并添加新节的大小(新RETRAM_LEN=RETRAM_LEN–SZ_AFT_RST_DATA):
在LR\u RETENTION\u RAM0中声明一个从0x00080768开始的执行区域。新的执行区域将从区域0x00080768开始,并且将具有您需求的范围(例如,假设您想要的范围是SZ\u AFT\u RST\u DATA 80字节)。因此散点文件将更改为:
执行此操作后,ZI\u RET00将从地址0x00080768+SZ\u AFT\u RST\u DATA开始,而不是从0x00080768开始。
因此,现在您已经知道,将使用单元化的\u data \u测试标记的数据将驻留在地址0x00080768到地址0x00080768+SZ \u AFT \u RST \u data之间。因为您知道,可以转到SystemInit()函数并指示该函数不要将0x00080768和0x00080768+SZ\u AFT\u RST\u数据之间的内存归零。
谢谢,下午好