Tabellen im EEPROM organisieren

Gast #2703650
Lesenswert?

Hallo liebes Forum,

ich hab eine grundlegende Frage.

Ich habe eine Tabelle im ROM liegen und um lookups effizient zu machen
habe ich die Startadresse festgelegt, so dass ich das high byte vom 
pointer als index nutzen kann. (.CSEG .ORG 256). So liegt die Tabelle im 
Moment am ende vom Programmcode. Versuche ich die Tabelle in z.B. nach 
"vorne"(.ORG 128) zu legen meldet der Compiler Adressekonflikte. Das 
gleiche passiert natürlich auch wenn der Programmcode größer wird und in 
die Tabelle hineinwächst.

Wie kann man so etwas elegant lösen?

Der Grund ist, dass ich gerne mehrere Tabellen anlegen mochte bei denen 
das highbyte als index nutzbar ist, aber ohne dabei den programcode zu 
fragmentieren.
Ausserdem ist etwas umstaendlich immer von Hand die tabellen an das ende 
des programmcodes zu legen.
#2703663
Lesenswert?

Welcher Prozessor ist das überhaupt?

> Ich habe eine Tabelle im ROM liegen

Was jetzt EEPROM oder ROM. Je nach Prozessor muss das nicht gleich sein. 
Und je nach Prozessor kostet dich der EEPROM Zugriff so viel, dass die 
eine eingesparte Addition für den Index unter 'ferner liefen' fällt (zb 
beim AVR). D.h. Du machst dir zb auf einem AVR Arbeit für etwas, was dir 
in der Realität so gut wie keinen Geschwindigkeitsvorteil bringt.

Daher die Frage nach dem Prozessor.
Gast #2706244
Lesenswert?

Vielen Dank fuer Eure Antworten. Allerdings stimme ich nicht zu.
(Lasse mich aber gerne uberzeugen.)
Folgendes Beispiel auf einem ATtiny45:
Eine funktionen die viel gebrauch von lookuptabellen macht und haeufig 
aufgerufen wird.
1
ldi ZH, high(table1<<1)
2
loop1:
3
...
4
rcall perform_lookups
5
...
6
rjmp loop1
7

8
perform_lookups:
9
mov ZL, R10        
10
LPM R10, Z        
11
mov ZL, R11
12
LPM R11, Z
13
mov ZL, R12
14
LPM R12, Z
15
mov ZL, R13
16
LPM R13, Z
17
mov ZL, R14
18
LPM R14, Z
19
mov ZL, R15
20
LPM R15, Z
21
mov ZL, R16
22
LPM R16, Z
23
mov ZL, R17
24
LPM R17, Z
25
ret
Ohne alignemt waeren die lookups deutlich langsamer. Oder gibt einen 
aehnlich effizienten Weg?


1
.org    pc + 0x7F & 0xFF80              ;alignment
Wie genau funktioniert das Alignment aus diesem Beispiel, insbesondere 
PC?
Ich haette nicht erwartet das man PC zusammen mit .org benutzen darf.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren