-
nabend allerseits...
nach langem lesen und try-and-error wollte ich jetzt auch mal ein paar fragen los werden.
ich habe den asuro noch nicht sehr lang. das zusammenbauen war kein problem, auch die ersten programme (mit der UR-version von WinAVR geschrieben) funktionierten ganz gut.
viellicht hätte ich nicht sofort dann hiermit starten sollen, aber jetzt isses eh zu spät ;)
also ich habe mir die aktuellste lib geladen (v.2.8rc1), dazu die aktuellste winAVR version (20081205), den neuesten flasher (1.51) und usb-treiber.
nun habe ich hier den gesamten thread gelesen und auch die hilfe, die direkt bei der lib dabei ist.
ich habe alle makefiles schritt für schritt angepasst, habe mir ein neues verzeichnis (das so genannte PROG-HOME) angelegt, dort einen unterordner erstellt und ein makefile reinkopiert und angpasst (wie beschrieben).
das aufrufen der mak-lib ging auch problemlos.
nun weiß ich jedoch ehrlich gesagt nicht, wie ich meine eigenen programme (test.c) compilieren und linken lassen kann.
ganz früher ging das halt mit den selbst angelegten tools im programmers notepad.
diese sind aber jetzt sinnlos geworden (jedenfalls für die neue lib, oder nicht?!).
ansich muss ich ja iwie das makefile in meinem unterordner aufrufen. aber wie?! ich bräcuhte dazu ja ansich eine batch. muss ich die erst noch erstellen oder wie kann ich die programme übersetzen?!
bisher war es so, dass wenn ich noch versucht habe die alte vorgehensweise zu nutzen, dass asuro dann nur alle leds aufleuchten ließ, was ich aber nicht programmiert hab. und das obwohl beim flashen alles problemlos lief... ich nehme aber mal an, dass das an dem drucheinander von neuer und alter lib liegt.
wenn ich jetzt meine eigenen programme übersetzen könnte, sollte es (wohl hoffentlich) wieder gehen...
nur wie gesagt: ich weiß nicht wie ich das anstellen soll...
kann mir bitte wer helfen?! auch wenn die frage iwie ziwmlich doof ist, aber hey... ;)
beste grüße,
malediction.
-
hallo
wenn ich mit der neuen lib ein eigenes programm schreibe kopiere ich einfach einen ordner, zb. motortest und schreibe meinen code hinein
dann braucht man bei der neueren version von WinAVR nur unter Tools den befehl [WinAVR]Make All anklicken und der code wird in eine .hex datei umgewandelt. um ein makefile brauchst du dich da nicht mehr kümmern. und auch den make-befehl brauchst du nicht mehr
wichtig ist natürlich wieder, dass du vorm compilieren speicherst!!
ich hoffe, dir damit geholfen zu haben
-
danke, hai...
so hab ichs jetzt auch gemacht und so hats auch funktioniert.
leider kriege ich die datei jetzt nicht mehr geflasht... (MAN MAN MAN), aber das hab ich schon ein einem anderen thread angesprochen.
-
[@hai]
Danke! Genau das Problem hatte ich auch.
Ich habe mir nun die neuste WinAVR-Version heruntergeladen und installiert, doch auf dem Dekstop wurde keine Verknüpfung zum Programmers Notepad erstellt, und jetzt suche ich mich dumm und dämlich. (AAAHHHH!!! WARUM MUSS ES IMMER AN DEN BEKLOPPTESTEN SACHEN SCHEITERN!?!? ](*,) :cry: ) Man, das ist echt zum heulen... und das alles nur, weil mein Asuro nen Rechtsdrall hat und ich den GoTurn-Befehl brauche :( .
Falls mir jemand den Pfad zur Programmers-Notepad.exe verraten würde, wäre ich sehr dankbar.
[@malediction]
Keine Sorge, irgendwann schaffen wir das xD
-
Habs gefunden!
Dann mache ich mich jetzt mal an die Arbeit :)
€dit: Damn it! Es war so klar... es klappt nicht xD
Bei meinem programm soll der Asuro jetzt mithilfe der GoTurn-Funktion einfach nur geradeaus fahren, doch stattdessen blinkt die Status-LED bloß abwechselnd Rot und GRÜN.
Mein Asuro treibt mich noch zum Wahnsinn. :Haue \:D/
Hier ist das Programm:
Code:
#include "asuro.h"
int main(void)
{
Init();
StatusLED(YELLOW);
FrontLED(ON);
BackLED(ON,ON);
MotorDir(FWD,FWD);
GoTurn(230,230);
while(1);
return 0;
}
€dit 2: Verdammt! Jetzt klappt nichtmal mehr das compilieren! Wenn ich versuche, das oben genannte Programm in eine .hex umzuwandeln kommt folgende Fehlermeldung:
Code:
make.exe: ***No rule to make target `test.hex', needed by `all'. Stop.
Boah ey ich hab echt kein Bock mehr auf diesen f*pieps* Asuro -.-
*Asuro aus dem Fenster wirft*
-
hast du die makefiles wie beschrieben angepasst?
-
Ja habe ich gemacht. Hast du es denn nun hingekriegt? Wenn ja, könntest du mir vllt. nochmal kurz erklären, was nun zutun ist, wenn man die lib installiert und die makefiles angepasst hat? das wäre echt super. :oops:
-
ja also bei mir läuft jetzt alles.
ich habs so gemacht:
zuerst die lib runtergeladen (v2.8rc1), entpackt (an einen ort, wo NICHT winAVR ist).
dann die neueste WinAVR geladen und installiert.
dann hab ich die makefiles so wie von sternthaler beschrieben angepasst (das makefile im lib-ordner und dann das file im examples/firsttry ordner).
dann hab ich die lib noch mal neu übersetzt (auch von sternthaler beschrieben mit der eingabeaufforderung).
jetzt bist du ansich soweit, dass es gehen müsste.
ich mach das mit dem programmieren jetzt immer so:
ich ändere die test.c-datei im firsttry ordner. dazu kannst du ganz einfach im programmers notepad das projekt firsttry aufrufen.
in der test.c-datei steht eh noch nix außer dem skelett.
dann hier fleißig programmieren, die datei speichern und dann auf tools->[WinAVR]MakeAll klicken.
er übersetzt dir deine datei im firsttry-ordner und du erhälst in diesem ordner dann eine test.hex-datei. diese dann auf asuro flashen und es sollte gehen.
allerdings musst du wirklich BEIDE makefiles (im lib- und im firsttry-ordner) angepasst haben. wenn du das richtig gemacht hast und die lib noch mal neu compiliert hast, müsste alles gehen.
viel erfolg! du schaffst das!
[-o<
-
EDIT:
ich habe winavr auf C:/WinAVR
die asuro lib auf C:/asuro-lib/lib
und die programme auf D:\2_asuro\ASURO_src\FirstTry
ich habe die pfade in den beiden makefiles angepasst und backslashes \ durch / ersetzt.
danach habe ich make-lib.bat im lib ordner zum maken ausgefüht. hat auch geklappt.
Doch wenn ich dann mit PorgrammersNotepad mein test.c im D:\2_asuro\ASURO_src\FirstTry maken möchte komtm folgendes:
Code:
> "make.exe" all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
test.c:1:19: error: asuro.h: No such file or directory
-------- begin --------
avr-gcc --version
avr-gcc (WinAVR 20090313) 4.3.2
Copyright (C) 2008 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.
make.exe: *** No rule to make target `test.hex', needed by `all'. Stop.
> Process Exit Code: 2
> Time Taken: 00:01
er findet die asuro.h ja nciht (test.c:1:19: error: asuro.h: No such file or directory), wahrscheinlich, weil ich die aus PROG-HOME mit asuro.c gelöscht habe, da er die beiden asuro dateien, ja jetzt aus der lib nehmen soll.
EDIT: ich stelle hier einfach mal die makefiles rein. cih hoffe ihr könnt mri dann helfen:
makefile von asuro-lib
Code:
###############################################################################
# Makefile for the project AsuroLib
###############################################################################
## General Flags
PROJECT = AsuroLib
MCU = atmega8
TARGET = AsuroLib.elf
CC = avr-gcc.exe
AR = avr-ar
OBJDUMP = avr-objdump
## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)
## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -Os -I./inc
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=
## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom
HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0
## Objects that must be built in order to link
OBJECTS = globals.o adc.o encoder.o encoder_low.o i2c.o leds.o lcd.o\
motor.o motor_low.o print.o printf.o rc5.o sound.o switches.o\
time.o uart.o version.o
## Objects explicitly added by the user
LINKONLYOBJECTS =
# Define directories, if needed.
DIRAVR = C:/WinAVR
#DIRAVR = /usr/local/avr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = C:/asuro_lib/lib/inc
DIRLIB = C:/asuro_lib/lib
LIB = asuro
LIBFILE = lib$(LIB).a
HEADER = asuro.h
## Build
all: $(LIBFILE)
rm -rf *.o *~
%.o: %.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
$(LIBFILE): $(OBJECTS)
$(AR) cru $(LIBFILE) $(OBJECTS)
## Clean target
clean:
rm -rf *.o *~ $(LIBFILE)
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
rm -rf dep/*.d
install:
cp $(LIBFILE) $(DIRLIB)/$(LIBFILE)
cp inc/$(HEADER) $(DIRINC)/$(HEADER)
lst: $(OBJECTS:%.o=%.lst)
%.lst: %.o
$(OBJDUMP) -h -S $< > $@
## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
makefile von firsttry (PROG-HOME):
Code:
# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
# Released to the Public Domain
# Please read the make user manual!
#
#
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
#
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
# 4.07 or greater).
#
# make program = Download the hex file to the device, using avrdude. Please
# customize the avrdude settings below first!
#
# make filename.s = Just compile filename.c into the assembler code only
#
# To rebuild project do "make clean" then "make all".
#
# MCU name
MCU = atmega8
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# Target file name (without extension).
TARGET = test
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c
# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += asuro.c
# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -g -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-Wa,-ahlms=$(<:.c=.lst)
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-ahlms=$(<:.S=.lst),-gstabs
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
# Additional libraries
#
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
#
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
#
# -lm = math library
LDFLAGS += -lm
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/WinAVR
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = C:/asuro_lib/lib/inc
DIRLIB = C:/asuro_lib/lib
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
REMOVE = rm -f
COPY = cp
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
FINISH = echo Errors: none
BEGIN = echo -------- begin --------
END = echo -------- end --------
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss sizeafter finished end
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@$(BEGIN)
finished:
@$(FINISH)
end:
@$(END)
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE);fi
sizeafter:
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE);fi
# Display compiler version information.
gccversion :
$(CC) --version
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
coff: $(TARGET).elf
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
extcoff: $(TARGET).elf
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
%.eep: %.elf
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
# Create extended listing file from ELF output file.
%.lss: %.elf
$(OBJDUMP) -h -S $< > $@
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
# Compile: create object files from C source files.
%.o : %.c
$(CC) -c $(ALL_CFLAGS) $< -o $@
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
# Assemble: create object files from assembler source files.
%.o : %.S
$(CC) -c $(ALL_ASFLAGS) $< -o $@
# Target: clean project.
clean: begin clean_list finished end
clean_list :
$(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
Die Directories habe ich ja angepasst, aber es scheint trotzdem nicht zu funktionieren.
EDIT:
Ist schon okay. Habe nochmal alels deintsalliert und diesmal die neuste lib genommen also 280rc1. Da lag zum glück auch eine install.txt bei. Die at alle fragen gelöst ;)
-
Hallo fog.sliver,
auch du meine Güte. So schnell wie du eine Lösung gefunden hast, kann ich mich ja gar nicht hier anmelden ;-).
Um noch kurz eine kleine Info zu geben:
- Die asuro.c wird nicht in der LIB mit eingebunden.
Nur die unter OBJECTS im LIB-Makefile aufgeführten Dateien sind da enthalten.
- Die asuro.h sollte schon im LIB/inc-Verzeichnis vorhanden sein, da sie auch von deinen Programmen gefunden werden muss. Sie wird da immer mit einem "#include <asuro.h>" gesucht.
- In meinem ersten Beitrag, habe ich auch einige Links zu Hilfen bei der Konfiguration im AVRStudio angegeben. Eventuell musst du so etwas auch im "ProgrammersNotepad" einstellen. Den kenne ich aber nicht wirklich.
Ansonsten ist ja nun alles bestens.
Weiterhin viel Erfolg und vor allem Spaß mit dem Asuro.
Gruß Sternthaler