hallo forum, ich möchte in meinem µC-Programm, das auf einem lpc2294 laufen soll, ein array mit werten, in einer schleife die einen ad ausliest beschreiben, um danach etwas statistik zu betreiben. Es lässt sich alles compilieren und auf den lpc aufspielen nur das programm läft nicht sobald ich den kommentar an der stelle XXX im QC aufhebe. #include <stdio.h> /* I/O Functions */ #include <LPC22XX.H> /* LPC22XX PeripheralRegisters */ #include <math.h> extern void init_serial (void); int sendchar (int ch); long adout0 (); long adout1 (); double sqrt(double); int main (void) { int i,j; long a,b,ma,mb; double z,aa,bb; //variablen für statistik long aaa[1500],bbb[1500],xa,xb; double sxa,sxb; sxa=sxb=0; init_serial(); /* Initialize Serial Interface*/ IODIR0 = 0x00000100; /* P0.8 defined as Output */ // 20x den mittelwert ermitteln for (j=1; j<=20; j=j+1) { // den ad i mal auslesen und die ergebnisse aufsummieren ma=mb=0; for (i=1; i<=1500; i=i+1) { IOCLR0 = 0x00000100; /* Turn LED On (P0.8 = 0) */ a=adout0(); b=adout1(); IOSET0 = 0x00000100; /* Turn LED Off (P0.8 = 1) */ ma=ma+a; mb=mb+b; // aaa[i]=a; XXX hier problem! // bbb[i]=b; XXX hier problem! } //mittelwert aa=(double)ma/1500; bb=(double)mb/1500; //mittelwert über ht ausgeben printf ("%f %f \n",aa,bb); } printf ("..........................\n"); while(1); } weis einer warum das programm nicht läuft sobald ich in der schleife aaa[i] einen wert zuweisen möchte? gruß
Die beiden Arrays benötigen ca. 12kB. Mglw. ist der Stack zu klein. Testweise die Arrays in BSS legen, also aaa und bbb "global" außerhalb von main() definieren. Wenn das funktioniert und die arrays unbedingt nicht global definiert sein sollen, weitere Informationen zu verwendetem Toolset geben und Startup-Code mit Stack-Init zeigen.
Das von Martin mag das eine Problem sein. Das andere ist, dass Arrays in C bei 0 beginnend indiziert werden. Wenn du ein Array long aa[5]; definierst, dann gibt es in diesem Array die Indizes 0, 1, 2, 3, 4 (zähl nach, es sind genau 5). und jetzt überleg mal, was an for (i=1; i<=1500; i=i+1) { .... aa[i] = ... falsch sein könnte.
Du solltest die Variablen als static deklarieren...
hello nerds, also ich habe jetzt die größe des arrays auf 15 reduziert und es funktioniert prima. Mein lpc hat 16kB sram und 256kB flash speicher, eine memorymap ist vorhanden, schön wäre es wenn ich direkt aus der schleife werte an bestimmte speicheradressen im flash-speicher schreiben könnte...ich weis halt nur nicht wie so etwas aussehen könnte, hab schon mal was über pointer gelesen aber raff es nicht so richtig... beste grüße und vielen dank für die hilfe!
Der Flashspeicher läßt sich nicht einfach so beschreiben wie RAM. - Vor dem Schreiben mußt du einen ganzen Flashsektor löschen. - Die kleinste "Einheit" an Daten, die auf einmal geschrieben werden muß, ist 256 Byte. - Das ganze ist relativ langsam. - Die Anzahl an Schreibzyklen / Lebensdauer des Flash ist begrenzt. Ich denke, das ist nicht was du wirklich suchst. Ansonsten, Stichwort: IAP im User Manual nachschlagen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.