Mam projekt w #cplusplus, którym, póki co, tylko main jest .cpp, reszta plików jest w C. Każdy plik .h i .c opatrzony jest dyrektywą warunkową #ifdef __cplusplus extern "c"{ itp odpowiednio tuz przed końcem pliku. Dwa identyczne pod względem plików kody, C++ przeleciany debugerem, wszystko sie wykonuje. Niestety projekt c zajmuje około 22kB kodu i nieco ponad 40kB ramu, za to kod spod arm_none_eabi_g++ daje na wyjściu około 12kB kodu i rezerwuje tylko 28 kB ramu i ofc nie działa. Ale dioda miga, przerwania działają. Pytanie jest o przyczynę różnic w wielkości kodu optymalizacje wyłączone, opcje kompilacji identyczne). Czy sa jakieś myki gdzieś na etapie składania kodu do cpp ze jest go mniej niz spod gcc c. Czy sa jakieś makra, które mogą zostać rozwinięte w inny sposób? #jezykc #mojeidejestpowazne
@Analityk: Strzelam, ze UB + deadcode elimination. EDIT: widze, ze optymalizacje wylaczone masz (w jaki sposob je wylaczyles?). Wiec nie wiem co jest nie tak.
@Analityk: rowniez sklanialbym sie co do tego, ze opcje kompilatora sa zle. Roznica moze wskazywac np na to, ze moze brakowac chocby kodu startowego (skoro nie ma problemu przy linkowaniu, wiec zakladam, ze biblioteki sa)...
@Kaczus2B: sprawdzam kod w pliku .lss, widać tablice wektorów przerwań. Kod startowy dodawany jest w opcjach linkera -enrtypoint=ResetHandler, sa jeszcze inne flagi. Opcje kompilacji cpp sa identyczne z c z wyjątkiem -stdgnu i kilku ostrzeżeń. Skrypt linkera jest taki sam, jedynie make może sie różnić ale to muszę sie upewnić.
@dupasmoka: sa nastawione na -O0 ale mogę dodać ta opcje do pozostałych flag. Oryginalny kod działa z -Os
Dwa identyczne pod względem plików kody, C++ przeleciany debugerem, wszystko sie wykonuje.
Niestety projekt c zajmuje około 22kB kodu i nieco ponad 40kB ramu, za to kod spod arm_none_eabi_g++ daje na wyjściu około 12kB kodu i rezerwuje tylko 28 kB ramu i ofc nie działa. Ale dioda miga, przerwania działają.
Pytanie jest o przyczynę różnic w wielkości kodu optymalizacje wyłączone, opcje kompilacji identyczne). Czy sa jakieś myki gdzieś na etapie składania kodu do cpp ze jest go mniej niz spod gcc c. Czy sa jakieś makra, które mogą zostać rozwinięte w inny sposób?
#jezykc #mojeidejestpowazne
EDIT: widze, ze optymalizacje wylaczone masz (w jaki sposob je wylaczyles?). Wiec nie wiem co jest nie tak.
Skrypt linkera jest taki sam, jedynie make może sie różnić ale to muszę sie upewnić.
@dupasmoka: sa nastawione na -O0 ale mogę dodać ta opcje do pozostałych flag. Oryginalny kod działa z -Os
@Analityk: hm?
Nie mam pojęcia co jest nie tak jak powinno.