|
IAR AVR - когда вредна оптимизация... |
|
|
|
 |
Ответов
|
Apr 23 2009, 15:41
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 18-06-05
Пользователь №: 6 117

|
Цитата(xemul @ Oct 16 2007, 18:36)  Код #pragma optimize=none inline static void foo(void) { __watchdog_reset(); MCUSR &= ~(1 << WDRF); cli(); WDTCSR |= (1 << WDCE) | (1 << WDE); WDTCSR = 0x00; sei(); } Вопрос знатокам: в указаном примере функция foo будет встраиваться? Мне inlining удается только когда поставлена опция оптимизации - high, а иначе RCALL foo. Не помогает даже #pragma inline=forced. (IARAVR 5.11B)
|
|
|
|
|
Apr 23 2009, 20:05
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268

|
Цитата(Runner @ Apr 23 2009, 19:41)  Вопрос знатокам: в указаном примере функция foo будет встраиваться? Мне inlining удается только когда поставлена опция оптимизации - high, а иначе RCALL foo. Не помогает даже #pragma inline=forced. (IARAVR 5.11B)  Самая вероятная ситуация: будет в релизе со включенной оптимизацией (а может и нет), в дебажной - будет отдельной процедурой.
|
|
|
|
|
Apr 24 2009, 07:06
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Сергей Борщ @ Apr 24 2009, 10:53)  А что, у компилятора или линкера есть какая то магическая опция "релизная версия"? Есть переключение target-а на release/debug Это опция не компилятора/линкера, а такой жёлтенькой оболочки IAR EWB Причём и в том, и в другом можно задать любой уровень оптимизации, но по умолчанию в дебаге включен по-моему, "Best debug support", который отключает оптимизацию вообще
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Apr 24 2009, 10:00
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(MrYuran @ Apr 24 2009, 10:06)  Это опция не компилятора/линкера, а такой жёлтенькой оболочки IAR EWB В том то и дело. Это название совокупности галочек в настройках, расставленных оболочкой по умолчанию. Т.е. нельзя говорить о том, что поведение будет зависеть от выбора в оболочке target release или target debug. Поведение будет полностью определяться положением галочек, расставленных в оболочке, но никак не названием этого target. Цитата(Dog Pawlowa @ Apr 24 2009, 11:38)  Поскольку может быть встроена функция только в том же файле, где определена, встает вопрос вообще о правильности пути для более-менее серьезного проекта. Путь однозначно правильный. Если нужно, функции с квалификатором inline, также как и static, могут быть вынесены в заголовочный файл. Объявление в виде функции (в отличие от макроса) возлагает на компилятор заботу о контроле правильности типов, а также о создании временных переменных для хранения параметров. Просто надо разобраться, почему не работает #pragma inline=forced. Возможно, они перешли на _Pragma("inline = forced"). И зачем вообще компилировать с оптимизацией, отличной от high - тоже совсем другой разговор.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Apr 24 2009, 10:50
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Сергей Борщ @ Apr 24 2009, 13:00)  Объявление в виде функции (в отличие от макроса) возлагает на компилятор заботу о контроле правильности типов, а также о создании временных переменных для хранения параметров. В общем случае все это так, но если глянуть, с чего все начиналось у топикстартера, и какие же там переменные используются, то лично у меня вопрос остается. Это просто разный инструмент, как вилка и ложка. Ложкой безопаснее, но вилкой в умелых то руках можно за два удара восемь дырок....
--------------------
Уходя, оставьте свет...
|
|
|
|
Сообщений в этой теме
Alechin IAR AVR - когда вредна оптимизация... Oct 15 2007, 13:55 scifi Мне кажется, тут двух мнений быть не может: если н... Oct 15 2007, 17:54 PSP И еще не забыть запретить прерывания. Иначе баг из... Oct 15 2007, 19:56 IgorKossak Цитата(Alechin @ Oct 15 2007, 16:55) Побо... Oct 16 2007, 09:23 Alechin ЦитатаВ руководстве сказано:
это означает, что дан... Oct 16 2007, 15:22  sergeeff Цитата(Runner @ Apr 23 2009, 18:41) Вопро... Apr 23 2009, 21:37  Dog Pawlowa Цитата(Runner @ Apr 23 2009, 18:41) Вопро... Apr 24 2009, 08:38 tourist Цитата(Dog Pawlowa @ Apr 24 2009, 14:50) ... Apr 24 2009, 12:08 Dog Pawlowa Вот, наткнулся на свои макросы...
Хм, запрета прер... Apr 29 2009, 16:46 Dir Цитата(tourist @ Apr 24 2009, 15:08) При ... May 5 2009, 12:01  Сергей Борщ Цитата(Dir @ May 5 2009, 15:01) Т.е. явно... May 5 2009, 12:03   Dog Pawlowa Я бы сформулировал по другому:
Имеет ли право Атме... May 5 2009, 12:13   Dir Цитата(Сергей Борщ @ May 5 2009, 15:03) В... May 5 2009, 12:21    Сергей Борщ Цитата(Dir @ May 5 2009, 15:21) но, по па... May 5 2009, 13:07     Dir Цитата(Сергей Борщ @ May 5 2009, 16:07) О... May 5 2009, 14:12      Сергей Борщ Цитата(Dir @ May 5 2009, 17:12) Ведь посл... May 5 2009, 16:12       Dir Цитата(Сергей Борщ @ May 5 2009, 19:12) Н... May 5 2009, 17:57
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|