c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
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