Hallo zusammen, was ist der unterschied zwischen dem Aufruf if (strncmp_P(File_Name,PSTR("cam.jpg"),7) == 0) und if ( memcmp(File_Name, "cam.jpg",7) == 0)
1. dass "cam.jpg" im ersten Fall ROM braucht, im zweiten Fall ROM und RAM (ich nehme an, das ist AVR-GCC/avr-libc hier). 2. dass im ersten Fall der Vergleich abgebrochen wird, wenn File_Name ein '\0' irgendwo bereits vor dem 7. Zeichen hat, während im zweiten Fall weiter irgendwo im Speicher gelesen werden könnte.
memcmp vergleicht die angegebene Anzahl Bytes im Speicher, strncmp vergleicht maximal die angegebene Anzahl Zeichen zweier Strings miteinander und bricht bei Stringende auch vorher ab. Obendrein greift strncmp_P als Spezial-Konstrukt des avr-gcc auf Daten im Programmspeicher (dem Flash) zu - was aufgrund der Harvard-Architektur des AVR anders codiert werden muss als bei von-Neumann-Prozessoren.
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.