atmega168-20PU furán viselkedik 8k-nál nagyobb programmal
atmega168-20PU furán viselkedik 8k-nál nagyobb programmal
Sziasztok!
Azt vettem észre, hogy ha egy program nagyobb mint 8k akkor rosszul működik a mikrokontroller. Először csak az tűnt föl, hogy a tökéletesen működő, letesztelt programomhoz hozzáírtam egy új függvényt, amit nem használtam sehol és a program elromlott. Aztán kitöröltem az új részt és működött.
Majd az új részt bennehagyva feltoltam az avr-gcc optimalizációját és így már 8k alá csökkent a programméret. Így a régi és az új funkció is tökéletesen működik. Visszaállítva optimalizálás nélkül persze megint nem működik.
Az adatlap szerint az atmega168-nak 16k memóriája van. Nem értem miért nem lesz jó a 8k-nál kicsit nagyobb program. Tapasztalt már valaki hasonlót?
pentike
Azt vettem észre, hogy ha egy program nagyobb mint 8k akkor rosszul működik a mikrokontroller. Először csak az tűnt föl, hogy a tökéletesen működő, letesztelt programomhoz hozzáírtam egy új függvényt, amit nem használtam sehol és a program elromlott. Aztán kitöröltem az új részt és működött.
Majd az új részt bennehagyva feltoltam az avr-gcc optimalizációját és így már 8k alá csökkent a programméret. Így a régi és az új funkció is tökéletesen működik. Visszaállítva optimalizálás nélkül persze megint nem működik.
Az adatlap szerint az atmega168-nak 16k memóriája van. Nem értem miért nem lesz jó a 8k-nál kicsit nagyobb program. Tapasztalt már valaki hasonlót?
pentike
Igen, itt is ezt írják, hogy -O0 -val egy két dolog furán tud működni:
http://www.avrfreaks.net/index.php?name ... ic&t=79510
Az optimalizációhoz ezek szerint lehet köze, de a nagyobb 8k, kisebb 8k probléma egyértelműen jelentkezik -O0 -val. Azért Kipróbálom -OS -el vagy -O3 -al is, hogy úgy is csinálja-e?
http://www.avrfreaks.net/index.php?name ... ic&t=79510
Az optimalizációhoz ezek szerint lehet köze, de a nagyobb 8k, kisebb 8k probléma egyértelműen jelentkezik -O0 -val. Azért Kipróbálom -OS -el vagy -O3 -al is, hogy úgy is csinálja-e?
Kipróbáltam. Ennyit írtam hozzá a programhoz:
Ha egy "a" betűt törlök, hibátlanul működik a program, ha nem, hibás adatokat írkál.
Ezt a függvényt sehol nem hívom meg, csak ott van, a -O2 szinten optimalizált bináris mérete 4998 byte, szóval nem 8K a határ, hanem valami más gond van.
Nem látok itt fájlfeltöltési lehetőséget, bemásolni meg nem szeretném az egész kódot, mert 5 fájl és elég hosszú.
Kód: Egész kijelölése
void fillSpace() {
printf("a");
printf("aaaaaaaa");
}
Ezt a függvényt sehol nem hívom meg, csak ott van, a -O2 szinten optimalizált bináris mérete 4998 byte, szóval nem 8K a határ, hanem valami más gond van.
Kód: Egész kijelölése
avr-size --format=berkeley -t InterruptTest.elf
text data bss dec hex filename
4132 338 528 4998 1386 InterruptTest.elf
4132 338 528 4998 1386 (TOTALS)