单片机的启动代码(转自网络)

作者: SunShine__鹏 | 来源:发表于2018-04-25 13:46 被阅读37次

带你来看看单片机的启动代码!

对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的启动代码。没有BIOS的电脑,那注定是一块板砖!BIOS主要是做一些开机前的准备工作,例如系统时间设定、启动顺序。。。扯远了!

其实电脑本身就是从单片机而来,那么单片机也是有启动代码的,只是我们绝大部分情况不去关心它。

启动代码究竟都干了些什么工作,为何需要它?想想你在c语言中用到了什么东西,而这些东西却是拿来就可以用的?堆、栈!没错,就是他们。我们知道堆和栈是内存中划分出的一块区域,那为什么我们没有亲自划分呢,因为启动代码帮了你的忙!!!再想想单片机工作的时候,有哪些配置被我们忽略了,而它却可以用?时钟,就是这货,我们可以不配置时钟,而你发现它竟然有默认值!还是启动代码帮了你!

接下来仔细研究一下STM32的启动代码,首先要知道启动代码藏在哪里:一个叫做startup的汇编文件。启动代码是对硬件的一个最初级的配置,它必须用汇编语言来实现,汇编是真正的硬件编程语言。

从上到下解读启动代码:

1、定义栈大小

2、定义堆大小

3、中断向量地址

ps:Cortex-M4内核要求内存的第一个地址是栈指针,第二个地址开始为中断向量。而中断向量的第一个必须是复位,因为代码是从上到下执行,开机首先遇到的就是复位。

4、复位中断处理函数

ps1:仔细那看有两个东西需要注意:“SystemInit”这个是时钟初始,“__main”这一句代表跳转到“main”函数。正因为复位这样的写法,所以程序都是从main函数开始执行的。

ps2:“SystemInit”具体实现过程在stm32fxxx.c,“__main”也是在某个地方与真正的main关联起来。

5、其他中断处理函数

ps1:绝大部分中断的实现系统没有给出,等待程序员去写。但是中断的名字我们都可以看到的,每一个名字都和上面向量表中对应着。我们知道函数名其实就是一个地址,而中断的入口地址是固定的,只要找对名字,那地址也就找对了。

ps2:中断的入口地址由内核和芯片决定,无法更改。因此不要改启动代码中的中断向量表

6、初始化堆、栈

ps:正因为堆和栈已经被初始化,所以你的C语言才可以顺利的执行。

启动代码是非常关键的,所有的CPU都有启动代码。这里完成了最基本的初始化功能,尤其是中断向量表,程序员每一个中断函数的名字都要与启动代码中的向量表对应,否则中断是无法进入的。

相关文章

  • 单片机的启动代码(转自网络)

    带你来看看单片机的启动代码! 对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的...

  • 单片机按键软硬件设计技巧!

    转自电子发烧友。 转自电子发烧友。 转自电子发烧友。 在单片机系统里,按键是常见的输入设备,在本文江介绍几种按键硬...

  • 转自网络

    作者:王世民 世间万物,无论是大到一个星系还是小至一个原子(见上图),其本质都是一个个的系统(有兴趣的话,可以去阅...

  • 转自网络

    我知道你最近也很累,再坚持一下呀 你已经做的很好了,别听别人瞎扯。要心地善良,要温柔活着,要对得起自己说的每一句话...

  • 转自网络

    ​新的一年,我为孩子许十个愿望 育儿团 02-06 13:00 订阅 文 | 朱丽叶的小情绪 本文由|男孩派(bo...

  • 转自网络

    1 这几天,大家都忙着在辞旧和迎新。 有人开心地在朋友圈总结着,2018年完成了哪些事,离自己的目标又靠近了多少;...

  • 转自网络

    夜读 很多时候,令我们感到烦恼和痛苦的并不是困难本身,而是我们对它的评价和判断。心态好,棘手的事情也会显得不那么难...

  • 女人,跟你恩断义绝,会有这些表现

    转自网络

  • 约会细节,八个肢体语言揭秘男人心理

    转自网络。

  • div拖动改变大小 (横向)

    转自网络

网友评论

    本文标题:单片机的启动代码(转自网络)

    本文链接:https://www.haomeiwen.com/subject/mpzelftx.html