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

609

Участник*
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. gcc для AVR

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

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

    Поставил эту версию, проблема исчезла, и уменьшился код: при компиляции в обоих случаях выдает 168 байт. Спасибо за подсказку, так действительно получается более оптимально. Листинг смотрел, там действительно в одном случае функция вызывается, а в другом подставляется. Только я так и не понял, почему компилятор подставляет 100 байт тела функции, вместо того чтобы вызвать функцию 3 байтами.
  4. gcc для AVR

    Спасибо! Завтра попробую скачать эту версию, посмотрю что получится. Если не использовать volatile, то компилятор может оптимизировать задержку, т.е. просто выполнить конечный результат функции. Вопрос не в том как сделать код задержки меньше, а почему при объявлении функции код увеличивается?
  5. gcc для AVR

    Компилирую при помощи WinAVR-20081205, прикрученном к AVR Studio 4.16. Про это я читал. Пробовал вместо void ставить int, но ситуация не меняется. Если точно, то с закомментированной строчкой получается 220 байт, а если я ее раскомментирую, то 364. Не могли бы Вы сказать, какой конкретно версией gcc пользуетесь.
  6. gcc для AVR

    Build succeeded with 0 Warnings...
  7. gcc для AVR

    Здравствуйте. Я программирую на языке C для микроконтроллеров AVR при помощи компилятора gcc. Нашел такую интересную особенность. В приведенном ниже коде программа занимает место порядка 200 байт. Если раскомментировать закомментированную строку с объявлением функции delay_ms, программа резко полнеет до 350 байт. Никак не могу разобраться, почему. Не могли бы вы мне помочь. Упорное чтение Кернигана и Ричи не помогает. Куда гуглить просто не знаю. Заранее спасибо за ответ. #define WDR asm("wdr") //void delay_ms(int time); void main(void) { delay_ms(1); delay_ms(1); } void delay_ms(int time) { volatile int Timer, Timer1; for (Timer=0; Timer<time; Timer++) for (Timer1=0; Timer1<51; Timer1++) WDR; } Заодно сразу показываю опции, которые передаю компилятору. Сам ничего крамольного в них не обнаружил. -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
×
×
  • Создать...