Здравствуйте.
Помогите, пожалуйста, понять почему у меня простейшая прошивка занимает почти всю память. Там вроде ничего особенного - в дополнение к обычному миганию светодиодом, только циклическая выдача алфавита в UART, а флеша занимает 3,9кб.
Для организации задержек использую функцию _delay_ms(). Если ее закомментировать, то размер становиться нормальный (байт ~300 примерно). Тут бы и успокоится мне, и подумать, что это библиотека такая большая, но ведь раньше при простом мигании светодиодом я ее использовал и размер был небольшим.
Подскажите, что я делаю не так ?
ATmega48 слишком большой размер программы
ATmega48 слишком большой размер программы
- Вложения
-
- test5_uart.c
- (1.73 КБ) 239 скачиваний
Re: ATmega48 слишком большой размер программы
Найдите два отличия с вашим файлом (не считая испорченных комментариев).
И взгляните на определение функции _delay_ms в соответствующем h-файле.
Надеюсь этих подсказок будет достаточно чтобы понять на что уходит около 3500 байт.

И взгляните на определение функции _delay_ms в соответствующем h-файле.
Надеюсь этих подсказок будет достаточно чтобы понять на что уходит около 3500 байт.
- Вложения
-
- test3.c
- (1.72 КБ) 360 скачиваний
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: ATmega48 слишком большой размер программы
Или дизассемблировать два варианта скомпилированного файла (в 300 байт и почти 4Кб) и увидеть, я так думаю, кучу операций типа NOP.
Re: ATmega48 слишком большой размер программы
Ну-ну. Поищите там кучу NOP-ов на досуге.Шурики писал(а):Или дизассемблировать два варианта скомпилированного файла (в 300 байт и почти 4Кб) и увидеть, я так думаю, кучу операций типа NOP.

Дальше - без комментариев.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: ATmega48 слишком большой размер программы
Kavka писал(а):... взгляните на определение функции _delay_ms в соответствующем h-файле.
Надеюсь этих подсказок будет достаточно чтобы понять на что уходит около 3500 байт.
Огромное спасибо.
Нашел файл <util/delay.h> и там в одном из комментариев дано объяснение почему так происходит:
Т.е. параметр функции _delay_ms должен быть выражением, которое известно на этапе компиляции. Тогда его подсчитает компилятор. А если это будет переменная, как в моем случае, компилятор его посчитать не сможет и придется это значение вычислять во время выполнения программы. А поскольку там используются вычисления с плавающей точкой, то будет прилинкована соответствующая здоровущая библиотека.the delay time must be an expression that is a known constant at compile-time. If these requirements are not met, (...) applications that otherwise do not use floating-point calculations will experience severe code bloat by the floating-point library routines linked into the application.