在裸机微控制器应用中是否需要GCC的.fini部分?

时间:2018-06-12 03:58:16

标签: embedded microcontroller ld bare-metal linker-scripts

根据我的发现,.fini用于在main返回后销毁静态存储持续时间对象。在典型的裸机应用程序中,main不会返回。有没有理由不简单地从链接描述文件中删除这些符号?

1 个答案:

答案 0 :(得分:4)

  

在典型的裸机应用程序中,main不会返回。

main()确实可以返回到启动代码,该代码可以在应用程序退出后自定义以执行某些操作,例如,重启,切断电源或启动固件更新。在这种情况下,可能需要静态析构函数。

  

有没有理由不从链接描述文件中删除这些符号?

如果main()永远不会返回且永远不会调用exit(),那么当然你可以删除这些符号,但是库启动会错过它们,你必须提供一个函数覆盖遍历__fini_array的库函数。

如果您使用的是newlib,则可以使用--enable-lite-exit重新编译它,以省略所有fini内容。