Re: FOR Schleife beschleunigen? Kategorie: Programmierung (von Detlef Bäthke - 20.04.2007 9:28) | ||
Als Antwort auf Re: FOR Schleife beschleunigen? von André H. - 17.04.2007 1:00 | ||
| ||
Hallo André, vielen Dank für deine �berlegungen. Ein fester Endwert bringt tatsächlich eine Beschleunigung der FOR Schleife. Ich hatte erwartet, dass der Wert nur einmal berechnet wird. Die IF Abfrage habe ich auch enfernt. Nun gelten aber für Startadresse und Endadresse bestimmte Regeln. Dies ist bei meiner Anwendung kein Problem und bringt einen spürbaren Geschwindigkeitszuwachs. Ich konnte allerdings keine Unterschied zwischen FOR und WHILE Schleife feststellen. An der FOR Schleife bin ich wegen der Endadresse 0x7FFF gescheitert (Integer �berlauf). Eine Longinteger Zählvariable hätte die FOR Schleife bestimmt langsamer gemacht. eeoutarray (data[i], pagesize) funktioniert bei mir einwandfrei. Pagewrite benutze ich natürlich. Allerdings bisher nur 32 Byte wegen dem 25C640. Ich habe nun die Routine geändert, damit die 64 Byte beim 95256 genutzt werden können. Damit ergeben sich nun folgende Zeiten: Write: 40s -> 9s -> 5,5s Verify: 25s -> 2s Gruss Detlef function write_range32 (byte data[], int startaddr, int endaddr) returns int { int i; int k; int l; int len; int pagesize; ports.set( cs,1); ports.set( din,0); ports.set( clk,0); pagesize=32; if (endaddr > 0x2000) { pagesize = 64; } i = startaddr; len = endaddr - pagesize + 1; while (i <= len) { // write enable instruction wr_instruction(opcode_wren); k = rdsr(rdsr_wel); if (k == 0) { lasterr=0x390000 or i; return 0; } // start write sequence ports.set (cs,0); eeout(8, opcode_write); eeout(16, i); eeoutarray (data[i], pagesize); // complete write cycle ports.set (cs,1); // write cycle time = 5 ms for l = 0 ... 5 { sleep 1; // read status register WIP k = rdsr(rdsr_wip); if (k == 0) and (l == 0) { // beim ersten Mal sollte WIP aktiv sein! lasterr=0x190000 or i; return 0; } if (k == 0) { break; } } if (k != 0) { lasterr=0x290000 or i; return 0; } if (i < 0x7FC0) { i = i + pagesize; } else { i = 0x7FFF; } } return -1; } | ||
Antwort schreiben Antworten: |