heise online · c't · iX · Technology Review · Telepolis · mobil · Security · Netze · heise open · heise resale · Autos · c't-TV · Jobs · Kiosk
Zum Inhalt
c't

c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] Re: Kalibrierung der Distanzsensren mittels EEPROM-Tabelle

Absender: Benjamin Benz
Datum: Fr, 09.03.2007 12:43:04
In-reply-to: <45F135B9.5030203@xxxxxx>
References: <BCF016D5ED5AC34FBB655D109519ABCF083EBE@xxxxxxxxxxxxxxxxxxxx> <45ED3B46.4030400@xxxxxx> <45EF385C.3080609@xxxxxx> <A2ED0A68-A8F1-438A-B1E3-18033ED489E3@xxxxxxxxxxxxxxx> <45F135B9.5030203@xxxxxx>


Hallo,
> herr benz schrieb bezüglich eeprom@pc:
> 
>   Was meinen denn die anderen auf dieser Liste dazu?
>   Die Optionen sehen IMHO so aus:
>   1. manuelle Speicherzuteilung ==> code läuft auf PC und MCU identisch
>   2. automatische Speicherzuteilung per avr-gcc ==> Code läuft nicht
>      sinnvoll auf PC
>   3. evtl. kann man mit ein paar geschickten Makros die Speicherzuteilung
>      auf dem PC nachstellen?
> 
>   Nach den von Ihnen genannten Pros würde ich (wenn jemand weiß wie) für
>   Version 3 oder sonst 1 plädieren.
> 
> ich würde auch lieber version 3 haben, aber mir ist noch nichts besseres
> eingefallen. meine bescheidene meinung dazu ist, da es ja auf eine
> emulation der avr-gcc fkt rausläuft, das man dann durchaus erst einmal
> eine version 1 implementieren kann. da sich an parameter und
> rückgabenwerte der fkt ja nichts ändern darf (der name ja eh nicht),
> kann man später, wenn jemand etwas besseres schafft, das ohne probleme
> übernehmen.
> wichtig ist mir persönlich nur, das muss ja nicht für alle so sein ;-) ,
> das das eeprom auf dem pc, wenns denn bei einer datei bleibt, im aufbau
> (selben adressen der variablen)zum bot identisch ist und möglichst als
> bin datei vorliegt. dann kann ich es weiter auf den bot übernehmen und
> via versa.

So, ich hab mal ein wenig Recherche betrieben, um die ganze Diskussion
hier auf solidere Füsse zu stellen. Hier die Ist-Analyse.

Der avr-gcc packt Variablen die so deklariert werden:

uint8 __attribute__ ((section (".eeprom"))) err15=1;

in eine eigene "Section" (siehe auch:
http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Variable-Attributes.html und
http://www.ohse.de/uwe/articles/gcc-attributes.html#func-section und
http://geek.vtnet.ca/doc/initcall/section.html)

Diese Section wird in einem Post-Build-Prozess mit folgenden Kommandos
nachbearbeitet:

> avr-objcopy -O ihex -R .eeprom ct-Bot.elf ct-Bot.hex

löscht die Section (und damit die Initilaisierungswerte) aus dem
.hex-File, damit sie nicht mit ins Flash kommt

> avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load"
--change-section-lma .eeprom=0 -O ihex ct-Bot.elf ct-Bot.eep

Erzeugt eine .eep-Datei, die nur die Initialisierungswerte für die
EEPROM-Variablen enthält und biegt die Startadresse der Section auf 0 um.

Grundlegend sehe ich kein Problem, das auf dem PC genauso zumachen. Die
Sections sind nämlich IMHO keine Spezialität des avr-gcc. Es bliieben
zwei Punkte zu klären:

1. wie extrahiert man auf dem PC die Section aus dem .elf/.exe in eine
eigene Datei
2. Wie bastelt man die Funktion der avr-libc so nach, dass sie die
richtigen Adressen im File anspringt. Das kann aber nicht schwer sein,
da der Src offen liegt.

Soweit mal meine Analyse.

MfG Benjamin Benz


-- 
Benjamin Benz
Heise Zeitschriften Verlag
Redaktion c't
eMail: bbe@xxxxxxxx
WWW  : http://www.heise.de

Heise Zeitschriften Verlag GmbH & Co. KG
Registergericht: Amtsgericht Hannover HRA 26709

Persönlich haftende Gesellschafterin:
Heise Zeitschriften Verlag Geschäftsführung GmbH
Registergericht: Amtsgericht Hannover, HRB 60405
Geschäftsführer: Ansgar Heise, Steven P. Steinkraus, Dr. Alfons Schräder




Copyright © 2007 Heise Zeitschriften Verlag Kritik, Anregungen bitte an c't-WWW Datenschutzhinweis   Impressum