STM32F103RET6 Flash写入用户数据起始地址如何选择?

2019-12-10 18:31发布

如题,要在103的Flash里面写入用户数据,应该怎样选择数据的存储地址呢?因为本身程序也在Flash里面存,选择不当是不是会覆盖程序代码导致错误?Keil编译器是否查看Flash从哪里开始存储程序,从哪里开始有空余空间?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
richards
1楼-- · 2019-12-10 23:33
建议用 定义一个绝对地址的数组到某个地址 用const修饰 大小就是你的用户空间的大小   那个地址作为用户空间的开始
wear778899
2楼-- · 2019-12-11 00:55
flash数据尽量往后面设置

不改变MDK设置和没有特殊情况时,编译连接好的代码是从 800 0000 开始,假设ROM空间有64K   代码量有50K  这时多次烧写时不会覆盖到后14K空间的   除非进行flash全部擦除

升级代码时需要自己注意一下   每次编译之后的代码实际空间
jr9910
3楼-- · 2019-12-11 01:35
richards 发表于 2015-10-29 00:40
建议用 定义一个绝对地址的数组到某个地址 用const修饰 大小就是你的用户空间的大小   那个地址作为用户空 ...

二楼正解,已经成功实现,不怕被编译器意外干掉!
jr9910
4楼-- · 2019-12-11 02:41
wear778899 发表于 2015-10-29 08:07
flash数据尽量往后面设置

不改变MDK设置和没有特殊情况时,编译连接好的代码是从 800 0000 开始,假设ROM ...

这个方法在一定程度上有效,但不完全有效,实际使用发现定义个非常靠后的Page不行,但定义稍前一些的却可以,具体定义到什么位置不太好掌握,至于为什么不太清楚!
建议采用二楼方法const uint8_t array[N] __attribute__ (at(uint32_t *)address)方法,稳妥可靠。注意N的大小是要擦除空间大小,address为擦除的起始地址,最好和页面起始地址对齐。
skype
5楼-- · 2019-12-11 06:49
 精彩回答 2  元偷偷看……
xrwf_2009
6楼-- · 2019-12-11 08:06
正好需要

一周热门 更多>