Forum: Compiler & IDEs Probleme mit i2c Eeprom (Assembler einbinden)


von Andreas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche schon seit längerem ein TWI- Eeprom an einem Mega 8 zu 
betreiben. Leider bisher ohne Erfolg.

In verschiedenen Forenbeiträgen wird immer wieder auf die i2c- Routinen 
von P. Fleury verwiesen. Hierzu habe ich auch ein relativ aktuelles 
Beispiel gefunden.
Ich schaffe es allerdings nicht, die Assemblerdatei fehlerfrei 
einzubinden.
Beim Kompilieren erhalte ich seitenweise Fehlermeldungen, die in der 
angehängten Datei unter Fehlermeldungen.txt aufgelistet sind.

Bei anderen Quelltexten, die ebenfalls meist auf den Fleury- Routinen 
basieren bekomme ich die selben Fehlermeldungen.

i2cmaster.S, test_i2cmaster.c und twimaster.c wurden unter source files 
eingebunden. i2cmaster.h befindet sich unter header files.

Ich verwende das AVR- Studio in der Version 4.14.

Was mache ich falsch???

Vielen Dank!
Andreas

von SF (Gast)


Lesenswert?

Als erstes must du dich entscheiden, ob du eine Software I2C 
Implementation verwenden willst oder eine Hardware I2C Implementation. 
In deiner Zip-Datei verwendest du beide ...

i2cmaster.s ist die Software Implementation und
twimaster.c ist die Hardware Implementation.

Du wirst nur eine von den beiden gebrauchen können. Also niemals beide 
Files gleichzeitig in ein Projekt einbinden!

Aus dem Komentaren im Quellcode geht hervor, das der Code für einen 
AT90S8515 geschrieben worden ist und damit läßt sich das ganze (Die 
Softwarevariante) auch mit einem Winavr081205 ohne Fehlermeldungen 
compilieren. Aber auch für einen Mega8 klappt es. Und da auch beide 
Varianten.

Wichtig ist übrigens auch, das du angibst welche WinAvr-Version du 
verwendest.

von Andreas (Gast)


Lesenswert?

Vielen Dank!

Die Lösung mit der Hardware Implementation funktioniert.
Mit der Software- Implementation habe ich so meine Probleme. Hierbei 
werden ziemlich viele Fehlermeldungen angezeigt.

Durch Versuche mit anderen Assembler- Beispielen habe ich 
herausgefunden, dass es nicht am fehlerhaften Quelltext sondern am 
Win-AVR liegt.

Verweise ich (unter Optionen / Einstellungen?) auf des bei manchen 
Quellen beigefügte Makefile, wird ohne Probleme Code erzeugt.

Versuche ich es ohne das beigefügte Makefile, erscheinen massenhaft 
Fehlermeldungen.

Somit lässt sich der Fehler auf das Objekt zwischen Bürostuhl und 
Tastatur eingrenzen ;-)

Was muss ich beachten, wenn ich Assembler- Dateien ohne geklautes 
Makefile einbinden möchte?

Gruß
Andreas

von Oliver (Gast)


Lesenswert?

Im makefile steht nicht ohne Grund:

># List Assembler source files here.
># Make them always end in a capital .S.

Hast du das mal beachtet?

Oliver

von Jörg G. (joergderxte)


Lesenswert?

> Was muss ich beachten, wenn ich Assembler- Dateien ohne geklautes
> Makefile einbinden möchte?
 - Die müssen unter "Assembler sources" eingetragen werden (wer hätte 
das gedacht ;) )
 - Die müssen für den GAS geschrieben sein!!
 Die (*.asm) Dateien, die das AVR-Studio so (d.h. ohne WinAVR) 
assemblieren kann, gehen nicht (nicht relokier-/linkbar, andere 
Makro-/Preprocessorsyntax etc.).
hth. Jörg

von SF (Gast)


Lesenswert?

>Was muss ich beachten, wenn ich Assembler- Dateien ohne geklautes
>Makefile einbinden möchte?

Eigentlich nichts besonderes. Außer wie oben schon genannt, das 
Assemblersourcen ein großgeschriebenes .S als Endung haben müssen und im 
GCC Assembler Dialekt (gas) geschrieben sein.

Das aktuelle AVR-Studio (V4.16Build618) erkennt zu meiner Überraschung 
.S Dateien automatisch und ruft dann auch den Compiler mit den richtigen 
Kommandozeilenparametern fürs Assemblieren auf.

Vorrausetzung ist allerdings, das auch die .S Dateien in AVR-Studio zu 
den Source Files Ordner hinzugefügt worden sind.

Hier mal die Ausgaben des AVR-Studios (Compiler: WinAVR20090313):
1
rm -rf test_i2cmaster.o i2cmaster.o  testos.elf dep/* testos.hex testos.eep testos.lss testos.map
2
Build succeeded with 0 Warnings...
3
avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT test_i2cmaster.o -MF dep/test_i2cmaster.o.d  -c  ../test_i2cmaster.c
4
avr-gcc  -mmcu=atmega8 -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT i2cmaster.o -MF dep/i2cmaster.o.d  -x assembler-with-cpp -Wa,-gdwarf2 -c  ../i2cmaster.S
5
avr-gcc -mmcu=atmega8 -Wl,-Map=testos.map test_i2cmaster.o i2cmaster.o     -o testos.elf
6
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  testos.elf testos.hex
7
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex testos.elf testos.eep || exit 0
8
avr-objdump -h -S testos.elf > testos.lss
9
10
AVR Memory Usage
11
----------------
12
Device: atmega8
13
14
Program:     378 bytes (4.6% Full)
15
(.text + .data + .bootloader)
16
17
Data:          0 bytes (0.0% Full)
18
(.data + .bss + .noinit)
19
20
21
Build succeeded with 0 Warnings...

von Andreas (Gast)


Lesenswert?

Hallo,

die .S Datei habe ich unter Soruce Files eingebunden.
Allerdings habe ich eine ältere Version des AVR- Studios.

Ich werde mir einemal die neueste Version besorgen und mein Glück damit 
versuchen.

Das Problem ist auch, dass er Fehlermeldungen aus der stdint.h bringt 
(unknown opcode 'typedef').
Darüber hinaus meckert er "bad expression" in der i2cMaster.S.

Dass der Code fehlerhaft ist, glaube ich nicht, da er ja schon bei 
mehreren funktioniert hat.

Vielen Dank für die Bemühungen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.