在裸机微控制器应用程序中是否需要 GCC 的 .fini 部分?
Is there any need for GCC's .fini section in a bare-metal microcontroller application?
据我所知,.fini 用于在 main
return 秒后销毁静态存储持续时间对象。在典型的裸机应用程序中,main
不会 return。有什么理由不简单地从链接描述文件中删除这些符号吗?
In a typical bare-metal application, main does not return.
main()
确实可以 return 到启动代码,可以自定义在应用程序退出后执行某些操作,例如重新启动它、切断电源或开始固件更新。在这种情况下,可能需要静态析构函数。
Is there any reason not to simply remove these symbols from the linker script?
如果 main()
never returns and exit()
is never called,那么你当然可以删除这些符号,但是库启动会错过它们,你会必须提供一个函数来覆盖遍历 __fini_array
.
的库函数
如果您正在使用 newlib
,您可以使用 --enable-lite-exit
重新编译它以忽略所有 fini
内容。
据我所知,.fini 用于在 main
return 秒后销毁静态存储持续时间对象。在典型的裸机应用程序中,main
不会 return。有什么理由不简单地从链接描述文件中删除这些符号吗?
In a typical bare-metal application, main does not return.
main()
确实可以 return 到启动代码,可以自定义在应用程序退出后执行某些操作,例如重新启动它、切断电源或开始固件更新。在这种情况下,可能需要静态析构函数。
Is there any reason not to simply remove these symbols from the linker script?
如果 main()
never returns and exit()
is never called,那么你当然可以删除这些符号,但是库启动会错过它们,你会必须提供一个函数来覆盖遍历 __fini_array
.
如果您正在使用 newlib
,您可以使用 --enable-lite-exit
重新编译它以忽略所有 fini
内容。