hi,
im post vom 23.09.2007, 19:09 hab ich eine angepasste version der AN311 angehängt!
MfG Martin
Druckbare Version
hi,
im post vom 23.09.2007, 19:09 hab ich eine angepasste version der AN311 angehängt!
MfG Martin
Danke Martin, besonders danke für die schnelle Antwort, das hatte ich gesehen - ich hatte die twi_master.h bei mir referenziert (#include "TWI_Master.h"), trotzdem:
wobei der Fehler hier auftritt:Code:Build started 21.3.2008 at 15:09:03
avr-gcc.exe -mmcu=atmega168 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT DME_I2Cm-1.o -MF dep/DME_I2Cm-1.o.d -c ../DME_I2Cm-1.c
In file included from ../TWI_Master-modif.c:30,
from ../DME_I2Cm-1.c:127:
../TWI_Master.h:39: error: redefinition of 'union TWI_statusReg'
../DME_I2Cm-1.c:158: warning: return type of 'main' is not 'int'
../DME_I2Cm-1.c: In function 'main':
../DME_I2Cm-1.c:171: warning: implicit declaration of function '__enable_interrupt'
../DME_I2Cm-1.c:283: warning: implicit declaration of function '__no_operation'
make: *** [DME_I2Cm-1.o] Error 1
Build failed with 1 errors and 3 warnings...
Aber ich bin gerade dran mit der library von PFleury - da habe ich bisher für den Master (m)einen ersten Erfolg. Da wird zwar im Beispiel erstmal ein Eprom beschrieben, aber die Änderung werd ich wohl hinkriegen. Jedenfalls schön, dass ich Deinen Hinweis habe - so etwas hilft ja immer.Code:****************************************************************************/
union TWI_statusReg // Status byte holding flags.
{
unsigned char all;
struct
{
unsigned char lastTransOK:1;
unsigned char unusedBits:7;
};
};
extern union TWI_statusReg TWI_statusReg;
/****************************************************************************
Danke, schöne Feiertage . .
Hi,
hast du die *.c in das makefile eingebunden?
Martin
Hallo, martin,
hmmmm - das makefile ist (bei meinen bisherigen C Programmen, meine C-Erfahrung ist etwa drei, vier Monate alt, aber es gibt das eine oder andere lauffähige Controllerprogramm von mir) etwas, das der Compiler "hervorzaubert" - sprich - ich bin darin total unbewandert. Das gehört (auch noch) zu den Dingen die ich nicht kann.
Sprich - ich habe am makefile GARNIX gemacht.Leider. Ich habe etwas gepfuscht und das "TWI_Slave.c" als "#include" eingesetzt. Da liegt wohl ein Hund begraben. Und jetzt kommt bei (m)/Deinem Slave-programm wieder dieser error: "../TWI_slave.h:35: error: redefinition of 'union TWI_statusReg' ".Code:###############################################################################
# Makefile for the project test_I2Cs-1
###############################################################################
## General Flags
PROJECT = test_I2Cs-1
MCU = atmega168
TARGET = test_I2Cs-1.elf
CC = avr-gcc.exe
## 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 -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS += -Wl,-Map=test_I2Cs-1.map
## 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 --no-change-warnings
## Objects that must be built in order to link
OBJECTS = test_I2Cs-1.o
## Objects explicitly added by the user
LINKONLYOBJECTS =
## Build
all: $(TARGET) test_I2Cs-1.hex test_I2Cs-1.eep test_I2Cs-1.lss size
## Compile
test_I2Cs-1.o: ../test_I2Cs-1.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
##Link
$(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
%.hex: $(TARGET)
avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
%.eep: $(TARGET)
-avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0
%.lss: $(TARGET)
avr-objdump -h -S $< > $@
size: ${TARGET}
@echo
@avr-size -C --mcu=${MCU} ${TARGET}
## Clean target
.PHONY: clean
clean:
-rm -rf $(OBJECTS) test_I2Cs-1.elf dep/* test_I2Cs-1.hex test_I2Cs-1.eep test_I2Cs-1.lss test_I2Cs-1.map
## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
Ich muss mich wohl mit dem makefile beschäftigen :(.Code:Build started 21.3.2008 at 17:27:18
avr-gcc.exe -mmcu=atmega168 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT test_I2Cs-1.o -MF dep/test_I2Cs-1.o.d -c ../test_I2Cs-1.c
In file included from ../TWI_Slave.c:27,
from ../test_I2Cs-1.c:32:
../TWI_slave.h:35: error: redefinition of 'union TWI_statusReg'
../test_I2Cs-1.c:53: warning: return type of 'main' is not 'int'
../test_I2Cs-1.c: In function 'main':
../test_I2Cs-1.c:67: warning: implicit declaration of function '__enable_interrupt'
../test_I2Cs-1.c:114: warning: implicit declaration of function '__no_operation'
../test_I2Cs-1.c:55: warning: unused variable 'temp'
make: *** [test_I2Cs-1.o] Error 1
Build failed with 1 errors and 4 warnings...
hi,
wenn ich richtig gelesen habe arbeitest du mit AVR-Studio.
In AVR-Studio brauchst du dich NICHT mit dem Makefiles herumschlagen, da das alles das AVR-Studio macht.
So wen du jetzt eine lib einbinden willst musst du das *.c file ins makefile einbinden und die *.h datei in dein Programm includen.
Das *.c file bindet man in AVR-Studio so ein:
Du machst einen rechtsklick links im projektbaum auf "Source Files" dann machst du "Add existing source files" da wählst du dann dein *.c file aus.
MfG Martin
Hallo Martin,
Mal ein ganz herzliches Danke für Deinen Hinweis, den ich im Moment gelesen hatte. Du hast völlig recht, ich habe AVRStudio, mit C beschäftige ich mich erst seit etwa vier Monaten - und es ist Cäh. Ich hatte zum Einbinden der *.c´s schon ne ganze Weile die SuFu vergeblich bemüht. Beim Lesen Deines posts fiel mir ein Stein vom Herzen - weil ich so präzise Hinweise liebe, die im Prinzip sagen: " Du musst fast nix tun ... ". Im Moment bin ich (Feiertagsfrieden im Wohnzimmer - nix PC rumstehen) am Notebook, aber ich werde das bald probieren. Das #include..." mit den *.h-files kenne ich schon, danke.Zitat:
Zitat von MartinFunk
Nochmal herzlichen Dank