Оптимизация такая оптимизация


Картинко даже пояснения не требует. Кто-нибудь знает почему так? вижу такое в первый раз за год работы с AVR. Путем выноса отдельных участков кода выяснил, что по 3 кб жрут _delay_ms(). Но раньше такого никогда не было(с такой оптимизацией). И да, Build succeeded with 0 warnings если что)
  • +1
  • 09 августа 2011, 23:14
  • enq

Комментарии (21)

RSS свернуть / развернуть
Что такое .text .data — понятно, а что значит .bootloader?
+1
А кстати да. Может там бутлоадер жирный залез
0
бутлоадерами никогда не пользовался. даже хз как их прописывать на сях.
0
Хочу видеть ассемблерный листинг. Подозреваю что _delay_ms переродился во что-то ужасающее
+1
никогда не переождался и ВНЕЗАПНО мутировал от излучения монитора?
0
_delay_ms тупо набивает nop-ами код. Надо юзать обертку для этой ф-ции
void delayms(uint16_t millis) {
while ( millis ) {
_delay_ms(1);
millis--;
}
}
0
  • avatar
  • Zolen
  • 09 августа 2011, 23:28
это еще более нерационально. Так надо когда оптимизация отключена. Это же чистый ассемблер, тока другими словами
0
PORTB |= 1<<PD0;
… не существенно но, так надо или косяк?
0
косяк, уже поправил, ничего не изменилось.
0
… тогда и ддра смените на ддрб
0
все глупости в коде были исправлены еще до выкладывания скрина сюда. Код раздулся не от них. Есть еще мысли?
0
… а если создать проект заново, и посмотреть что будет?
0
делал, тоже самое
0
Так компилируется _delay_ms, когда параметр задержки неизвестен на этапе компиляции.
Сделайте функцию, скажем, beep250, и вызывайте в ней _delay_ms(250) — код сразу станет меньше, т.к. компилятор оптимизирует функцию _delay_ms под конкретную задержку.
+6
  • avatar
  • Resp
  • 10 августа 2011, 00:10
Вот ответ. При неизвестном на этапе компиляции значении задержки (и/или отключенной оптимизации) невозможно оптимизировать функцию _delay_ms, построенную на использовании чисел с плавающей запятой. Поэтому в код пихаются функции для этой запятой, а они немаленькие. Посмотрите, в файле delay.h есть соответствующее предупреждение.
+2
И при -O0 будет такой же эффект.
0
Ставьте -Os и не парьте людЯм мозги.
Второе: без листинга, как уже говорили, обсуждение сводится к беспредметному трепу.
0
У меня AVR studio 5.0 при использовании функции _delay_ms(del) вообще требует чтобы параметр del был константой. Может попробуйте передавать параметр не через функцию, а сразу define'ом его определите.
0
Тема закрыта, спасибо Resp за дельный ответ.
0
  • avatar
  • enq
  • 10 августа 2011, 11:19
так что, виной опять кривые руки?
0
нет, незнание особенностей delay.h
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.