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
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.
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
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
> 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
>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... |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.