从裸机到嵌入式Linux—为什么所有芯片启动都是汇编语言开始
从裸机到嵌入式Linux—为什么所有芯片启动都是汇编语言开始
- main函数是程序的入口,但不是上电最先执行的函数
- 为什么是汇编语言
- 持续更新
main函数是程序的入口,但不是上电最先执行的函数
对于很多人来说,main函数是所有程序的入口函数,逻辑的执行都是main函数开始的,这没有问题,但main函数并不是上电最先执行的函数,如果看过一些芯片启动的启动文件,其实不难发现,这些芯片的启动文件大多是.s结尾,也就是说这些启动文件是用汇编语言编写的,包括STM32、NXP i.MX 等等芯片,其实所有的执行函数代码的芯片都要经历执行汇编语言这个过程,只不过在单片机裸机阶段,厂商提供的工程给我们写好了启动过程需要的汇编代码,这个过程对我们而言是透明的,但是几乎所有的嵌入式Linux教程第一节实操课都是用汇编语言写启动代码。
为什么是汇编语言
main函数是C语言的函数入口,C语言的正常执行需要准备堆和栈,这样申请的内存空间、定义的变量、函数的跳转才能在内存中找到位置,函数才能正常的执行,但是汇编语言不需要,汇编语言直接操作寄存器,由于芯片刚刚上电可以通过电路配置寄存器的默认值,但是由于不同的芯片挂在的内存的不同包括内存空间分配的不同,不可能上来就设置好默认的C语言执行环境,需要汇编语言直接操作芯片和外设芯片的寄存器把环境准备好,然后跳入main函数。