Уважаемые, подскажите - как сказать IAR-у чтобы он не inline-ил функцию? А то что-то на вскидку не нашёл в доке на компилятор.... Можно конечно поставить __root, но сиё не очень правильно, ибо будет включать код функции даже когда она не используется, а этого не хотелось-бы.
Чтобы не было лишних вопросов, поясню "зачем": Имеется некая функция в которой в начале кратковременно нужно использовать большой объём стека (под временный большой массив). Далее этот массив не используется никак. И после этого из этой функции вызывается много других с глубоким уровнем вложенности (большим расходом стека на вызовы). А если описать этот массив как простой локальный, то выделенный под него объём стека далее висит мёртвым грузом. IAR это дело почему-то не оптимизирует, хотя мог-бы сделать ADD SP, #... Хотя включена максимальная оптимизация.
Выхожу из этого выделяя область функции, где идёт использование временного массива, в отдельную функцию. Но если не применять __root, то, при максимальной оптимизации, компилятор инлайнит её и включает её фрейм стека во фрейм стека вызывающей функции и получаем исходное положение с потерянным неиспользуемым объёмом стека. Или может кто знает лучшее решение такой проблемы чем inline-функция?
|