ATmega48 слишком большой размер программы

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
e226329
Родился
Сообщения: 3
Зарегистрирован: Вс сен 19, 2010 18:03:13

ATmega48 слишком большой размер программы

Сообщение e226329 »

Здравствуйте.
Помогите, пожалуйста, понять почему у меня простейшая прошивка занимает почти всю память. Там вроде ничего особенного - в дополнение к обычному миганию светодиодом, только циклическая выдача алфавита в UART, а флеша занимает 3,9кб.

Для организации задержек использую функцию _delay_ms(). Если ее закомментировать, то размер становиться нормальный (байт ~300 примерно). Тут бы и успокоится мне, и подумать, что это библиотека такая большая, но ведь раньше при простом мигании светодиодом я ее использовал и размер был небольшим.

Подскажите, что я делаю не так ?
Вложения
test5_uart.c
(1.73 КБ) 239 скачиваний
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: ATmega48 слишком большой размер программы

Сообщение Kavka »

Найдите два отличия с вашим файлом (не считая испорченных комментариев).
И взгляните на определение функции _delay_ms в соответствующем h-файле.
Надеюсь этих подсказок будет достаточно чтобы понять на что уходит около 3500 байт. :kill: :)
Вложения
test3.c
(1.72 КБ) 360 скачиваний
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Шурики
Вымогатель припоя
Сообщения: 506
Зарегистрирован: Пн авг 31, 2009 22:10:50
Откуда: СК

Re: ATmega48 слишком большой размер программы

Сообщение Шурики »

Или дизассемблировать два варианта скомпилированного файла (в 300 байт и почти 4Кб) и увидеть, я так думаю, кучу операций типа NOP.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: ATmega48 слишком большой размер программы

Сообщение Kavka »

Шурики писал(а):Или дизассемблировать два варианта скомпилированного файла (в 300 байт и почти 4Кб) и увидеть, я так думаю, кучу операций типа NOP.
Ну-ну. Поищите там кучу NOP-ов на досуге. :kill:
Дальше - без комментариев.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
e226329
Родился
Сообщения: 3
Зарегистрирован: Вс сен 19, 2010 18:03:13

Re: ATmega48 слишком большой размер программы

Сообщение e226329 »

Kavka писал(а):... взгляните на определение функции _delay_ms в соответствующем h-файле.
Надеюсь этих подсказок будет достаточно чтобы понять на что уходит около 3500 байт.

Огромное спасибо.

Нашел файл <util/delay.h> и там в одном из комментариев дано объяснение почему так происходит:
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.
Т.е. параметр функции _delay_ms должен быть выражением, которое известно на этапе компиляции. Тогда его подсчитает компилятор. А если это будет переменная, как в моем случае, компилятор его посчитать не сможет и придется это значение вычислять во время выполнения программы. А поскольку там используются вычисления с плавающей точкой, то будет прилинкована соответствующая здоровущая библиотека.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»