Forum: Compiler & IDEs AVRGCC und Assemblermacro´s


von Aart Keijmel (Gast)


Lesenswert?

Hallo

Ich versuche mühselig die GrafikLCD routinen von Bakke aus AVRGCC 
aufzurufen , habe das ein teil des gd50_gfx_lib.asm file in 
g_lcd_putbyte.s umbenannt , die Dateiname in Make unter  ASRC 
eingetragen , in das Assemblerfile #include <macros.inc>
und #include <ctoasm.inc> eingefügt ,die Routine vorher  .global 
g_lcd_putbyte und .func g_lcd_putbyte eingefügt und am ende .endfunc

 beim builden kriege ich nun immer Error : constant value required bei 
jeder Assembler Anweisung  im file steht da z.B. cbi portc,1

was mache ich bloß falsch
Ich wollte ein Nokia 7110 LCD unter AVRGCC ansteuern ,hat jemand da ein 
tip , oder beispiel oder Bakke´s routinen eingebunden wo es funktioniert 
damit ich mein Fehlern abschaffen kann ??
Bitte Antwort per email  dl6du@t-online.de
Danke

von Joerg Wunsch (Gast)


Lesenswert?

Geht so einfach nicht.

Richtig wäre es, die Aufrufe von PORTC etc. umzuschreiben in
_SFR_IO_ADDR(PORTC).  Ich befürchte, daß Du dazu keine Lust
haben wirst.

Alternativ kann man sich mit #define __SFR_OFFSET 0 behelfen.

Lesestoff dazu:
http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/group__avr__sfr__notes.html

von Aart Keijmel (Gast)


Lesenswert?

Danke Jörg
Habe es probiert mit #define __SFR_OFFSET 0 an anfang , aber es ändert 
sich leider nichts..

solls den heissen

cbi _SFR_IO_ADDR(PORTC),1 ????

von Jörg Wunsch (Gast)


Lesenswert?

Letzteres wäre der ,,richtig saubere'' Weg, ja.

Ersteres muß auch gehen, aber Du mußt das natürlich vor dem
#include <avr/io.h> angeben.  Dieses File wertet ja den Makro
__SFR_OFFSET bereits aus.

von Aart Keijmel (Gast)


Lesenswert?

Es bleibt konsequent beim
Error : constant value required
und es ist nun noch
Error :  ´',required
Error : number must be less than 8
Error : garbage at end of line

Alles wird noch schlimmer und ich weis überhaupt nicht wodrann es liegen 
soll
der Include hab ich drinn
denke der syntax ist noch falsch

von Joerg Wunsch (Gast)


Lesenswert?

Hmm, muß ich mir dann wohl selbst nochmal ansehen.

Mit avr-gcc -E kannst Du Dir angucken, was der Präprozessor
daraus macht.

73! de DL8DTl

von Aart Keijmel (Gast)


Lesenswert?

Aha es gibt noch mehr OM´s...
Ja ich werde es mal mit -E versuchen , bin noch nicht so lange mit 
avrgcc unterwegs , alles neu für mich.. kämpfe mich durch..
lesen lesen lesen...
73es

von Aart Keijmel (Gast)


Lesenswert?

@ Jörg
Gibs schon was neues??
Haste nochmal probiert??

73es Aart

von Joerg Wunsch (Gast)


Lesenswert?

Öhm, nö.  Bei mir tat das aber soweit, hast Du vielleicht mal ein File,
mit dem das nicht tut?

von Aart Keijmel (Gast)


Lesenswert?

Das Problem ist ja schon bei 2 Zeilen , von Programm kann man da noch
gar nicht reden..


im C Programm steht

extern void g_lcd_putbyte(unsigned char)

und nach main :

g_lcd_putbyte(10);


und im make steht:

ASRC = g_lcd_putbyte.s


im file g_lcd_putbyte.s steht:

#include <macros.inc>
#include <ctoasm.inc>
#include <avr/io.h>

.global g_lcd_putbyte
.func g_lcd_putbyte
g_lcd_putbyte:
cbi __SFR_IO_ADDR(PORTC),1
ret
.endfunc


und schon geht nix...

reicht das ??

...Aart

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.