打印
[STM32F1]

stm32怎么保护一段ram区,使得在非掉电复位的时候数据保持

[复制链接]
5759|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
如题。不是备份寄存器(BKP)
沙发
feelhyq| | 2017-3-8 12:41 | 只看该作者
用指针的方式,使用指针指向某一块内存,然后对指针进行操作就行了。

使用特权

评论回复
板凳
lxyppc| | 2017-3-8 12:48 | 只看该作者
好像stm32的内存都可以在非掉电复位时保存
复位时会执行一段编译器插入的代码对内存进行初始化
只要跳过这段初始化代码
或者让某一块内存不经过初始化
就能实现了

使用特权

评论回复
地板
Xflyan| | 2017-3-8 12:59 | 只看该作者
使用 __no_init 指定位置定义一段存储区,这样非掉电重启的时候不会被初始化清零,如
__no_init uint8_t no_init_ram @0x20004000;
应该可以这样,未验证

使用特权

评论回复
5
atchboy|  楼主 | 2017-3-8 13:42 | 只看该作者
能具体一点么,比如说我先怎么保护一段ram区,然后把需要保留的变量就定义在这个区域。stm32 有没有具体的相关文档,我一直没找到。

使用特权

评论回复
6
atchboy|  楼主 | 2017-3-9 10:17 | 只看该作者
别沉啊

使用特权

评论回复
7
atchboy|  楼主 | 2017-3-9 10:17 | 只看该作者
大神们请帮忙

使用特权

评论回复
8
atchboy|  楼主 | 2017-3-13 16:06 | 只看该作者
知道了,随便看了个stm32F4系列的单片机,它的sram就有三种区域,有一块就是带电池备份的sram。应该就是可以用这块的功能。

使用特权

评论回复
9
typeof| | 2017-3-13 17:11 | 只看该作者
这个只能使用外接电源。

使用特权

评论回复
10
typeof| | 2017-3-13 17:12 | 只看该作者
ram肯定是掉电丢失,除非放在rom里面。

使用特权

评论回复
11
fengzaideng| | 2017-3-14 09:44 | 只看该作者
Xflyan 发表于 2017-3-8 12:59
使用 __no_init 指定位置定义一段存储区,这样非掉电重启的时候不会被初始化清零,如
__no_init uint8_t no ...

对就是这种方法,N年前就验证过了啊。不过的看使用的是IAR还是Keil

使用特权

评论回复
12
atchboy|  楼主 | 2017-3-15 12:20 | 只看该作者
fengzaideng 发表于 2017-3-14 09:44
对就是这种方法,N年前就验证过了啊。不过的看使用的是IAR还是Keil

这个stm32F103能用么?在keil编译器里没有__no_init的关键字么?能否说一下具体的方式?

使用特权

评论回复
13
Xflyan| | 2017-3-15 13:52 | 只看该作者
KEIL 定义变量到指定地址:
uint8_t no_init_ram[4096] __attribute__((at(0x20004000)));


no_init.png (40.46 KB )

no_init.png

使用特权

评论回复
14
fengzaideng| | 2017-3-15 14:23 | 只看该作者
atchboy 发表于 2017-3-15 12:20
这个stm32F103能用么?在keil编译器里没有__no_init的关键字么?能否说一下具体的方式? ...

uint8_t  xxx  __attribute__((section("NO_INIT"),zero_init));

使用特权

评论回复
15
atchboy|  楼主 | 2017-3-20 14:41 | 只看该作者
Xflyan 发表于 2017-3-15 13:52
KEIL 定义变量到指定地址:

老师,多谢了。已经验证,可以使用。方法二,另外可以定义指针,然后指向某个地址(确认这个地址不会被占用或其他程序操作),此时软件复位也不会初始化指针指向地址的内容。因为复位只会初始化有确定地址的变量,因为指针初始化的时候是null,所以你确定的地址是不会被初始化的。方法二需要注意的是,确定地址不会使用。我认为可以结合malloc函数使用方法二。但是最好使用xflyan的方法,配置ram   no_init。

使用特权

评论回复
16
lingergy| | 2020-7-15 15:39 | 只看该作者
成功了,谢谢上面各位大神

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

55

帖子

0

粉丝