OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1869|回复: 4

请问stm32的程序是如何存储的

[复制链接]

7

主题

13

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2023-10-24
在线时间
6 小时
发表于 2023-10-30 19:59:27 | 显示全部楼层 |阅读模式
1金钱
stm32程序是静态时是存在flash中的,那么程序存储是从flash的起始地址0x8000000开始的吗?
我在使用内部flash的时候应该如何避免擦除读取到flash区的程序呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2130

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4724
金钱
4724
注册时间
2015-1-10
在线时间
590 小时
发表于 2023-10-31 14:37:41 | 显示全部楼层
1、程序默认从0x8000000开始,但是你可以通过烧录器改起始地址
2、根据程序的大小,做数据存储的时候避开程序区就行,注意需要避开整个sector
回复

使用道具 举报

54

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1036
金钱
1036
注册时间
2022-4-20
在线时间
372 小时
发表于 2023-10-31 17:41:24 | 显示全部楼层
编译完成之后有一个信息,根据这个大小来确定程序大小。
举个例子:
当你编译完成之后,你得到了以下信息:

QQ截图20231031173748.png

看到这里:
  1. Program Size: Code=6824 RO-data=360 RW-data=28 ZI-data=1964  
复制代码
程序烧写之后,大小就等于Code+RO-data+RW-data=6824+360+28=7212。换成十六进制就是0x1C2C,那程序的结束地址就等于0x8000000+0x1C2C=0x8001C2C
你操作flash的时候避开这个区域就行了。

全凭感觉作答,如有错误,望指出。
又菜又爱指点
回复

使用道具 举报

7

主题

13

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2023-10-24
在线时间
6 小时
 楼主| 发表于 2023-11-1 19:15:06 | 显示全部楼层
阿侑kevin 发表于 2023-10-31 14:37
1、程序默认从0x8000000开始,但是你可以通过烧录器改起始地址
2、根据程序的大小,做数据存储的时候避开 ...



请问我修改这个地址的起始地址是在修改程序的储存地址吗?修改后烧录程序,单片机会自动从这个地址的程序启动吗?




回复

使用道具 举报

7

主题

13

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2023-10-24
在线时间
6 小时
 楼主| 发表于 2023-11-1 19:16:34 | 显示全部楼层
驭剑的秘密 发表于 2023-10-31 17:41
编译完成之后有一个信息,根据这个大小来确定程序大小。
举个例子:
当你编译完成之后,你得到了以下信息: ...

明白了多谢多谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 02:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表