Настраивал прямо в 4-ой студии... и нет никаких граблей...Kavka писал(а): А если нету makefile-а? Здравствуте грабли!?
Большой размер прошивки после компиляции
"Я не даю готовых решений, я заставляю думать!"(С)
- Реклама
Я об этом строчкой выше написал.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 141
- Зарегистрирован: Ср окт 26, 2011 13:38:13
Ну откомпилировал я с помощью мейк файла, результат 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
Какой смысл приводить размер файла HEX ?????
Можно же в человеческом виде инфу давать, как то так:
Можно же в человеческом виде инфу давать, как то так:
Program: 3592 bytes (43.8% Full)
Data: 270 bytes (26.4% Full)
неплохо было бы еще его запустить
пы сы Я сдаюсь, меня победили.
пы сы Я сдаюсь, меня победили.
- Вложения
-
- kkot.zip
- (17 КБ) 140 скачиваний
- Реклама
- Сообщения: 141
- Зарегистрирован: Ср окт 26, 2011 13:38:13
Код: Выделить всё
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
Это не хвост, это антенна
Код: Выделить всё
avr-size -C --mcu=atmega8 tar.elfКогда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 141
- Зарегистрирован: Ср окт 26, 2011 13:38:13
Убрал, бестолку.
Кстати вот немного подправленый вариант прошивки.
Код: Выделить всё
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);
}
}
Это не хвост, это антенна
Елки-палки, вы что, совсем не разбираетесь чего оно ругается?
(смайлик чуть не забыл)
Уберите ещё "--mcu=atmega8"
Уберите ещё "--mcu=atmega8"
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 141
- Зарегистрирован: Ср окт 26, 2011 13:38:13
Все отображается.
Немного преписал прошивку
Что еще можно сделать с теми вычислениями, те формулы что писали выше немного не те
Немного преписал прошивку
Спойлер
Код: Выделить всё
#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
Это не хвост, это антенна
Рад за вас, что получилось.
А что, Ser60 ошибся в своих выкладках?
А что, Ser60 ошибся в своих выкладках?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
http://www.pic24.ru/doku.php/osa/articl ... out_errorsdem66 писал(а): Что еще можно сделать с теми вычислениями, те формулы что писали выше немного не те
"Я не даю готовых решений, я заставляю думать!"(С)
- Сообщения: 141
- Зарегистрирован: Ср окт 26, 2011 13:38:13
та чтото там с temp и freq непонятно.
Ну например
а он пишет 256 - (0.0000257/120)/2 = 255.999999893
93 и 255 разные вещи.
Ну или я чегото не понимаю
Ну например
int temp = (int)(256-(((1/120)/0.0000257)/2)) = 93.8728923482. Формулу для temp
int temp = (int)(256.0-(((1.0/freq)/tik)/2.0));
можно переписать в виде
temp = 256 - (tik/freq)/2
а он пишет 256 - (0.0000257/120)/2 = 255.999999893
93 и 255 разные вещи.
Ну или я чегото не понимаю
Это не хвост, это антенна
- Сообщения: 3785
- Зарегистрирован: Ср дек 24, 2008 09:58:58
Да, видать он ошибся. Формула для freq:
freq = tic/(2*(256 - timer0))
и тогда
temp = 256 - 1/(2*freq*tic) = 256 - (256 - timer0) /(tic*tic).
Так что-ли (?) Если опять ошибка, попробуйте сами упростить формулу, минимизировав число делений.
freq = tic/(2*(256 - timer0))
и тогда
temp = 256 - 1/(2*freq*tic) = 256 - (256 - timer0) /(tic*tic).
Так что-ли (?) Если опять ошибка, попробуйте сами упростить формулу, минимизировав число делений.


