Большой размер прошивки после компиляции

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Kavka писал(а): А если нету makefile-а? Здравствуте грабли!?
Настраивал прямо в 4-ой студии... и нет никаких граблей...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Я об этом строчкой выше написал.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 141
Зарегистрирован: Ср окт 26, 2011 13:38:13

Сообщение dem66 »

Ну откомпилировал я с помощью мейк файла, результат 9,8Кб

Код: Выделить всё

TARGET = tar
F_CPU = 10000000
CSRC = freq.c
MCU_TARGET = atmega8
MCU = atmega8
ASRC =
OPTIMIZE = -Os -mcall-prologues
CC = avr-gcc
DEFS = 
LIBS = -lm
DEBUG = dwarf-2
OBJCOPY = avr-objcopy
CFLAGS = -g -mmcu=$(MCU) -Wall -Wstrict-prototypes 
#-------------------
all: freq.hex
#-------------------
freq.hex : freq.out 
	$(OBJCOPY) -R .eeprom -O ihex freq.out freq.hex 
freq.out : freq.o 
	$(CC) $(CFLAGS) -o freq.out -Wl,-Map,freq.map freq.o 
freq.o : freq.c 
	$(CC) $(CFLAGS) -Os -c freq.c
#-------------------
clean:
	rm -f *.o *.map *.out
#-------------------
Это не хвост, это антенна
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

Какой смысл приводить размер файла HEX ?????

Можно же в человеческом виде инфу давать, как то так:
Program: 3592 bytes (43.8% Full)
Data: 270 bytes (26.4% Full)
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

неплохо было бы еще его запустить


пы сы Я сдаюсь, меня победили.
Вложения
kkot.zip
(17 КБ) 140 скачиваний
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 141
Зарегистрирован: Ср окт 26, 2011 13:38:13

Сообщение dem66 »

Код: Выделить всё

bash-4.1$ make all
rm -rf *.o tar.elf *.eps *.bak *.a
rm -rf *.lst *.map 
rm -rf tar.hex
avr-gcc -gdwarf-2 -Wall -Os -mcall-prologues -mmcu=atmega8    -c -o main.o main.c
main.c: In function 'SetFreq':
main.c:17: warning: statement with no effect
avr-gcc -gdwarf-2 -Wall -Os -mcall-prologues -mmcu=atmega8  -Wl,-Map,tar.map -o tar.elf main.o -lm
avr-objdump -h -S tar.elf > tar.lst
avr-objcopy -j .text -j .data -O ihex tar.elf tar.hex
avr-size -C --mcu=atmega8 tar.elf
avr-size: invalid option -- 'C'
Usage: avr-size [option(s)] [file(s)]
 Displays the sizes of sections inside binary files
 If no input file(s) are specified, a.out is assumed
 The options are:
  -A|-B     --format={sysv|berkeley}  Select output style (default is berkeley)
  -o|-d|-x  --radix={8|10|16}         Display numbers in octal, decimal or hex
  -t        --totals                  Display the total sizes (Berkeley only)
            --common                  Display total size for *COM* syms
            --target=<bfdname>        Set the binary file format
            @<file>                   Read options from <file>
  -h        --help                    Display this information
  -v        --version                 Display the program's version

avr-size: supported targets: elf32-avr elf32-little elf32-big srec symbolsrec tekhex binary ihex
make: *** [size] Ошибка 1
Это из вашего же архива, вот такие дела :(
Это не хвост, это антенна
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Код: Выделить всё

avr-size -C --mcu=atmega8 tar.elf
Уберите "-C" отсюда. И попробуйте ещё раз.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Встал на лапы
Аватара пользователя
Сообщения: 141
Зарегистрирован: Ср окт 26, 2011 13:38:13

Сообщение dem66 »

Убрал, бестолку.

Код: Выделить всё

bash-4.1$ make all
rm -rf *.o tar.elf *.eps *.bak *.a
rm -rf *.lst *.map 
rm -rf tar.hex
avr-gcc -gdwarf-2 -Wall -Os -mcall-prologues -mmcu=atmega8    -c -o main.o main.c
avr-gcc -gdwarf-2 -Wall -Os -mcall-prologues -mmcu=atmega8  -Wl,-Map,tar.map -o tar.elf main.o -lm
avr-objdump -h -S tar.elf > tar.lst
avr-objcopy -j .text -j .data -O ihex tar.elf tar.hex
avr-size --mcu=atmega8 tar.elf
avr-size: unrecognized option '--mcu=atmega8'
Usage: avr-size [option(s)] [file(s)]
 Displays the sizes of sections inside binary files
 If no input file(s) are specified, a.out is assumed
 The options are:
  -A|-B     --format={sysv|berkeley}  Select output style (default is berkeley)
  -o|-d|-x  --radix={8|10|16}         Display numbers in octal, decimal or hex
  -t        --totals                  Display the total sizes (Berkeley only)
            --common                  Display total size for *COM* syms
            --target=<bfdname>        Set the binary file format
            @<file>                   Read options from <file>
  -h        --help                    Display this information
  -v        --version                 Display the program's version

avr-size: supported targets: elf32-avr elf32-little elf32-big srec symbolsrec tekhex binary ihex
make: *** [size] Ошибка 1
Кстати вот немного подправленый вариант прошивки.
Спойлер

Код: Выделить всё

#define F_CPU 10000000UL
#define TIK 0.0000001

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

int timer0;
int timer1;
int presc;

int SetFreq(char set){      
   float tik = (float)presc * TIK;
   float period = (256.0-(float)timer0)*tik;
   float freq = (1.0/period)/2.0;
   
   freq = freq+10.0;
   
   int temp = (int)(256.0-(((1.0/freq)/tik)/2.0));
   if(temp>0 && temp<=256){
      timer0 = temp;
   }

   return 1;
}

int main(void){   
   timer0 = 256-161;
   timer1 = 999;
   presc = 256;
   
   SetFreq('1');
   
   while(1)
   {
      //_delay_ms(500);
   }
}
Это не хвост, это антенна
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Елки-палки, вы что, совсем не разбираетесь чего оно ругается? :) (смайлик чуть не забыл)
Уберите ещё "--mcu=atmega8"
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Встал на лапы
Аватара пользователя
Сообщения: 141
Зарегистрирован: Ср окт 26, 2011 13:38:13

Сообщение dem66 »

Все отображается.

Немного преписал прошивку
Спойлер

Код: Выделить всё

#define F_CPU 10000000UL
#define TIK 0.0000001

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

int timer0;
int timer1;
int presc;

int SetFreq(char set){      
   float tik = presc * TIK;
   float freq = (1/((256-timer0)*tik))/2;
	freq = freq+10;
	int temp = (int)(256-(((1/freq)/tik)/2));
	
   if(temp>0 && temp<=256){
		timer0 = temp;
		 //printf("%d", temp);
		//puts("\r\n");
   }

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

Код: Выделить всё

text	   data	    bss	    dec	    hex	filename
   1316	      0	      6	   1322	    52a	tar.elf
Что еще можно сделать с теми вычислениями, те формулы что писали выше немного не те
Это не хвост, это антенна
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Рад за вас, что получилось.

А что, Ser60 ошибся в своих выкладках?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

dem66 писал(а): Что еще можно сделать с теми вычислениями, те формулы что писали выше немного не те
http://www.pic24.ru/doku.php/osa/articl ... out_errors
"Я не даю готовых решений, я заставляю думать!"(С)
Встал на лапы
Аватара пользователя
Сообщения: 141
Зарегистрирован: Ср окт 26, 2011 13:38:13

Сообщение dem66 »

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

а он пишет 256 - (0.0000257/120)/2 = 255.999999893

93 и 255 разные вещи.

Ну или я чегото не понимаю
Это не хвост, это антенна
Друг Кота
Аватара пользователя
Сообщения: 3785
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Да, видать он ошибся. Формула для freq:
freq = tic/(2*(256 - timer0))
и тогда
temp = 256 - 1/(2*freq*tic) = 256 - (256 - timer0) /(tic*tic).
Так что-ли (?) Если опять ошибка, попробуйте сами упростить формулу, минимизировав число делений.
Ответить

Вернуться в «AVR»