Embedded C++ — уровень оптимизации библиотеки только для заголовковC++

Программы на C++. Форум разработчиков
Anonymous
Embedded C++ — уровень оптимизации библиотеки только для заголовков

Сообщение Anonymous »

В основном я разрабатываю прошивку для ARM Cortex M с использованием gcc и перехожу с C на C++, и хотя в целом я доволен переходом, есть некоторые вещи, которые я просто не могу понять правильно.В настоящее время я работаю над проектом с FreeRTOS и пытаюсь использовать emio (https://github.com/Viatorus/emio), который немного похож на fmt, но немного более легкий.< /p>
Когда я компилирую весь проект с -O2 или даже с -Og, использование стека является разумным, но хотя с простым C -Og было хорошо для отладки, с C++ я не могу поставить точки останова в большинстве шаблонных классов/методов, поскольку они, очевидно, встраиваются/оптимизируются, поэтому мне приходится переходить к -O0 для правильной отладки, когда это необходимо.
К сожалению, -O0 имеет серьезные проблемы с emio ; любая задача, использующая форматирование (которое я использую для ведения журнала), требует около 6 КБ стека, чтобы избежать переполнения, тогда как более высокая оптимизация может быть менее 1,5 КБ.
Есть ли способ сделать только заголовок скомпилировать библиотеку с ключом -O2 во всех источниках, использующих эту библиотеку, чтобы можно было провести качественную отладку без необходимости искусственно изменять все уровни стека? Или есть какой-нибудь другой совет или предложение о том, как более опытные разработчики справляются с такого рода проблемами?
Поскольку нужно включить единственный заголовочный файл, я попытался добавить прагму, чтобы заставить все emio, чтобы иметь уровень оптимизации -O2, так как мне, вероятно, не понадобится его отлаживать, но это не работает, поскольку кажется, что создание экземпляра всего внутри не учитывает прагму.
Характер библиотеки делает практически невозможным простое создание экземпляра и использование внешнего шаблона вручную, поэтому я не знаю, что с этим можно сделать.

Подробнее здесь: https://stackoverflow.com/questions/786 ... tion-level

Вернуться в «C++»