c't

c't-Projekte - Mailinglisten


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

Re: [ct-bot] eeprom@pc

Absender: Achim Pankalla
Datum: Fr, 13.07.2007 18:58:58
In-reply-to: <4306C7C0-49CA-4C10-B3F7-1108D4A7A333@xxxxxxxxxxxxxxx>
References: <BCF016D5ED5AC34FBB655D109519ABCF083EBE@xxxxxxxxxxxxxxxxxxxx> <D053B7F5-6BDD-4052-B45F-28FCF0EF45F8@xxxxxxxxxxxxxxx> <45F2B74F.8090706@xxxxxx> <38A4BFD9-CA32-436A-9A1E-B4E6E0652A5D@xxxxxxxxxxxxxxx> <463E0782.1050406@xxxxxx> <0FBD95CF-DA3B-461B-B12B-9FDCD84984D2@xxxxxxxxxxxxxxx> <463F3E0A.7020605@xxxxxx> <8D5B90F4-74FD-45D4-B5B8-DDCAC0B81932@xxxxxxxxxxxxxxx> <464092F7.30605@xxxxxx> <465DB1F9.5030404@xxxxxx> <CF925D4D-FD5A-4581-8480-1C5D35EFEDC9@xxxxxxxxxxxxxxx> <4663027F.4040301@xxxxxx> <F71477F0-03AD-4F06-87E3-AC5DA5BFD1B2@xxxxxxxxxxxxxxx> <466D6849.1020109@xxxxxx> <46756694.9010906@xxxxxx> <6566D2F2-ADE4-4656-86C0-6533B3462B64@xxxxxxxxxxxxxxx> <46866046.7040108@xxxxxx> <4686813D.8020405@xxxxxx> <70929B57-E069-4B5F-AC22-3E1E51ACD696@xxxxxxxxxxxxxxx> <5E0B9EC1-1718-4319-95D6-54862E9ECA42@xxxxxxxxxxxxxxx> <468CB5B0.3000408@xxxxxx> <EB302B19-E327-4736-A0DE-588E25D2EE48@xxxxxxxxxxxxxxx> <468FC24D.5080507@xxxxxx> <4306C7C0-49CA-4C10-B3F7-1108D4A7A333@xxxxxxxxxxxxxxx>


hallo,

Timo Sandmann schrieb:
Auch für MCU sollten wir die Adresse komplett, also in 32 Bit einlesen. Ich weiß nicht, ob man sich darauf verlassen kann, dass das schlichte Weglassen der oberen 2 Bytes immer funktioniert. Wo im Adressraum der Linker die Variablen ablegt, können wir kaum pauschal voraussagen.

anbei ein patch. ;-)
Die Sache ist soweit jetzt im SVN, ich habe es nur unter Mac OS X getestet, unter Linux und Windows müsste das bitte nachgeholt werden.
unter windows scheint es in ordnung zu sein, bei mir läufts genau wie vorher auch. was natürlich kein ordnunglicher test ist. mir genügs aber erst einmal....
Die Post-Build-Einträge kommen in Kürze auch noch in die Projekteinstellungen im SVN, das muss ich nur unter dem alten Eclipse machen.

Ich wäre dafür, dass wir ein 5. Target "Debug Mac OS X" anlegen, weil der Post-Build-Step hier unterschiedlich zu Linux ist, hat jemand etwas dagegen? ;-)
nein (kann aber nur für mich sprechen...) :-)

mit freundlichen grüssen und schönes sonniges wochenende
   achim

Index: E:/eclipse/ct-bot develop/ct-Bot/pc/eeprom-emu_pc.c
===================================================================
--- E:/eclipse/ct-bot develop/ct-Bot/pc/eeprom-emu_pc.c	(revision 1185)
+++ E:/eclipse/ct-bot develop/ct-Bot/pc/eeprom-emu_pc.c	(working copy)
@@ -247,10 +247,11 @@
 static uint16 create_ctab(char *simfile, char *botfile){
 	FILE *fps, *fpb;
 	char sline[250], bline[250]; //Textzeilen aus Dateien
-	char vname_s[30], vname_b[30]; //Dummy und Variablennamen
+	char vname_s[30], vname_b[30]; //Variablennamen
 	size_t addr_s, addr_b; //Adressen der Variablen
 	uint16_t size; //Variablengroesse
 	uint16 vc = 0; //Variablenzaehler
+	size_t first_botaddr = 0xffffffff; //Erste ct-bot EEPROM Adressse
 
 	/*Dateien oeffnen*/
 	if(!(fps=fopen(simfile,"r"))){
@@ -285,8 +286,10 @@
 			/*Variablennamen suchen*/
 			sscanf(&bline[BNAME_POS], "%s", vname_b);
 //			printf("vname_b=%s\n", vname_b);
-			addr_b = strtol(&bline[BADDR_POS], NULL, 16) & 0xffff;	//TODO:	sehr unschoen so, besser kleinste Adresse von allen subtrahieren
+			addr_b = strtol(&bline[BADDR_POS], NULL, 16);
 //			printf("addr_b=0x%lx\n", addr_b);
+			if(addr_b < first_botaddr)//Kleinste ct-bot Adresse bestimmen
+				first_botaddr = addr_b; 
 			size = strtol(&bline[BSIZE_POS], NULL, 16);
 //			printf("size=0x%x\n", size);
 			
@@ -350,12 +353,15 @@
 		}
 	}
 	
-	/*Tabelle auf Startadresse 0 normieren, wenn noetig*/
+	/*Die EEPROM-Startadressen vom ct-bot und/oder Ct-Sim auf Null normieren*/
 	size_t first_simaddr = ctab[0].simaddr; 
-	if(first_simaddr != 0) {
+	if(first_simaddr || first_botaddr) {
 		LOG_INFO("->Adressen werden normiert");
-		for(i=0; i<tsize; i++)
-			ctab[i].simaddr -= first_simaddr;
+		for(i=0; i<tsize; i++){
+			if(first_simaddr) ctab[i].simaddr -= first_simaddr;
+			if(first_botaddr) ctab[i].botaddr -= first_botaddr;
+//			printf("addr_b=0x%x addr_b=0x%x\n", ctab[i].botaddr, ctab[i].simaddr);
+		}
 	}
 
 //	for (i=0; i<tsize; i++) {
Index: E:/eclipse/ct-bot develop/ct-Bot/Changelog.txt
===================================================================
--- E:/eclipse/ct-bot develop/ct-Bot/Changelog.txt	(revision 1185)
+++ E:/eclipse/ct-bot develop/ct-Bot/Changelog.txt	(working copy)
@@ -1,5 +1,7 @@
 CHANGELOG fuer c't-Bot
 ======================
+2007-07-13 Achim Pankalla [achim.pankalla@xxxxxx]: PC-EEPROM-Emulation weiter optimiert
+
 2007-07-13 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: PC-EEPROM-Emulation optimiert / korrigiert 
 
 2007-07-12 Timo Sandmann [mail@xxxxxxxxxxxxxxx]: Delay-Verhalten etwas vereinfacht und in andere Verhalten eingebaut