Witam
Do uruchomienia systemu ethernut korzystam z kursu "Ethernet i AVR'y" z Elektroniki Praktycznej. Zainstalowałem NutOS'a (w wersji 4.8.5) i wygenerowałem biblioteki systemu, tak jak w instrukcji zamieszczonej w kursie. Skopiowałem potrzebne pliki do WinAVR, postępując zgodnie z instrukcją i próbowałem uruchomoć pierwszy program "hello word". Kod poniżej:
plik hello.c
Plik makefile:
plik sources:
a oto, co dostałem w wyniku kompilacji:
Czy może mi ktoś powiedzieć, co zrobiłem źle? Kompiluję w WinAVR 20081205
Do uruchomienia systemu ethernut korzystam z kursu "Ethernet i AVR'y" z Elektroniki Praktycznej. Zainstalowałem NutOS'a (w wersji 4.8.5) i wygenerowałem biblioteki systemu, tak jak w instrukcji zamieszczonej w kursie. Skopiowałem potrzebne pliki do WinAVR, postępując zgodnie z instrukcją i próbowałem uruchomoć pierwszy program "hello word". Kod poniżej:
plik hello.c
#include <dev/board.h>
#include <stdio.h>
#include <io.h>
#define UART_SPEED 38400
main()
{
u_long baudrate = UART_SPEED;
NutRegisterDevice (&DEV_DEBUG, 0, 0);
freopen (DEV_DEBUG_NAME, "w", stdout);
_ioctl(_fileno(stdout), UART_SETSPEED, &baudrate);
printf("Hello, world!\n");
for(;;);
}
Plik makefile:
#
# makefile dla zestawu Ethernut BTC.
# nie modyfikuj, jesli nie znasz sie na Makefilach ;)
#
include Sources
# architektura, na ktora Ethernut ma byc kompilowany
ARCH=avr
# nazwa polecenia kompilatora GCC
CC=avr-gcc
# opcje kompilatora C
CFLAGS= $(MY_CFLAGS) -mmcu=atmega128 -D__HARVARD_ARCH__ -DNUT_CPU_FREQ=16000000 -DETHERNUT1
# nazwa polecenia programu objcopy
OBJCOPY=avr-objcopy
# nazwa polecenia programu crurom
CRUROM=crurom
#nazwa pliku kompilatora GCC (np. avr-gcc.exe)
GCCNAME=$(shell which $(CC).exe)
# katalog, w którym jest zainstalowane GCC
GCCDIR=$(dir $(GCCNAME))
OBJS = $(SOURCES:.c=.o)
CFLAGS= $(MY_CFLAGS) -mmcu=atmega128 -D__HARVARD_ARCH__ -DNUT_CPU_FREQ=16000000 -DETHERNUT1
all: $(OBJS)
ifneq "$(CRUROM_DIR)" ""
${CRUROM} -r -o$(CRUROM_DIR)_crurom.c $(CRUROM_DIR)
${CC} -c $(CRUROM_DIR)_crurom.c -o $(CRUROM_DIR)_crurom.o $(CFLAGS) -I$(GCCDIR)../NutOS/$(ARCH)/include
${CC} -o $(OUTPUT).elf -Wl,--defsym=main=0 -mmcu=atmega128 $(GCCDIR)../NutOS/$(ARCH)/lib/nutinit.o $(OBJS) $(CRUROM_DIR)_crurom.o -L$(GCCDIR)../NutOS/$(ARCH)/lib $(LIBS)
else
${CC} -o $(OUTPUT).elf -Wl,--defsym=main=0 -mmcu=atmega128 $(GCCDIR)../NutOS/$(ARCH)/lib/nutinit.o $(OBJS) -L$(GCCDIR)../NutOS/$(ARCH)/lib $(LIBS)
endif
${OBJCOPY} -O ihex -R .eeprom $(OUTPUT).elf $(OUTPUT).hex
${OBJCOPY} -O binary -R .eeprom $(OUTPUT).elf $(OUTPUT).bin
%.o: %.c
${CC} -c $^ -o $@ $(CFLAGS) -I$(GCCDIR)../NutOS/$(ARCH)/include
clean:
rm -f $(OBJS) $(OUTPUT).bin $(OUTPUT).hex $(OUTPUT).elf
ifneq "$(CRUROM_DIR)" ""
rm -f $(CRUROM_DIR)_crurom.c $(CRUROM_DIR)_crurom.o
endif
isp: all
avrdude -V -c stk200 -p m128 -Uflash:w:$(OUTPUT).hex
plik sources:
#nazwa pliku wyjsciowego - bez rozszerzenia
#musi byc taka sama jak nazwa projektu w AvrStudio (jesli uzywamy)
OUTPUT = hello
#lista plikow zrodlowych projektu
SOURCES = hello.c
#dodatkowe flagi kompilatora GCC
MY_CFLAGS = -Os
#dolaczone biblioteki
LIBS = -lnutarch -lnutos -lnutdev -lnutarch -lnutcrt
#katalog z systemem plikow do umieszczenia w pamieci flash mikrokontrolera
#jesli nie potrzebujemy, zostawic pusty
CRUROM_DIR =
a oto, co dostałem w wyniku kompilacji:
> "make.exe" all
avr-gcc -c hello.c -o hello.o -Os -mmcu=atmega128 -D__HARVARD_ARCH__ -DNUT_CPU_FREQ=16000000 -DETHERNUT1 -IC:\ Files\winavr\bin\../NutOS/avr/include
hello.c:1:23: error: dev/board.h: No such file or directory
hello.c:3:16: error: io.h: No such file or directory
hello.c: In function 'main':
hello.c:9: error: 'u_long' undeclared (first use in this function)
hello.c:9: error: (Each undeclared identifier is reported only once
hello.c:9: error: for each function it appears in.)
hello.c:9: error: expected ';' before 'baudrate'
hello.c:11: error: 'DEV_DEBUG' undeclared (first use in this function)
hello.c:12: error: 'DEV_DEBUG_NAME' undeclared (first use in this function)
hello.c:13: error: 'UART_SETSPEED' undeclared (first use in this function)
hello.c:13: error: 'baudrate' undeclared (first use in this function)
make.exe: *** [hello.o] Error 1
> Process Exit Code: 2
> Time Taken: 00:01
Czy może mi ktoś powiedzieć, co zrobiłem źle? Kompiluję w WinAVR 20081205
