打印

单片机如何启动

[复制链接]
6017|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1026869700|  楼主 | 2014-11-19 19:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
众所周知,将程序写好、编译、下载,便可以运行!可是单片机毕竟也属于一个微型计算机,那么他它内部的引导、启动直到运行程序,那么在运行程序前、单片机如何工作、它做了哪些准备工作!我们应该如何完全的控制单片机,了解其完整的工作流程。

相关帖子

沙发
1026869700|  楼主 | 2014-11-19 20:29 | 只看该作者
yyy71cj 发表于 2014-11-19 20:17
这问题,怕是想来容易说来难……

就是因为难,所以才要搞,否则没意思。

使用特权

评论回复
板凳
1026869700|  楼主 | 2014-11-19 20:54 | 只看该作者
yyy71cj 发表于 2014-11-19 20:35
我只好等着高人来说了……

我再搞呢,明白了告诉你。

使用特权

评论回复
地板
1026869700|  楼主 | 2014-11-20 20:15 | 只看该作者
关于单片机的启动,这个就要牵扯到集成开发环境,例如KEIL、IAR等等,在新建项目时,有一个单片机型号选型,要选择相应架构和结构的单片机,建C文件时,会自动添加一个启动文件,这个启动文件里面有关于自己选用单片机的配置,堆与栈的初始化。将这些随着编译,添加到所编写的程序代码中。(未完)

使用特权

评论回复
5
keer_zu| | 2014-11-21 18:00 | 只看该作者
1026869700 发表于 2014-11-20 20:15
关于单片机的启动,这个就要牵扯到集成开发环境,例如KEIL、IAR等等,在新建项目时,有一个单片机型号选型 ...

有些没那么复杂,可以做个分类介绍。51核的其实很简单。后边的也没那么难,和工具毛关系都没

使用特权

评论回复
6
gainst| | 2014-11-22 21:37 | 只看该作者
1026869700 发表于 2014-11-20 20:15
关于单片机的启动,这个就要牵扯到集成开发环境,例如KEIL、IAR等等,在新建项目时,有一个单片机型号选型 ...

这和集成开发环境有什么关系啊,别误导别人。

使用特权

评论回复
7
1026869700|  楼主 | 2014-11-23 00:20 | 只看该作者
gainst 发表于 2014-11-22 21:37
这和集成开发环境有什么关系啊,别误导别人。

你用C语言写程序时,不需要添加启动文件吗??你单片机不需要选型吗??

使用特权

评论回复
8
1026869700|  楼主 | 2014-11-23 00:24 | 只看该作者
keer_zu 发表于 2014-11-21 18:00
有些没那么复杂,可以做个分类介绍。51核的其实很简单。后边的也没那么难,和工具毛关系都没 ...

你说的没错,确实要分分类,而且工具只是工具,可是我们只编写了一个主体C语言代码,其他一些如单片机结构之类的,还是需要我们在工具里面设置和添加的。

使用特权

评论回复
9
1026869700|  楼主 | 2014-11-23 00:30 | 只看该作者
要回家了,山沟沟里面的,没有网了,问题暂且搁置几个月。有兴趣的朋友后面可以继续讨论,这只是本人的见解,难免有一些不到位,还请各位指出、一起探讨,请不要带有语言攻击。“发帖不易、且评且留意!”

使用特权

评论回复
10
keer_zu| | 2014-11-23 09:53 | 只看该作者
1026869700 发表于 2014-11-23 00:30
要回家了,山沟沟里面的,没有网了,问题暂且搁置几个月。有兴趣的朋友后面可以继续讨论,这 ...

哈哈,男人讨论问题都这个样子,鼓励提出问题,楼主的裙子很漂亮哦  哈哈

使用特权

评论回复
11
深夜星空| | 2014-11-23 10:48 | 只看该作者
在main()之前,IAR都做了啥? http://blog.csdn.net/kvs112219/article/details/6151393
Cortex-M3的

使用特权

评论回复
12
1026869700|  楼主 | 2014-11-23 21:04 | 只看该作者
yyy71cj 发表于 2014-11-23 08:25
51核是很简单,也就加个startup.a51的事。不过我知道楼主并不只做51单片机,可能有其它的见解。就静候高 ...

还是这位先森懂我!等我将ARM工作搞熟了!咱们再谈谈哈。

使用特权

评论回复
13
1026869700|  楼主 | 2014-11-23 21:09 | 只看该作者
深夜星空 发表于 2014-11-23 10:48
在main()之前,IAR都做了啥? http://blog.csdn.net/kvs112219/article/details/6151393
Cortex-M3的 ...

:handshake这位仁兄真是厉害啊,跟我想象的大体一样,不过你认识的更具体,而且还亲自搞过,在下佩服。

使用特权

评论回复
14
1026869700|  楼主 | 2014-11-23 21:12 | 只看该作者
keer_zu 发表于 2014-11-23 09:53
哈哈,男人讨论问题都这个样子,鼓励提出问题,楼主的裙子很漂亮哦  哈哈 ...

谢谢!

使用特权

评论回复
15
1026869700|  楼主 | 2014-11-23 21:14 | 只看该作者
yyy71cj 发表于 2014-11-23 08:21
别想多了,这还不算攻击人呢。攻击人是不谈问题只胡扯的做法。
        你看到版主keer_zu吗?过 ...

我说的不是keer_zu版主。

使用特权

评论回复
16
1026869700|  楼主 | 2014-11-23 21:17 | 只看该作者
深夜星空 发表于 2014-11-23 10:48
在main()之前,IAR都做了啥? http://blog.csdn.net/kvs112219/article/details/6151393
Cortex-M3的 ...

这位仁兄,借用你的成果来佐证我的帖子。可否?

使用特权

评论回复
17
深夜星空| | 2014-11-23 23:37 | 只看该作者
1026869700 发表于 2014-11-23 21:09
这位仁兄真是厉害啊,跟我想象的大体一样,不过你认识的更具体,而且还亲自搞过,在下佩服。 ...

:L 惭愧惭愧,这不是我写的,偶然看到的,分享给楼主而已。而且,原作者写出来就是为了分享的,你想佐证你的帖子,我觉得原作者也会乐意,不会告你侵权的 ;P

使用特权

评论回复
18
1026869700|  楼主 | 2014-11-24 20:13 | 只看该作者
本帖最后由 keer_zu 于 2014-11-25 14:33 编辑
深夜星空 发表于 2014-11-23 23:37
惭愧惭愧,这不是我写的,偶然看到的,分享给楼主而已。而且,原作者写出来就是为了分享的,你想佐证 ...

谢谢!


使用特权

评论回复
19
keer_zu| | 2014-11-25 14:33 | 只看该作者
1026869700 发表于 2014-11-24 20:13
谢谢!

继续啦,加油!

使用特权

评论回复
20
1026869700|  楼主 | 2014-12-21 12:00 | 只看该作者
在STM32编程中,IAR在执行main函数前做了什么事?
1.CPU最简单的启动代码一般包括堆栈初始化,全局变量初始化,向量表初始化,最后跳转到用户主程序main执行;
2.cortex-m3的复位时序如下:
(1)、从地址0x00000000取出4bytes的数据作为MSP的值;
(2)、从地址0x00000004取出4bytes的数据作为复位的PC值;
(3)、PC跳到复位向量处开始往下执行程序代码。
cortex-m3规定,从0x00000004存放系统异常,接下来就是IC的外部中断(具体布局跟不同厂商设计有关)。由此定义个一维数组,按中断布局顺序对应存放不同的向量值。
首先系统复位时,Cortex-M3从代码区偏移0x0000'0000处获取栈顶地址,用来初始化MSP的值。接下来从代码区偏移0x0000'0004获取第一个指令的跳转地址。这个地址,是Cortex-M3要求放置中断向量表的地方。
这里是一个程序的启动区的反汇编:(该处是将0000‘0000映射到了0800‘4000处)
__vector_table:
  08004000  2600      
  08004002  2000      
  08004004  7E1D      
  08004006  0800      
这个程序是由IAP程序来启动的,IAP就存在在0x0800'0000这个地址上,IAP程序获取0x0800'4000处的MSP值(0x20002600),并设置为MSP的值,即主堆栈最大范围是0x2000'0000~0x2000'25FF。接下来IAP程序获0x0800'4004处的Reset_Handler的地址(0x0800'7E1D),并跳转到Reset_Handler()执行。
IAP在这里完全是模仿了Cortex-M3的复位序列,在没有IAP的系统上,CM3只能从0x0800'0000获取MSP,从0x0800'0004获取第一条指令所处地址。IAP的启动,已经消耗掉了这个复位序列,所以IAP要启动UserApp程序的时候,也是完全模仿Cortex-M3的复位序列的。

使用特权

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

本版积分规则

15

主题

138

帖子

15

粉丝