Например TDA7294

Форум РадиоКот • Просмотр темы - Большой размер прошивки после компиляции
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср май 14, 2025 21:37:34

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 34 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 19:21:52 
Встал на лапы
Аватар пользователя

Зарегистрирован: Ср окт 26, 2011 13:38:13
Сообщений: 141
Рейтинг сообщения: 0
Доброго времени суток.
Пытаюсь в амеге 8 работать с числами с плавающей точкой, в коде проводятся некоторые вычисления и полученый результат дальше используется. Получается так что после того как откомпилирую исходник прошивка получается нереально большой, пишу на Си, компилирую в avr-gcc.

Вот пример кода
Код:
#define F_CPU 10000000UL

#include <stdio.h>
#include <avr/io.h>

int timer0;
int timer1;
int presc;

int SetFreq(char set){      
   //tik = 0.0000257;
      
   float tik = (((1.0/((10000000.0/presc)/256.0))/255.0)*10000000.0)/10000000.0;
   
   int freq = (int)(1.0/(256.0-timer0)*tik)/2.0;
   freq+10;
   
   //printf("%f", tik);
   //puts("\r\n");
   int temp = (int)(256.0-(((1.0/freq)/tik)/2.0));
   if(temp>0 && temp<=256){
      //printf("%d", temp);
      //puts("ok\r\n");
      timer0 = temp;
   }

   return 1;
}

int main(void){   
   timer0 = 256-161;
   timer1 = 999;
   presc = 256;
   
   SetFreq('1');
   
   while(1)
   {
      //_delay_ms(500);
   }
}


Откомпилировав получаю hex файл размером 9,8Kb :shock: :shock: :shock: ну как так :(

_________________
Это не хвост, это антенна


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 19:46:54 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Ну, а вы как себе представляете как реализуются операции с плавающей точкой на 8-битном процессоре имеющим команды только для сложения, вычитания и умножения?

Какая версия gcc? Какие опции компилятора?

У меня получилось меньше.
Program: 3592 bytes (43.8% Full)
Data: 270 bytes (26.4% Full)

Думаю, что можно ещё меньше получить... :idea:

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 19:56:04 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
dem66 писал(а):
Откомпилировав получаю hex файл размером 9,8Kb :shock: :shock: :shock: ну как так :(
.hex всегда больше прошивки.

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 20:05:10 
Встал на лапы
Аватар пользователя

Зарегистрирован: Ср окт 26, 2011 13:38:13
Сообщений: 141
Рейтинг сообщения: 0
ibiza11, не ну это понятно, но не на столько же.

avr-gcc -v
Using built-in specs.
Target: avr
Configured with: ../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-language=c : (reconfigured) ../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-language=c --disable-libssp
Thread model: single
gcc version 4.3.2 (GCC)

Опции компиляции
Код:
avr-gcc -mmcu=atmega8 -g -Os -Werror -lm  -mcall-prologues -o firmware.o freq.c


Пробовал также компилировать с опцией -Wall, бестолку.

Kavka, возможно просто ваш компилятор посчитал некоторые строки ненужными и тупо вырезал

_________________
Это не хвост, это антенна


Вернуться наверх
 
Открыт интернет-магазин MEAN WELL.Market – весь ассортимент MEAN WELL, выгодные цены

Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России. На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 20:09:41 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
Тут тоже как то обсуждали размр проги с плавающей точкой: viewtopic.php?f=20&t=6996&p=1543016&hilit=%D0%BF%D0%BB%D0%B0%D0%B2%D0%B0%D1%8E%2A#p1543016

Оказалось, что при наличии плавающей точки, 4-я версия делает намного больший код чем 6-я версия.....


Последний раз редактировалось shads Чт фев 14, 2013 20:31:27, всего редактировалось 1 раз.

Вернуться наверх
 
LED-драйверы MOSO - надежные решения для индустриальных приложений

Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO подробнее>>
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 20:25:06 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
ibiza11, да уж, про HEX я "промахнулся" :)

Но размер можно ещё уменьшить.
У меня получилось так:
Program: 1372 bytes (16.7% Full)
Data: 6 bytes (0.6% Full)
HEX: 3875

gcc version 4.3.3 (WinAVR 20100110)

dem66, shads
Не помню где читал:
"Народ всё больше и больше отключает свои мозги и полагается на компьютеры с работающими там программами, забывая о том, что программы пишут такие же отключающие мозги... Процесс итерационный..."
Печалька, в общем. :(

Документацию не читаем, а возмущаемся
http://www.nongnu.org/avr-libc/user-man ... l#faq_math

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 20:30:21 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
Kavka писал(а):
Но размер можно ещё уменьшить.
У меня получилось так:
Program: 1372 bytes (16.7% Full)
Data: 6 bytes (0.6% Full)
HEX: 3875

gcc version 4.3.3 (WinAVR 20100110)


Подверждаю эти цифры...
==

Ничему AVReal некоторых так и не научил... видать было сразу... "Не в коня корм!"... :)))

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 20:35:24 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Мне вот интересно. :) А "правильный" вопрос будет задан или нет?

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 20:39:51 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
HHIMERA писал(а):
Ничему AVReal некоторых так и не научил... видать было сразу... "Не в коня корм!"... :)))

Ты хвастать только можеш... гений.....
Когда вопрос задали... че не ответил? народ за быдло считаеш..... ну и считай..... "всезнающий и всемогущий".....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 20:45:15 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
shads писал(а):
че не ответил?

А зачем???
AVReal'а ещё раз пересказывать??? И что толку... сколько можно???
Цитата:
народ за быдло считаеш..... ну и считай..... "всезнающий и всемогущий".....

Народ - нет...
Быдло - да...

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 20:57:00 
Модератор
Аватар пользователя

Карма: 68
Рейтинг сообщений: 424
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Сообщений: 13490
Откуда: Тамбовская обл.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Срач прекращаем. Отвечаем на вопрос аргументированно, с чувством, с толком, с расстановкой...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 22:26:36 
Встал на лапы
Аватар пользователя

Зарегистрирован: Ср окт 26, 2011 13:38:13
Сообщений: 141
Рейтинг сообщения: 0
Блин развели тут черт знает что.

а по теме то откомпилировал это дело в
Код:
avr-gcc-4.6.2 -Wall -mmcu=atmega8 -g -Os -Werror -lm  -mcall-prologues -o firmware.o freq.c


И оно вместе 9,5 уже 10,2Кб :))

_________________
Это не хвост, это антенна


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 23:03:13 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
dem66 писал(а):
а по теме то откомпилировал это дело

Это не дело... так проги не пишут...
Это просто ужас... а вы за размер HEX переживаете...

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 23:09:43 
Встал на лапы
Аватар пользователя

Зарегистрирован: Ср окт 26, 2011 13:38:13
Сообщений: 141
Рейтинг сообщения: 0
А как пишут а?

_________________
Это не хвост, это антенна


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Чт фев 14, 2013 23:55:48 
Друг Кота
Аватар пользователя

Карма: 75
Рейтинг сообщений: 607
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3721
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Замечания по коду:

1. Зачем в формуле
float tik = (((1.0/((10000000.0/presc)/256.0))/255.0)*10000000.0)/10000000.0;
сначала умножать величину на 10000000.0 в конце формулы а потом делить на нее?
Если уж вычислять по этой формуле, то следует ее сначала упростить до
freq = precs * (256/(255 * 10^7))
и вычислить константу на калькуляторе, потом подставив в формулу. Получится только одно умножение с плавающей точкой.

2. Формулу для temp
int temp = (int)(256.0-(((1.0/freq)/tik)/2.0));
можно переписать в виде
temp = 256 - (tik/freq)/2

Из формулы для freq
int freq = (int)(1.0/(256.0-timer0)*tik)/2.0;
получаем
tik/freq = 2(256 - timer0)

Подставляя это в выражение для temp получим
temp = 256 - (tik/freq)/2 = 256 - 2(256 - timer0))/2 = timer0

Получается, что вычисления с плавающей точкой здесь не нужны вообще (?)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Пт фев 15, 2013 05:38:46 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
dem66 писал(а):
Код:
avr-gcc-4.6.2 -Wall -mmcu=atmega8 -g -Os -Werror -lm  -mcall-prologues -o firmware.o freq.c
Не ужель никто не видит? :shock:

dem66 писал(а):
Kavka, возможно просто ваш компилятор посчитал некоторые строки ненужными и тупо вырезал

Неа. Компилятор нормально всё делает. Точно так как ему указали! Точно в соответствии алгоритму заложенному в программу.
Только из-за незнания заложенного алгоритма мы, в том что указано, подразумеваем одно, а компилятор - другое. (Только не надо обвинять компьютер, что он тупой. :)) )

Ser60, это уже другой аспект. Изначально надо с компиляцией разобраться.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Пт фев 15, 2013 09:36:38 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
Что не видит ?
Что флоат здесь и близко не нужен или что вместе с одним файлом линкуется второй ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Пт фев 15, 2013 10:28:33 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Про уместность флоата - отдельная тема. Я выше уже говорил.
А по поводу линковки... В том то и дело, что НЕ линкуется!
Код прежний - из первого сообщения темы.
Опции те, что dem66 приводил.

Код:
> avr-gcc -mmcu=atmega8 -g -Os -Werror -lm  -mcall-prologues -o fp_test.o test_fp.c
> avr-size fp_test.o
   text    data     bss     dec     hex filename
   3328     264       6    3598     e0e fp_test.o

> avr-gcc -mmcu=atmega8 -g -Os -Werror -mcall-prologues -o fp_test.o test_fp.c -lm
> avr-size fp_test.o
   text    data     bss     dec     hex filename
   1394       0       6    1400     578 fp_test.o

Как говориться - найдите отличия. :)

Если всё делать в 4й студии, то она правильно всё делает при подключении математической библиотеки.
А 6-ую студию, видать, уже поумнее сделали, она судя по всему, автоматом подключает математическую библиотеку.

Вот ещё примерчик накидал.
В зависимости от места в командной строке опции -lm результат будет разным.
И это только с объектными файлами. С библиотеками бывает ещё хуже.
Код:
# COMPILE
avr-gcc -c -mmcu=atmega8 -g -Os -Werror -mcall-prologues -o test_fp.o test_fp.c
avr-gcc -c -mmcu=atmega8 -g -Os -Werror -mcall-prologues -o test_fp1.o test_fp1.c
avr-gcc -c -mmcu=atmega8 -g -Os -Werror -mcall-prologues -o test_fp2.o test_fp2.c

# LINK
avr-gcc -mmcu=atmega8 -g -Os -Werror -mcall-prologues -lm -o test_fp.bin test_fp.o test_fp1.o test_fp2.o
avr-size test_fp.bin
   text    data     bss     dec     hex filename
   3600     264       6    3870     f1e test_fp.bin

avr-gcc -mmcu=atmega8 -g -Os -Werror -mcall-prologues -o test_fp.bin test_fp.o -lm  test_fp1.o test_fp2.o
avr-size test_fp.bin
   text    data     bss     dec     hex filename
   3600     264       6    3870     f1e test_fp.bin

avr-gcc -mmcu=atmega8 -g -Os -Werror -mcall-prologues -o test_fp.bin test_fp.o -lm  test_fp1.o -lm  test_fp2.o
avr-size test_fp.bin
   text    data     bss     dec     hex filename
   1666       0       6    1672     688 test_fp.bin

avr-gcc -mmcu=atmega8 -g -Os -Werror -mcall-prologues -o test_fp.bin test_fp.o -lm  test_fp1.o test_fp2.o -lm
avr-size test_fp.bin
   text    data     bss     dec     hex filename
   1666       0       6    1672     688 test_fp.bin

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Пт фев 15, 2013 11:36:54 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: 0
да ну, раздули ерунду на 100 постов. Редактировать нужно Makefile , а не командную строку, не царское это дело, в ней ковыряться. Тогда оно правильно все построит. А ручками воткнуть посредине, оно считает, наверное, что это одна из опций оптимизации и выбрасывает, не матерясь, за ненадобностью.
-lm значит всего лишь, что линкером подключается математическая библиотека libm.a , а в какой версии - 4 или 6 - до лампочки, я так думаю.
TARGET = tar
F_CPU = 10000000
CSRC = main.c
ASRC =
MCU_TARGET = atmega8
OPTIMIZE = -Os -mcall-prologues
DEFS =
LIBS = -lm
DEBUG = dwarf-2


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Большой размер прошивки после компиляции
СообщениеДобавлено: Пт фев 15, 2013 12:08:33 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Согласен, если бы автор темы правил makefile, или из студии настраивал то и вопроса не было бы.

А если нету makefile-а? Здравствуте грабли!?
В общем есть такая особенность. Кому интересно - возьмёт на заметку.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y