Forum: Compiler & IDEs Inline Assembler ATMEL Studio 6.1


von Michael_KM (Gast)


Lesenswert?

Hallo.

Ich möchte gern mit ATMEL Stduio 6.1 und dem eingebundenen C Compiler
des Codevision ein alphanumerisches LCD ansteuern. Auf PORTD, ist
Adresse 0x12.
Dazu möchte ich gern die folgende Zeile einbinden:

.equ __lcd_port=0x12

im Inline Assembler im ATMEL Studio 6.1 einfügen.
Leider habe ich es bisher nicht geschafft mit

ams volatile (".equ __lcd_port=0x12")

es zum Laufen zu bekommen.
Auch folgendes funktioniert nicht:

#define LCD_PORT PORTD

Ist die Syntax verkehrt?
Und wenn ja wie muss die Syntax korrekter weise lauten?
Zusätzlich habe ich die LCD.h des Codevision eingebunden um die dort 
verwendete LCD.LIB zu verwenden.
Kann mir jemand helfen?

: Verschoben durch Moderator
von Peter II (Gast)


Lesenswert?

Michael_KM schrieb:
> Auch folgendes funktioniert nicht:

warum nicht, was geht denn nicht?

>.equ __lcd_port=0x12
macht in einen C programm wenig sinn, wie kommst du darauf das du das 
brauchst?

von Michael_KM (Gast)


Lesenswert?

Ich möchte gern die vorhandene Libary für alphanumerische LCD's 
verwenden LCD.LIB heißt diese.
Zur Einbindung wird eine entsprechende LCD.h verwendet, in welcher auf 
diese Bibliothek zugegriffen wird.

Die Bibliothek ist nun in Assembler geschrieben. Und der LCD_Port muss 
im C Code initalisiert werden, da dieser universell sein soll.

Im Compiler des Codevision werden in C definierte Variablen im Inline 
Assembler mit "__" eingeleitet. Somit kann im Assembler auf diese 
Variablen zu geriffen werden.

Lasse ich das ATMEL Studio außen vor und arbeite mit dem Codevision 
direkt, funktioniert die Einbidung tadellos:

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>

.
.
.
.

lcd_init(16);

lcd_gotoxy(1,0);
sprintf(string,"AAAA");
lcd_puts(string);

Wenn ich das mit dem Codevision compeliere und dann brenne, zeigt das 
Display alles korrekt an.
Ich habe nun versucht im ATMEL Studio das gleiche nachzu empfinden. 
Bisher ohne Erfolg. Leider weiß ich nicht genau wo mein Klemmer ist.

von Karl H. (kbuchegg)


Lesenswert?

Das hat aber nichts mit dem AVR-Studio an sich zu tun.

Das AVR-Studio macht nur die Verwaltung der Programmtexte, Aufrufe des 
COmpilers, Aufruf des Assemblers etc.

Wenn du den Codevision Compiler ins AVR-Studio eingebunden hast, dann 
ändert sich nichts an der Syntax. Denn es ist ja nach wie vor der 
gleiche Compiler wie sonst auch, der sich den Programmtext vornimmt und 
übersetzt. Und dem Texteditor ist es piep schnurz egal, was du in deinen 
Programmtext hineinschreibst.
Allenfalls kommt das Syntax-Highlighting durcheinander. Aber das ist 
eine Sache des Komforts und nicht der Programmfunktionalität.


Ich glaube allerdings eher, dass du eben nicht den Codevision Compiler 
ins AVR-Studio eingebunden hast, sondern nach wie vor mit dem 
default-mässig installierten AVR-GCC arbeitest.
Ganz abgesehen davon, dass eine 08/15 HD44780 LCD Library in Assembler 
zu schreiben, für einen C-Programmierer keine gute Idee ist. Es gibt 
ganz einfach keinen Grund dafür. Ob der µC jetzt in C Däumchen dreht 
oder direkt in Assembler ist Jacke wie Hose.

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.