Перейти к содержанию
    

Не знаю как себя поведёт avr-gcc, но в аннотации к mspgcc про такую конструкцию написано, что при удачном стечении обстоятельств ждать будем вечно...
А там случайно эти обстоятельства не конкретизируются?

...

Вывод неправильный - не 'ждать вечно', а 'не ждать вообще'

 

Основной смысл последней цитаты - задержку лучше определить самому (с точностью до такта), чем отдавать на откуп компилятору
Это да, тут поспорить трудно (хотя и можно при большом желании и абсолютном взаимопонимании с компилятором) :rolleyes:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4.18 b700 WinAVR 20100110

Еще имеет значение чип, я выбрал ATmega168

Поставил эту версию, проблема исчезла, и уменьшился код: при компиляции в обоих случаях выдает 168 байт.

 

 

А если напишете #define WDR asm volatile ("wdr"), то не сможет.

Спасибо за подсказку, так действительно получается более оптимально.

 

Смею предположить, что оптимизирующий компилятор в одном случае может вставлять вызов функции, а в другом -- осуществлять in-line подстановку тела этой функции в месте ее вызова. Попробуйте отключить оптимизацию и, как абсолютно правильно сказал MrYuran, посмотрите листинги. Вы не только ответите на свой вопрос, но и существенно придвинетесь в сторону профи.

Листинг смотрел, там действительно в одном случае функция вызывается, а в другом подставляется.

Только я так и не понял, почему компилятор подставляет 100 байт тела функции, вместо того чтобы вызвать функцию 3 байтами.

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Листинг смотрел, там действительно в одном случае функция вызывается, а в другом подставляется.

Только я так и не понял, почему компилятор подставляет 100 байт тела функции, вместо того чтобы вызвать функцию 3 байтами.

Это зависит от того, какие остальные оптимизирующие ключи выставлены и от того, сколько раз эта функция вызывается.

Если один, то зачем тратить 3 байта на её вызов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если один, то зачем тратить 3 байта на её вызов?

В примере задержка вызывается два раза, и код подставляется дважды. Получается, вместо того чтобы потратить 6 байт на вызов, и 100 байт на тело функции, компилятор подставляет 200 байт.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот ключи для более тонкой настройки инлайна и анролла циклов:

CFLAGS += --param inline-call-cost=10
CFLAGS += --param max-unroll-times=100

#CFLAGS += -ftree-loop-ivcanon
#CFLAGS += -mcall-prologues
CFLAGS += -finline-small-functions
CFLAGS += -fearly-inlining
CFLAGS += -finline-limit=100
CFLAGS += -fno-unit-at-a-time

#CFLAGS += -fno-inline-small-functions
#CFLAGS += -fno-inline-functions
#CFLAGS += -fno-unroll-loops
#CFLAGS += -fno-unroll-all-loops

Может, ещё другие есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот ключи для более тонкой настройки инлайна и анролла циклов:

CFLAGS += --param inline-call-cost=10
CFLAGS += --param max-unroll-times=100

#CFLAGS += -ftree-loop-ivcanon
#CFLAGS += -mcall-prologues
CFLAGS += -finline-small-functions
CFLAGS += -fearly-inlining
CFLAGS += -finline-limit=100
CFLAGS += -fno-unit-at-a-time

#CFLAGS += -fno-inline-small-functions
#CFLAGS += -fno-inline-functions
#CFLAGS += -fno-unroll-loops
#CFLAGS += -fno-unroll-all-loops

Может, ещё другие есть.

 

Спасибо!

Попробовал первый ключ из Вашего списка, все стало компилироваться одинаково.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...