概述
需求 :nRF52810 软复位不丢时间戳 ram 保持
1、复位类型判断
参考文档:nRF52810_PS_v1.3.pdf
if(0 == (0x0005000f & nrf_power_resetreas_get())){
g_timeStamp = (NRF_RTC0->COUNTER)>>15;
NRF_LOG_DEBUG("--> HardWare reset");
}else if(1 == nrf_power_resetreas_get()){
g_timeStamp = (NRF_RTC0->COUNTER)>>15;
NRF_LOG_DEBUG("--> Reset Pin reset");//根据实测复位按键复位和上电复位一样会丢失 noinit ram数据
}else{
NRF_LOG_DEBUG("--> SoftWare reset");
}
2、设置app工程 非初始化块ram地址范围 与 boot工程一致
2.1) app工程 .c 源文件代码
#pragma location = 0x20005ff8
__root __no_init volatile uint32_t g_timeStamp;
2.2) app工程 .icf文件修改
用 ram 的最后一小部分空间作为 noinit 块使用
define symbol __ICFEDIT_region_RAM_start__ = 0x20002510;
define symbol __ICFEDIT_region_RAM_end__ = 0x20005fff - 8;
define symbol __ICFEDIT_region_noinit_RAM_start__ = 0x20005ff8;
define symbol __ICFEDIT_region_noinit_RAM_end__ = 0x20005fff;
define region noinit_region = mem:[from __ICFEDIT_region_noinit_RAM_start__ to __ICFEDIT_region_noinit_RAM_end__ ];
place in noinit_region { readwrite section .noinit};
3、设置boot工程 非初始化块ram地址范围 与app工程一致
3.1) boot工程 .c 源文件代码
#pragma location = 0x20005ff8
__root __no_init volatile uint32_t s_usrTime;
void UpdataUsrTimestamp()
{
static uint32_t startTime = 0;
if(0 == startTime)
startTime = s_usrTime;
s_usrTime = startTime + (nrf_bootloader_dfu_timer_counter_get() >> 15);
}
喂狗函数内添加上述时间更新函数 UpdataUsrTimestamp
void nrf_bootloader_wdt_feed(void)
{
UpdataUsrTimestamp();
if (nrf_wdt_started())
{
wdt_feed();
}
}
3.2) boot工程 .icf文件修改
define symbol __ICFEDIT_region_RAM_start__ = 0x20002390;
define symbol __ICFEDIT_region_RAM_end__ = 0x20005fff - 8;
define symbol __ICFEDIT_region_noinit_RAM_start__ = 0x20005ff8;
define symbol __ICFEDIT_region_noinit_RAM_end__ = 0x20005fff;
define region noinit_region = mem:[from __ICFEDIT_region_noinit_RAM_start__ to __ICFEDIT_region_noinit_RAM_end__];
place in noinit_region { readwrite section .noinit };
最后
以上就是失眠紫菜为你收集整理的IAR下 __no_init ram nRF52810 软复位不丢时间戳 ram 保持的全部内容,希望文章能够帮你解决IAR下 __no_init ram nRF52810 软复位不丢时间戳 ram 保持所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复