Hallo!
Folgenden Minimalcode habe ich geschrieben. Gerade habe ich keinen
Controller zum Testen. Kompiliert habe ich mit dem winavr für einen
Atmega328P.
Evtl. könnt ihr mal den kleinen code angucken und bescheid geben, falls
es so nicht funktioniert. DANKE!
> void eeprom_write_struct(short addr,void *obj,char size){> char i,*ptr=(char *)obj;> for (i=0;i<size;i++)> eeprom_write_byte(addr++,*(ptr++));> }>> void eeprom_read_struct(short addr,void *obj,char size){> char i,*ptr= (char *)obj;> for (i=0;i<size;i++)> *(ptr++)=eeprom_read_byte(addr++);> }
Gratuliere:
Du hast gerade die Funtionen eeprom_write_block bzw. eeprom_read_block
neu erfunden. Nur dass du für size den falschen Datentyp genommen hast
:-)
gerade habe ich gelesen:
size_t corresponds to the integral data type returned by the language
operator sizeof
damit weiß ich nun,dass sizeof keine funktion ist, sondern ein Operator,
der daten im format size_t zurückgibt.
also ich füttere die Funktionen ja mit dem argument sizeof(...) dann
werde ich mal die funktionsköpfe entsprechend von char auf size_t
ändern. Das sollte dann reichen oder?
Timo P. schrieb:> gerade habe ich gelesen:>> size_t corresponds to the integral data type returned by the language> operator sizeof>> damit weiß ich nun,dass sizeof keine funktion ist, sondern ein Operator,> der daten im format size_t zurückgibt.>> also ich füttere die Funktionen ja mit dem argument sizeof(...) dann> werde ich mal die funktionsköpfe entsprechend von char auf size_t> ändern. Das sollte dann reichen oder?
Ähm.
Warum nimmst du nicht die Funktionen eeprom_read_block bzw.
eeprom_write_block anstelle deiner Funktionen? Die machen genau das
gleiche.
Gibt es eine geschickte Möglichkeit, eine ID in der whitelist ausfindig
zu machen?
Reicht eine for schleife, die direkte Vergleiche durchführt, oder gibt
es geschicktere Wege als z.B.
Bei 10 Einträgen lohnt es nicht, sich da einen Kopf wegen Optimierungen
zu machen.
Im Allgemeinen: ja, die gibt es. (*)
Wie suchst du denn in einem Telefonbuch nach "Meyer"?
Du schlägst es in der Mitte auf und liest Huber. Meyer kommt alphabetich
nach Huber, also kannst du die erste Hälfte des Telefonbuchs schon mal
vergessen, dort kann Meyer nicht sein. Aus der hinteren Hälfte nimmst du
wieder die Mitte und findest "Peter". Meyer ist alphabeteich vor
"Peter", also kannst du von deinem jetzigen Suchebereich schon mal die
hintere Hälfte vergessen. Und das machst du so lange, bis du beim Meyer
bist, oder dein Suchbereich dir sagt, dass Meyer nicht vorkommt.
Voraussetzung: Die Daten müssen sortiert sein.
(*) Es gibt noch viele andere Möglichkeiten. Donald Knuth hat einen
ganzen >300 Seiten starken Wälzer zu diesen Themenbereichen geschrieben.
Aus der Reihe "The art of computer programming" (wenn mich nicht alles
täuscht) den Volume 2: "Sorting and Searching"
Ich denke, dann werde ich mir die Mühe nicht machen. Es geht bei der
whitelist um eine Berechtigungsliste von Funkkomponenten-IDs. Es sind ja
auch nur ca 10Stk.
Danke für die Hilfe und auch für den gezeigten Link!