Tabellen im EEPROM organisieren

Gast #2703650
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.
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
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.
Bastler schrieb:
> Ohne alignemt waeren die lookups deutlich langsamer.

Das bezweifelt keiner.
Aber wie lange dauert dann das, was Du mit R10..R17 danach machst?
Und wieviel Zeit ist bis zum nächsten Aufruf?

Wenn ich einen Funktionsteil um 50% kürze, heißt das noch lange nicht, 
daß das gesamte Programm doppelt so schnell läuft.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.