Hallo,
m=F6glicherweise nicht ganz die richtige NG, aber hier gibt's ja auch reichlich Embedded-Spezialisten.
Die Fakten: ATtiny44 mit externem I2C-EEPROM 24C512 In dem EEPROM befindet sich eine Liste (nicht verkettet) je mit 48 Byte gro=DFen Elementen (also insgesamt max. 1365 St=FCck). Die Liste kann "l=F6chrig" sein, d.h. einige Elemente in der Liste sind ggf. leer.
Die Elemente werden prinzipiell erstmal unsortiert belegt. Das Problem besteht darin, die Elemente der Liste nach M=F6glichkeit sortiert auszulesen.
1=2E Hat jemand eine gute Idee, wie die Sortierung beim Auslesen durchgef=FChrt werden k=F6nnte (zur Erinnerung: der ATtiny44 hat 256 Byte RAM, von dem noch ein Teil f=FCr andere Zwecke ben=F6tigt wird)? Mir f=E4llt dazu nichts ein. Erschwerend kommt noch hinzu, da=DF das ganze so organisiert sein soll, da=DF von einem gegebenen Element aus nach Wunsch des Benutzers jeweils das n=E4chstgr=F6=DFere bzw. n=E4chstkleinere gefunden werden kann. Das Durchfl=F6hen des gesamten EEPROMs nach jeder Benutzeraktion, um das n=E4chste Element zu finden, wirkt selbst bei einigen 100 kHz I2C-Takt schon etwas z=E4h...2=2E Alternativ k=F6nnte der Inhalt des EEPROMs bei Bedarf von Zeit zu Zeit sortiert werden. Nun ist es aber so, da=DF Schreibzugriffe auf das EEPROM im sprichw=F6rtlichen Sinne "teuer" sind. Die =FCblichen effizienten Sortieralgorithmen ala Quicksort & Co. verursachen durch die h=E4ufigen Element- und Teilfeldvertauschungen ein hohes wear out der EEPROM-Speicherzellen. Eine vorher ggf. notwendige Garbage Collection - um eine zusammenh=E4ngende Liste zu haben - t=E4te ein =DCbriges. Welches Sortierverfahren bietet sich f=FCr den Fall "teurer" Speicher- Schreibzugriffe an (unter Beachtung der sehr limiterten RAM-Ressourcen und der "l=F6chrigen" Liste)? Ich habe derzeit eine Variante des "Selectsort" implementiert, erreiche bei 8 MHz Prozessortakt aber Laufzeiten von gut 11 Minuten f=FCr 1365 Elemente :-(
Gru=DF Horst