Ads_700x200

tme

czwartek, 6 września 2012

PetitFS - Atmel Toolchain - Warnings!

Witam,

Dzisiaj chciałbym przedstawić taki mały HINT ;) (podpowiedź). Otóż z uwagi na to, iż od niedawna przeszedłem na nowy toolchain Atmela pod Eclipse (ver: 3.4) .... to okazuje się, że wprowadzono w nim sporo nowych jakby rygorów. Na temat wymuszonego specyfikatora const już pisałem na blogu, a przez to kłopotach z PSTR. Teraz okazało się, że próba kompilacji znanych bibliotek PetitFS w nowym toolchainie owocuje kolejnymi warningami jak na załączonych niżej obrazkach. Dlatego postanowiłem dojść do tego jak  ten problem rozwiązać i podzielić się z wami jak zwykle. Może komuś się przyda ? ;)



Poniżej przykład warningów pochodzących z głównego pliku pff.c


Oczywiście rozmawiamy o porządnym środowisku programistycznym jakim jest Eclipse ;) ... Ale ok, warningi pojawiają się w związku z dosyć ciekawym pomysłem na stworzenie makr w pliku pff.h, które z kolei pozwalają na wygodne poruszanie się po danych z klastrów FAT32. Chodzi o te makra:


A związane jest to z naruszeniem zasad kompilatora związanych z poziomami optymalizacji i aliasingu, jeśli chodzi o jawne rzutowania typów w tym wskaźnikowych i konwersje liczb z tym związane. Zresztą widzimy w podpowiedzi, że chodzi o opcję domyślną -Wstrict-aliasing, która jest domyślnie załączona tak jakby była z parametrem = 3, czyli -Wstrict-aliasing=3. Niestety aby przeszedł taki zabieg - jaki widzimy w makrach należy zgodzić się z użyciem opcji -Wstrict-aliasing=1. A wszystko jest opisane tutaj:


W związku z tym wystarczy wejść w ustawienia projektu i dodać taki parametr w toolchainie jak niżej:


Skompilować i okaże się, że warnigi znikną a ilość zajętości Flash nie ulegnie zmianie w związku z tym, że nadal korzystamy z opcji optymalizacji -Os.

Dla dociekliwych dodam, że ten sam efekt można uzyskać przy zmianie opcji optymalizacji na -O0 lub -O1 ;) .... wtedy nie trzeba zmieniać poziomu -WStrict-aliasing, no ale to wydaje się być oczywiste no i trzeba się wtedy liczyć przy prockach AVR z tym, że gwałtownie podskoczy nam ilość zajętej pamięci Flash po kompilacji. Zatem rozwiązanie, które proponuję wyżej wydaje się być jedynie słuszne ;) ... i mam nadzieję, że przyda się to każdemu kto spotka się z takim problemem i nie będzie wiedział jak go ugryźć

2 komentarze:

  1. Fajnie działa:) Te warningi były trochę denerwujące.

    OdpowiedzUsuń
  2. Oczywiście rozmawiamy o porządnym środowisku programistycznym jakim jest Eclipse ;) . :):):):):):):):):):):)

    OdpowiedzUsuń