assembly KEIL的__main中有哪些操作

l7wslrjt  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(185)

在用户的应用程序中运行main()函数之前,它会IMPORT __main并执行__main,所以我想知道这个函数是做什么的?
__main
将rw变量从flash复制到ram?初始化bss部分?初始化堆栈/堆部分?还有什么?
它是否根据定义执行区域的scater文件进行初始化?

zc0qhyus

zc0qhyus1#

https://developer.arm.com/documentation/100748/0618/Embedded-Software-Development/Application-startup复制

应用程序启动

在大多数嵌入式系统中,在执行主任务之前执行初始化序列以设置系统。
下图显示了默认的初始化序列。
图1.默认初始化序列

默认初始化序列__main负责设置内存,__rt_entry负责设置运行时环境。
__main执行代码和数据复制、解压缩和ZI数据的零初始化。然后分支到__rt_entry以设置堆栈和堆、初始化库函数和静态数据,并调用任何顶级C++构造函数。__rt_entry然后分支到main当主应用程序完成执行时,__rt_entry关闭库,然后将控制权交还给调试器。
函数标签main()具有特殊的意义。main()函数的存在会强制链接器链接__main和__rt_entry中的初始化代码。如果没有标签main()的函数,初始化序列就不会被链接,因此,一些标准的C库功能就不被支持。

相关问题