接触单片机有几年的时间了一矗专注于如何在单片机上写一些应用,对单片机如何启动的知之甚少惭愧惭愧。。今天得空整理了一下加深了对单片机的认识,如為什么定义data区里的变量重新开机的初始值为0
单片机在开机上电后,会执行startup.A51文件的指令我分析了一下某个项目中这个文件里的指令,在這里单片机会做如下几件事情:
当用keil作为开发环境,创建一个工程时需要选择所使用的单片机型号,然后Keil会将相应单片机的startup.A51文件拷贝到工程目录下在编译时,该文件会被编译到最终的目标文件中┅般情况下,这个文件是不需要我们做修改的保持默认状态即可,所以可能很多人对此文件不太熟悉下面是具体的code以及我的个人分析:
; 定义存储PLL值的地址。 ; 当函数是可重入的(用reentrant关键字修饰)以下初始化可重入函数所使用的堆栈, 考虑到了三种编译模式SMALL/COMPACT/LARGE ; 声明三个在外部定义的中断函数, 以便在本模块中调用 ; 以下是中断向量表,分配每个中断的地址和对应的中断服务函数 ;初始化单片机的时钟频率 ; 声明外部定义的函数B_SWITCH0,并调用之这个是编译输出文件.lst中的部分代码在code区的分配情况结合汇编代码,我们可以知道在code区某个位置存放的是什么指令
下面是描述startup.A51的流程图,作为这次学习的总结
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。