Есть ли необходимость в разделе .fini GCC в приложении с микроконтроллером из чистого металла? - PullRequest
0 голосов
/ 12 июня 2018

Из того, что я могу найти, .fini используется для уничтожения статических объектов продолжительности хранения после возврата main.В типичном приложении без покрытия main не возвращается.Есть ли причина не просто удалять эти символы из скрипта компоновщика?

1 Ответ

0 голосов
/ 12 июня 2018

В типичном «голом железе» приложение main не возвращает.

main() действительно может вернуться к коду запуска, который можно настроить для выполнения каких-либо действий после выхода из приложения.Например, перезапустите его, отключите питание или запустите обновление прошивки.В этом случае могут потребоваться статические деструкторы.

Есть ли причина не просто удалять эти символы из сценария компоновщика?

Если main() никогда не возвращается иexit() никогда не вызывается, тогда, конечно, вы можете удалить эти символы, но тогда при запуске библиотеки они будут пропущены, и вам нужно будет предоставить функцию для переопределения функции библиотеки, которая перебирает __fini_array.

Если вы используете newlib, вы можете перекомпилировать его с помощью --enable-lite-exit, чтобы пропустить все fini вещи.

...