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