Forum: Mikrocontroller und Digitale Elektronik Assembler-Frage: Zuweisung konstanter editierbarer Werte


von Иван S. (ivan)


Lesenswert?

Hallo,

ich bin dabei eine LCD-lib für ZiLOGs eZ8 zu schreiben und bin auch 
schon so gut wie fertig. Dabei bin ich jedoch auf ein bis dato nicht 
lösbares Problem gestoßen. Ich möchte eine Zuweisung eines konstanten 
Werts erreichen, der vom Benutzer jedoch editierbar sein soll. Konkret 
möchte ich folgendes in einem .inc-file machen:

LCD_BUSY_DELAY VAR #%07

Dann koennte ich im Apllikationsfile (.asm) nämlich einfach folgendes 
schreiben:

LDX R11,LCD_BUSY_DELAY

Der Assembler stört sich jedoch an der Zuweiseung dieses konstanten 
Werts.
Folgendes funktioniert: LCD_BUSY_DELAY VAR %07FA
Hier wird eine Speicheradresse zugewiesen. Bei dieser Möglichkeit müsste 
ich im Applikationsfile manuell mit LDX LCD_BUSY_DELAY,#%07 zuweisen.

Dies ist jedoch nicht Sinn der Sache, da LCD_BUSY_DELAY schon im 
.inc-file editierbar sein soll. Ubrigens funktioniert es auch mit der 
Direktive EQU nicht.

Ich bin mir im klaren darüber, dass hier kaum jemand den eZ8-Assembler 
verwendet. Trotzdem hoffe ich auf brauchbare Antworten, da das Problem 
auch auf anderen Architekturen auftreten koennte.

Gruß, Iwan

von Naja (Gast)


Lesenswert?

Was uns allen vielleicht helfen könnte, dass Problem zu verstehen: Was 
hindert denn einen Benutzer den Wert zu editieren?

Irgendwie erschliesst sich mir das Problem nicht, was aber sehr 
wahrscheinlich daran liegt, das ich den eZ8 Assembler nicht kenne.

Aber da Du EQU erwähnst, was (hoffentlich) überall ähnlich funktinieren 
könnte: Warum könnte denn der Benutzer den Wert nach dem EQU nicht 
ändern?

Oder geht es um eine Datei, die zur Laufzeit eingelesen werden soll?

von Gast (Gast)


Lesenswert?

Nur Spekulation:

Vielleicht kann man bei VAR oder EQU nur einen untypisierten Wert 
definieren und nicht gleichzeitig festlegen was er bedeutet. Also nicht 
festlegen ob es eine Adresse oder ein Zahlenwert ist.

LCD_BUSY_DELAY VAR %07

LDX R11,#LCD_BUSY_DELAY

von Иван S. (ivan)


Lesenswert?

Gast schrieb:
> Nur Spekulation:
>
> Vielleicht kann man bei VAR oder EQU nur einen untypisierten Wert
> definieren und nicht gleichzeitig festlegen was er bedeutet. Also nicht
> festlegen ob es eine Adresse oder ein Zahlenwert ist.

So scheint es mir auch.

> LCD_BUSY_DELAY VAR %07
> LDX R11,#LCD_BUSY_DELAY

Obiges funktioniert nämlich einwandfrei. Das hilft weiter, danke!

Naja schrieb:
> Was uns allen vielleicht helfen könnte, dass Problem zu verstehen: Was
> hindert denn einen Benutzer den Wert zu editieren?

Die nicht vorhandene Möglichkeit LCD_BUSY_DELAY zu initialisieren. Wo 
kein Wert zugewiesen werden kann, kann auch nichts editiert werden.

> Aber da Du EQU erwähnst, was (hoffentlich) überall ähnlich funktinieren
> könnte: Warum könnte denn der Benutzer den Wert nach dem EQU nicht
> ändern?

Da ähnlich wie bei VAR nur "untypisierte" Werte definiert werden können. 
Ich muss daher den von Gast geschriebenen Weg gehen.

Danke, Iwan

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.