реклама на сайте
подробности

 
 
> Disable inline
jcxz
сообщение Apr 24 2014, 10:10
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Уважаемые, подскажите - как сказать IAR-у чтобы он не inline-ил функцию?
А то что-то на вскидку не нашёл в доке на компилятор....
Можно конечно поставить __root, но сиё не очень правильно, ибо будет включать код функции даже когда она не используется, а этого не хотелось-бы.

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

Выхожу из этого выделяя область функции, где идёт использование временного массива, в отдельную функцию. Но если не применять __root, то, при
максимальной оптимизации, компилятор инлайнит её и включает её фрейм стека во фрейм стека вызывающей функции и получаем исходное положение
с потерянным неиспользуемым объёмом стека.
Или может кто знает лучшее решение такой проблемы чем inline-функция?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SSerge
сообщение Apr 24 2014, 11:56
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



#pragma inline = never


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 25 2014, 03:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(SSerge @ Apr 24 2014, 17:56) *
#pragma inline = never

О! Спасибо! Это работает.
Интересно - а почему в даташите на IAR нету этой прагмы? wacko.gif

Цитата(megajohn @ Apr 24 2014, 17:15) *
ведь в C89 выделение на стеке переменных начинается по { и высвобождается по }

Хм... Учту это на будущее.
Но к сожалению
во-первых: у нас проект уже большой и собирается под IAR5.50, где нет C89.
и во-вторых: написан он под C++, а при такой компиляции даже IAR6.50 не даёт включить C89.
crying.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 02:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016