最近遇到一个问题,说是单片机中main函数是谁调用的,在调用main函数之前都做了哪些的操作呢?
那么在Windows下是谁调用的呢,调用之前有什么操作呢,Linux下和Windows下相同吗?
一般可执行文件都有一个入口地址(由PE格式指定),这个入口地址就是程序加载时直接跳到那里去执行。一般来说这个入口地址不是main函数,而是编译器编译生成可执行文件时插入_start函数,这个函数主要功能就是进行初始化(比如全局变量),然后_start函数调用main函数。
具体过程你可以看看下面这篇文章
https://embeddedartistry.com/blog/2019/04/08/a-general-overview-of-what-happens-before-main/
板子开机上电先加载一段固化程序自检后读取指定地址位的代码运行,也就是bootloader,然后由bootloader负责加载具体的程序,OS或者mcu程序
一般可执行文件都有一个入口地址(由PE格式指定),这个入口地址就是程序加载时直接跳到那里去执行。一般来说这个入口地址不是main函数,而是编译器编译生成可执行文件时插入_start函数,这个函数主要功能就是进行初始化(比如全局变量),然后_start函数调用main函数。
具体过程你可以看看下面这篇文章
https://embeddedartistry.com/blog/2019/04/08/a-general-overview-of-what-happens-before-main/