shamray
Nov 23 2005, 12:47
Как научить IAR не оптимизировать участок кода. Может кто знает?
Спасибо.
one_man_show
Nov 23 2005, 14:09
Почитайте в IAR Compiler Reference на счет #pragma optimize=....
Для IAR for MSC-51 доки не читал, но для MSP430 точно есть эта pragma, которая позволяет регулировать или отключать оптимизацию для части кода. Эта прагма имеет эффект только для функции, следующей сразу после неё.
Например,
#pragma optimize=s 9 - Оптимизация по скорости, High
#pragma optimize=z 6 - Оптимизация по размеру кода, Medium
#pragma optimize=s 2 - Оптимизация по скорости отключена
и т.д.
shamray
Nov 23 2005, 14:18
Надо не для функции а именно для части кода в функции. А #pragma optimize что-то не желает работать так как надо.
one_man_show
Nov 23 2005, 15:24
Выделите эту часть в отдельную функцию и для нее задайте прагму.
Цитата
А #pragma optimize что-то не желает работать так как надо.
А что именно не так работает?
shamray
Nov 24 2005, 07:39
Я понял почему не работает. Я просто пытался применить прагму к участку кода а не к функции целиком. Мне просто необходимо было точно выдержать задержку, а компиллер неправильно это оптимизировал. Буду бороться дальше. А вот вынос в отдельную функцию мне не подходит - теряется вся выгода - при вызове функции скидывается в стек большое количесство параметров и это происходит дольше чем требуется. Спасибо за помощь.
one_man_show
Nov 24 2005, 13:23
Ради интереса, можете выложить кусок сишного исходника с описанием того, что получается после оптимизации? Если не затруднит
IgorKossak
Nov 30 2005, 09:51
Если выделенную функцию обьявить static, то она будет инлайниться в то место откуда она вызвана (если это место одно и в одном файле с самой функцией).
При этом уровни оптимизации можно будет для выделенной функции задавать любые отличные от основной.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.