voice
Guest
Wed Mar 17, 2004 2:54 am
cześć!
Proszę Was o pomoc bo ja juz odpadam...
Dopiero zacząłem programować AVR'y i nie potrafię skompilować
projektu składającego się z 3 plików: main.c, tools.h i tools.c
main.c:
#v+
#include "tools.h"
int main()
{
int i;
i = foo(i);
return 0;
}
#v-
tools.h
#v+
extern int foo(int i);
#v-
tools.c
#v+
int foo(int i)
{
return i;
}
#v-
Bardzo proszę o jakieś proste makefile do tego :/
Pokazałbym swoje, ale tyle ich już napisałem i mam taki mętlik w
głowie, że sam nie wiem, które miałbym tu cytować.
Pozdrawiam,
voice
--
unsigned int gg = 2627828;
Jacek R. Radzikowski
Guest
Wed Mar 17, 2004 2:54 am
voice <po.co@komu.dzis> wrote:
Quote:
cześć!
Proszę Was o pomoc bo ja juz odpadam...
Dopiero zacząłem programować AVR'y i nie potrafię skompilować
projektu składającego się z 3 plików: main.c, tools.h i tools.c
[...]
Quote:
Bardzo proszę o jakieś proste makefile do tego :/
Pokazałbym swoje, ale tyle ich już napisałem i mam taki mętlik w
głowie, że sam nie wiem, które miałbym tu cytować.
Nie testowany, ale powinien dzialac z gnu make
----= cut here =---
###
#kompilator
###
#popraw stosownie do swojej konfiguracji
CC=/usr/local/avr-gcc/bin/avr-gcc
#opcje kompilacji
#zmien sciezke i dodaj ewentualne dlasze opcje
CFLAGS= -I/sciezka/do/includow/avr-gcc
###
#linker
###
LD=/usr/local/avr-gcc/bin/avr-gcc
#sciezki do bibliotek+ewewntualne dodatkowe opcje dla linkera
LDFLAGS= -L/sciezka/do/bibliotek/avr-gcc
# ewentualne biblioteki ktore bedziesz chcial dolinkowac.
# np. jesli uzywasz liczb zmiennoprzecinkowych, dodaj -lm
LDLIBS=
###
program: main.o tools.o
main.o: main.c tools.h
tools.o: tools.c tools.h
----= cut here =---
pzdr.
j.
Wojtek Kaniewski
Guest
Wed Mar 17, 2004 7:11 am
voice wrote:
Quote:
Bardzo proszę o jakieś proste makefile do tego :/
mój może nie jest najprostszy, ale jak dla mnie wygodny. generuje od
razu źródła w asemblerze, żeby mieć możliwość podejrzenia pracy
kompilatora. tworzy pliki .bin i .hex. pozwala szybko zaprogramować
procesor przez `make poke'.
#v+
NAME = program # nazwa plików hex, bin, lst i całej reszty
OBJS = tools.o main.o # tutaj wszystkie pliki .o
MCU = at90s2313 # model procesora
PROG = stk200 # model programatora z uisp
CFLAGS = -Wall -Os -mmcu=$(MCU) -Wstrict-prototypes
default: $(NAME).bin $(NAME).hex
$(NAME).bin: $(NAME)
avr-objcopy -j .text -j .data -O binary $(NAME) $(NAME).bin
$(NAME).hex: $(NAME)
avr-objcopy -j .text -j .data -O ihex $(NAME) $(NAME).hex
$(NAME): $(OBJS)
avr-gcc $(CFLAGS) $(OBJS) -o $(NAME)
%.o: %.c
avr-gcc $(CFLAGS) $< -c -o $@
@avr-gcc $(CFLAGS) $< -S 2> /dev/null
clean:
rm -f $(NAME) *.s *.hex *.bin *.o *.lst *~ core
poke:
uisp -dprog=$(PROG) --erase --upload if=$(NAME).hex --verify
#v-
J.F.
Guest
Wed Mar 17, 2004 8:20 am
On Wed, 17 Mar 2004 00:11:44 +0100, Wojtek Kaniewski wrote:
Quote:
mój może nie jest najprostszy, ale jak dla mnie wygodny. generuje od
razu źródła w asemblerze, żeby mieć możliwość podejrzenia pracy
kompilatora. tworzy pliki .bin i .hex. pozwala szybko zaprogramować
procesor przez `make poke'.
Ale czy on ci skompiluje ponownie main.c jesli zmienisz tools.h ?
Bo mowiac szczerze to niezbyt widze ..
Quote:
#v+
NAME = program # nazwa plików hex, bin, lst i całej reszty
OBJS = tools.o main.o # tutaj wszystkie pliki .o
MCU = at90s2313 # model procesora
PROG = stk200 # model programatora z uisp
CFLAGS = -Wall -Os -mmcu=$(MCU) -Wstrict-prototypes
default: $(NAME).bin $(NAME).hex
$(NAME).bin: $(NAME)
avr-objcopy -j .text -j .data -O binary $(NAME) $(NAME).bin
$(NAME).hex: $(NAME)
avr-objcopy -j .text -j .data -O ihex $(NAME) $(NAME).hex
$(NAME): $(OBJS)
avr-gcc $(CFLAGS) $(OBJS) -o $(NAME)
%.o: %.c
avr-gcc $(CFLAGS) $< -c -o $@
@avr-gcc $(CFLAGS) $< -S 2> /dev/null
clean:
rm -f $(NAME) *.s *.hex *.bin *.o *.lst *~ core
poke:
uisp -dprog=$(PROG) --erase --upload if=$(NAME).hex --verify
#v-
voice
Guest
Wed Mar 17, 2004 10:24 am
Quote:
mój może nie jest najprostszy, ale jak dla mnie wygodny. generuje od
razu źródła w asemblerze, żeby mieć możliwość podejrzenia pracy
kompilatora. tworzy pliki .bin i .hex. pozwala szybko zaprogramować
procesor przez `make poke'.
[...]
Super! Dziekuję!
Dziekuję również Jackowi Radzikowskiemu!
Zaczynam powoli robić małe kroki do przodu...
Pozdrawiam,
voice
Andy
Guest
Wed Mar 17, 2004 7:39 pm
Użytkownik "J.F." <jfox_nospam@poczta.onet.pl> napisał w wiadomości news:u36f50lmhdas5l9cshkl5hb0ua65spo5ib@4ax.com...
Quote:
...
Ale czy on ci skompiluje ponownie main.c jesli zmienisz tools.h ?
Bo mowiac szczerze to niezbyt widze ..
...
na raczej nie skompiluje bo nie ma "dependecies" w stylu:
main.o: main.c tools.h
pozostale zrobic make clean i jeszcze raz make
--
Andrzej
Artur Lipowski
Guest
Thu Mar 18, 2004 3:24 pm
Andy wrote:
....
Quote:
na raczej nie skompiluje bo nie ma "dependecies" w stylu:
main.o: main.c tools.h
A po co uprawiać taką manufakturę używając make? Toż to zaprzeczenie
idei tego marzędzia.
Podręcznikowe (z manuala make) rozwiązanie to:
%.d: %.c
set -e; $(CC) -MM $(CPPFLAGS) $< \
| sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \
[ -s $@ ] || rm -f $@
include $(DSOURCES:.c=.d)
Gdzie CPPFLAGS to flagi kompilatora - opcje linowania np.:
CPPFLAGS = -mcpu=arm7tdmi $(DEFINES) $(INCLUDES)
Ww polecenie include powinno się umieścić na końcu Makefile.
Oczywiście to samo dla innych plików z tego typu zależnościami np.
assemblera.
Pozdrawiam,
--
Artur Lipowski