本帖最后由 荣丰宇 于 2015-7-5 21:03 编辑
一直不敢写系统启动这方面的东西,因为知道自己对它只是一知半解,写出来必然有错误之处,惹大家的笑话…… 其实会做单片机开发,至少是ARM内核,会写代码,但是不一定了解系统真正从上电到运行自己的C代码程序,之间到底做了些什么,本着刨根问底的态度,现在我们就仔细剖析一下!有误之处请大家指出,共同进步! GD32资料共享链接: http://pan.baidu.com/s/1kTKiYQN
密码:8ujm 1【GD32】开箱晒照 2【GD32】上电&软件环境 3【GD32】硬件原理&软件开发&Demo 4【GD32】做开发(全文字) 5【GD32】关于小红板时钟配置的故事
本文针对GD32F150小红板相关的3个启动文件startup_gd32f1x0.s: 1、 官网固件库 2、 小红板例程 3、 飞鸟操作系统(基于小红板的)
总结一下GD32的启动文件和启动过程: 1对栈和堆的大小进行定义, 2在代码区的起始处建立中断向量表,其第一个表项是栈顶地址,第二个表项是复位中断服务入口地址。 3在复位中断服务程序中跳转到C/C++标准实时库的__main函数,完成用户堆栈等的初始化后,跳转.c文件中的main函数开始执行C程序。 假设GD32被设置为从内部FLASH启动(这也是最常见的一种情况),中断向量表起始地位为0x8000000,则栈顶地址存放于0x8000000处,而复位中断服务入口地址存放于0x8000004处。当遇到复位信号后,则从0x80000004处取出复位中断服务入口地址,继而执行复位中断服务程序,然后跳转__main函数,最后进入mian函数,来到C的世界。
了解系统的启动过程,对于更加深入了解和研究单片机打下基础,不过这也必须要对内核的特点有一定的了解,能力有限,里面可能有些错误,请大家见谅!
更多内容见附件,图片太多发帖不方便……
|