Problem z WinAVR

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ZbeeGin

Post autor: ZbeeGin » 06 maja 2008, 18:45

To co pokazałeś to nie kompilacja tylko czysczenie projektu przed jego rekompilacją. W pliku BAT zmień "clean" na "all" i będzie działać. Ewentualnie wpisz razem "clean all"

Poza tym PN2 domyślnie ma wszystko skonfigurowane i to musi działać. System z plikami BAT sprawdza się, jeśli masz jeszcze jakiś inny kompilator C (Borland C++, WinARM itp.)

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 06 maja 2008, 19:59

ZbeeGin pisze:Poza tym PN2 domyślnie ma wszystko skonfigurowane i to musi działać
No właśnie. Instalowałem WinAvr na kilku komputerach i zawsze ruszało bez najmniejszego problemu przy poprawnie skonfigurowanym pliku makefile i umieszczeniu go w katalogu z plikiem *.c

Proponuję aby kolega zamieścił plik zip z plikiem makefile i projektem. Wtedy zobaczymy w czym tkwi problem. Ewentualnie może prześlij na prv jak nie chcesz umieszczać na forum. Sprawdzę czy u mnie się skompiluje.

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 06 maja 2008, 20:04

Nie pomogło to co napisał ZbeeGin a tu jest archiwum
Załączniki
AVR.rar
(6.03 KiB) Pobrany 597 razy

ZbeeGin

Post autor: ZbeeGin » 06 maja 2008, 20:10

Kolego Grysek pokaż treści plików BAT i jak skonfigurowałeś poszczególne polecenia w PN2 bo pokręciłeś coś i to zdrowo.

A zmiennej TARGET w makefile przypisuje się nazwę pliku do kompilacji bez rozszerzenia.
Zatem nie main tylko AVR bo tak nazywa się plik z programem

Kod: Zaznacz cały

# Target file name (without extension).
TARGET = AVR
Dlatego występował błąd w domyślnych ustawieniach PN2. Po prostu make.exe nie wiedziało o jaki plik Ci chodzi.

---------

Po zmianie w makefile i drobnych poprawkach w programie (stare pliki nagłówkowe i jeden błąd) wszystko się ładnie kompiluje:

Kod: Zaznacz cały

#include <avr\io.h> 
#include <util\delay.h>

int main(void)
{
    /*ustawienie wyjść*/
	DDRD =0X7c;
	
	for(;;)
	{
	     /*wyłączenie diod*/
		 PORTD = 0x7c;
		 _delay_loop_2(0xffff);
		 /*włączenie diod*/
		 PORTD = 0;
		 _delay_loop_2(0xffff);
    }
    return 0;
}
Kompilator w oknie Output pisze:> "make.exe" all

-------- begin --------
avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: AVR.c
avr-gcc -c -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./AVR.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/AVR.o.d AVR.c -o AVR.o

Linking: AVR.elf
avr-gcc -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=AVR.o -std=gnu99 -Wundef -MMD -MP -MF .dep/AVR.elf.d AVR.o --output AVR.elf -Wl,-Map=AVR.map,--cref -lm

Creating load file for Flash: AVR.hex
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock AVR.elf AVR.hex

Creating load file for EEPROM: AVR.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O ihex AVR.elf AVR.eep || exit 0

Creating Extended Listing: AVR.lss
avr-objdump -h -S -z AVR.elf > AVR.lss

Creating Symbol Table: AVR.sym
avr-nm -n AVR.elf > AVR.sym

Size after:
AVR Memory Usage
----------------
Device: atmega128

Program: 234 bytes (0.2% Full)
(.text + .data + .bootloader)

Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)



-------- end --------


> Process Exit Code: 0
> Time Taken: 00:12
Ostatnio zmieniony 06 maja 2008, 20:25 przez ZbeeGin, łącznie zmieniany 1 raz.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 06 maja 2008, 20:21

No wiec tak. Projekt się kompiluje. Tyle że:

1. Plik który chcesz skompilować nazywa się AVR.c a ty w makefile wpisałeś TARGET=main a to nie ma prawa tak być. Jak już to TARGET=AVR

2. masz błędy w kodzie:

Kod: Zaznacz cały

#include <avr/io.h>
#include <avr/delay.h>
powinno być.

i zjadłeś jeden średnik w linii:

Kod: Zaznacz cały

PORTD=0;

Projekt skompilował się w WinAvr20071221

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 07 maja 2008, 8:02

Niestety dalej nic to nie dało oto zwartość plików BAT
make:

Kod: Zaznacz cały

@set PATH=C:\WinAVR-20071221\BIN;C:\WinAVR-20071221\UTILS\BIN;
make.exe all
clean:

Kod: Zaznacz cały

@set PATH=C:\WinAVR-20071221\BIN;C:\WinAVR-20071221\UTILS\BIN;
make.exe clean
A te pliki to gdzie wogóle powinny być umieszczone w głównym katalogu programu??

Awatar użytkownika
PiotrekEl
Użytkownik
Posty: 251
Rejestracja: 02 mar 2007, 19:39
Lokalizacja: Znad Jezioraq

Post autor: PiotrekEl » 07 maja 2008, 8:16

Muszą być umieszczone w katalogu w którym masz plik AVR.c czyli swój plik z programem. U mnie pod wersją 20080402 musiałem zmienić

Kod: Zaznacz cały

#define<avr/delay.h>
na

Kod: Zaznacz cały

#define<util/delay.h>
Jak masz wersję tą co ja to też to zmień a jak starszą to zostaw <avr/delay.h>

W załączniku masz poprawione i spróbuj to skompilować. Musi się dać.
Załączniki
AVR1.rar
(13.75 KiB) Pobrany 547 razy

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 07 maja 2008, 8:24

no teraz się poprawiło lecz wyskakuje cała masa błędów w oknie output

> "C:\WinAVR\make.bat"

c:\avr>make.exe all

-------- begin --------
avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: AVR.c
avr-gcc -c -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./AVR.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/AVR.o.d AVR.c -o AVR.o
AVR.c:1:18: warning: avrio.h: No such file or directory
In file included from AVR.c:2:
c:/winavr-20071221/bin/../avr/include/avr\delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>."
AVR.c: In function 'main':
AVR.c:7: error: 'DDRD' undeclared (first use in this function)
AVR.c:7: error: (Each undeclared identifier is reported only once
AVR.c:7: error: for each function it appears in.)
AVR.c:12: error: 'PORTD' undeclared (first use in this function)

make.exe: *** [AVR.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:00


Aha i w folderze w którym znajdują się plik *.c i makefile to utworzył śię folder o nazwie .dep a w tym folderze plik AVR.o.d

[ Dodano: 2008-05-07, 09:32 ]
A ten program z załącznika się skompilował poprawanie :smile: tylko czemu ten mój nie chce??

Awatar użytkownika
PiotrekEl
Użytkownik
Posty: 251
Rejestracja: 02 mar 2007, 19:39
Lokalizacja: Znad Jezioraq

Post autor: PiotrekEl » 07 maja 2008, 8:39

Czemu Twój nie chce? miałeś kilka błędów. Pisali o tym snow, i ZbeeGin.
Pobrałem Twój program i zmieniłem:
#define <avrio.h>
na
#define <avr/io.h>
Zapomniałeś ukośnika.
Potem zmieniłem to co pisze dwa posty wyżej.
Poza tym zapomniałeś średnika tam gdzie pisał snow, i w makefile w miejscu TARGRET = main napisałem TARGET = AVR.
Czyli to co wcześniej już pisali koledzy. To wszystko.

Awatar użytkownika
grysek67
Użytkownik
Posty: 315
Rejestracja: 27 cze 2007, 6:34
Lokalizacja: Limanowa
Kontakt:

Post autor: grysek67 » 07 maja 2008, 8:51

Serdeczne dzieki za pomoc, już jest wszystko ok
a tak na marginesie to niewiedziałem że WinAVR jest taki czuły na błedy BASCOM taki nie jest...

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 07 maja 2008, 14:47

grysek67 pisze:niewiedziałem że WinAVR jest taki czuły na błedy BASCOM taki nie jest...
Dobrze to o Bascomie nie świadczy ;)

ZbeeGin

Post autor: ZbeeGin » 07 maja 2008, 16:55

grysek67 pisze:a tak na marginesie to niewiedziałem że WinAVR jest taki czuły na błedy BASCOM taki nie jest...
Wydaje Ci się. Po prostu w BASCOM pewne rzeczy można opuścić (np. parametry CONFIG i też kompilacja przejdzie). C jest nieco bardziej sztywny pod tym względem.

Przemo_2014
-
Posty: 3
Rejestracja: 26 lip 2008, 19:24
Lokalizacja: Wroclaw\Poznań

Post autor: Przemo_2014 » 26 lip 2008, 19:31

miałem podobne problemy ale je jakoś rozwiązałem tylko nie wiem dlaczego za pierwszym razem przy kompilacji wyskakuje wynik z dwoma błędami a jak ją powtórzę to całość przebiega poprawnie może zna ktoś przyczynę i jak ją usunąć ??

ZbeeGin

Post autor: ZbeeGin » 27 lip 2008, 7:37

Jakby się kolega podzielił z nami kodem i rezulatatmi (logiem) kompilacji to pewnie rozwiązalibyśmy problem. A tak...

Przemo_2014
-
Posty: 3
Rejestracja: 26 lip 2008, 19:24
Lokalizacja: Wroclaw\Poznań

Post autor: Przemo_2014 » 27 lip 2008, 11:22

Kod ten sam co i u kolegi. Rezultaty kompilacji:

pierwszej:

> "C:\WinAVR\test\halo\make.bat"

c:\winavr\test\halo>make.exe

-------- begin --------
avr-gcc (GCC) 3.4.6
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling C: halo.c
avr-gcc -c -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=4000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wundef -Wa,-adhlns=obj/halo.lst -std=gnu99 -Wundef -MD -MP -MF .dep/halo.o.d halo.c -o obj/halo.o

Linking: halo.elf
avr-gcc -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=4000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wundef -Wa,-adhlns=obj/halo.o -std=gnu99 -Wundef -MD -MP -MF .dep/halo.elf.d obj/halo.o --output halo.elf -Wl,-Map=halo.map,--cref -lm

Creating load file for Flash: halo.hex
avr-objcopy -O ihex -R .eeprom halo.elf halo.hex

Creating load file for EEPROM: halo.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O ihex halo.elf halo.eep
/usr/bin/sh: /c/WinAVR/BIN/avr-objcopy: Invalid argument
make.exe: [halo.eep] Error 126 (ignored)

Creating Extended Listing: halo.lss
avr-objdump -h -S halo.elf > halo.lss
/usr/bin/sh: /c/WinAVR/BIN/avr-objdump: Invalid argument
make.exe: *** [halo.lss] Error 126

> Process Exit Code: 2
> Time Taken: 00:01


druga:

> "C:\WinAVR\test\halo\make.bat"

c:\winavr\test\halo>make.exe

-------- begin --------
avr-gcc (GCC) 3.4.6
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Size before:
halo.elf :
section size addr
.text 110 0
.data 0 8388704
.bss 0 8388704
.noinit 0 8388704
.eeprom 0 8454144
.stab 852 0
.stabstr 132 0
.debug_aranges 20 0
.debug_pubnames 27 0
.debug_info 201 0
.debug_abbrev 141 0
.debug_line 204 0
.debug_str 126 0
Total 1813




Creating load file for EEPROM: halo.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O ihex halo.elf halo.eep
/usr/bin/sh: /c/WinAVR/BIN/avr-objcopy: Invalid argument
make.exe: [halo.eep] Error 126 (ignored)

Creating Symbol Table: halo.sym
avr-nm -n halo.elf > halo.sym

Size after:
halo.elf :
section size addr
.text 110 0
.data 0 8388704
.bss 0 8388704
.noinit 0 8388704
.eeprom 0 8454144
.stab 852 0
.stabstr 132 0
.debug_aranges 20 0
.debug_pubnames 27 0
.debug_info 201 0
.debug_abbrev 141 0
.debug_line 204 0
.debug_str 126 0
Total 1813



-------- end --------


> Process Exit Code: 0
> Time Taken: 00:01

dołączam jeszcze pliki źródłowe:
Załączniki
halo.rar
Pliki
(7.27 KiB) Pobrany 544 razy

ODPOWIEDZ