www.mikrocontroller.net

Forum: GCC Tabellen im EEPROM organisieren


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bastler (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
        .org    pc + 0x7F & 0xFF80              ;alignment

Karl hat recht, in der Praxis hat das keinen merkbaren Effekt.


Peter

Autor: Bastler (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.
ldi ZH, high(table1<<1)
loop1:
...
rcall perform_lookups
...
rjmp loop1

perform_lookups:
mov ZL, R10        
LPM R10, Z        
mov ZL, R11
LPM R11, Z
mov ZL, R12
LPM R12, Z
mov ZL, R13
LPM R13, Z
mov ZL, R14
LPM R14, Z
mov ZL, R15
LPM R15, Z
mov ZL, R16
LPM R16, Z
mov ZL, R17
LPM R17, Z
ret
Ohne alignemt waeren die lookups deutlich langsamer. Oder gibt einen 
aehnlich effizienten Weg?


.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.

Autor: Peter Dannegger (peda)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net