Witam. Do uruchomienia Nut/OS zakupiłem płytkę ZL9AVR z ATmega128. Zacząłem od najprostszej rzeczy, czyli od programu HelloWorld z kursu Ethernet i AVR'y" z Elektroniki Praktycznej. Program ma za zadanie wysłać tekst "Hello world" na port szeregowy. Kompiluje się bez problemu, zaprogramowałem uC i nic. Po odpaleniu terminala program nie wysyłał nic na port szeregowy. Ale po wciśnięciu za którymś razem przycisku reset w końcu otrzymałem to, co chciałem. Udało mi się w ten sposób zaledwie kilka razy. Czyli system zachowuje się niestabilnie. Kod poniżej:
Plik makefile:
plik sources:
Może ktoś spotkał się z podobnym problemem? Próbowałem nawet wysyłać przez port szeregowy w pętli nieskończonej, ale nadal nic. Do programowania używam zmodyfikowany STK500 na USB, więc zmieniałem już nawet stk200 na stk500 w pliku makefile, ale nie sądzę, aby miało to jakieś znaczenie. Proszę o pomoc.
Code:
#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:
Code:
#
# 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:
Code:
#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 =
Może ktoś spotkał się z podobnym problemem? Próbowałem nawet wysyłać przez port szeregowy w pętli nieskończonej, ale nadal nic. Do programowania używam zmodyfikowany STK500 na USB, więc zmieniałem już nawet stk200 na stk500 w pliku makefile, ale nie sądzę, aby miało to jakieś znaczenie. Proszę o pomoc.