OpenEdv-开源电子网

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

为什么单片机程序要从0X08000000开始

[复制链接]

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-8-1 13:08:38 | 显示全部楼层 |阅读模式
3金钱
为什么单片机程序要从0X08000000开始?

最佳答案

查看完整内容[请看2#楼]

甲鱼的臀部,规定! 芯片内CPU访问地址空间的逻辑电路中,规定这一块区域用来给FLASH用的,如果从FLASH启动就是访问这个地址开始的程序
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

67

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
212
金钱
212
注册时间
2015-8-5
在线时间
49 小时
发表于 2016-8-1 13:08:39 | 显示全部楼层
甲鱼的臀部,规定!
芯片内CPU访问地址空间的逻辑电路中,规定这一块区域用来给FLASH用的,如果从FLASH启动就是访问这个地址开始的程序
开源QQ群:431600056
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-7-29
在线时间
8 小时
发表于 2016-8-1 13:28:26 | 显示全部楼层
这个虽然是单片机 但是地址是32位的,这个有点类似三星的S3C2440,2410的,因为都是ARM的核心。程序起始点就是在0x08000000,建议你看下ARM核心启动地址的规划
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-1 13:41:16 | 显示全部楼层
我还想知道RAM为什么从0X02000000
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-8-1 14:18:08 | 显示全部楼层
不是所有的都是从0X08000000开始的吧,飞思卡尔的是从0x00000000
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-8-1 14:22:49 | 显示全部楼层
憨厚诚实大叔 发表于 2016-8-1 13:41
我还想知道RAM为什么从0X02000000

因为cortex M的设计是这样的
QQ截图20160801141933.png
各个MCU生产厂家可以参考这个地址映射,但貌似不是强制,比入飞思卡尔的ram起始地址是0x1FFFFXXX开始的

机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

7

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2014-6-30
在线时间
29 小时
发表于 2016-8-1 14:23:06 | 显示全部楼层
首先查看芯片手册,全面了解了芯片的内部构造,然后你就知道为什么了,不是所有芯片都是从0X08000000开始运行程序的。
回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
发表于 2016-8-1 14:58:16 | 显示全部楼层
ianhom 发表于 2016-8-1 14:22
因为cortex M的设计是这样的

各个MCU生产厂家可以参考这个地址映射,但貌似不是强制,比入飞思卡尔的r ...

@慕名兰 这个是正解,芯片设计的时候规定的,一般手册都有说明的
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
 楼主| 发表于 2016-8-1 15:23:56 | 显示全部楼层
1376115749 发表于 2016-8-1 14:58
@慕名兰 这个是正解,芯片设计的时候规定的,一般手册都有说明的

意思是看是从FLASH还是SRAM等启动,而这些有专有的内存与地址,那么就从这些首地址启动?
回复

使用道具 举报

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
发表于 2016-8-1 15:44:26 | 显示全部楼层
慕名兰 发表于 2016-8-1 15:23
意思是看是从FLASH还是SRAM等启动,而这些有专有的内存与地址,那么就从这些首地址启动?

一般一个芯片会有一个寻址区域,比如stm32 就有4G(32位)的空间,芯片设计的时候,会把flash的起始地址放到0x08000000处,ram的其实地址0x20000000处,而芯片上电复位后,pc会从0x08000000这个地址处开始第一条指令,所以这样应该就能理解了吧
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-8-1 15:49:41 | 显示全部楼层
芯片内部规定的,一上电就会从那个地方开始运行。所以你要把初始程序放在那个地方,如bootlaoder。不是所有的芯片都是从0x8000000开始运行,如三星的S5PV210是从0xd0020010开始运行,然后你可以通过里面的初始化代码把Flash里面的代码全部读到内存中,通过长跳转就可以在其他地方运行,u-boot就是这么启动的。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 20:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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