Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

AVT-987 - problem z kompilacją źródeł

_ImPuLs_
-
-
Posty: 17
Rejestracja: 30 lis 2003, o 21:58
Lokalizacja: Krasnystaw
Kontaktowanie:

AVT-987 - problem z kompilacją źródeł

Postautor: _ImPuLs_ » 11 mar 2009, o 20:38

Witam

Przy kompilacji źródeł w AVR Studio pojawia mi się błąd w funkcji 'GetTemp'
" ../AVT987.c:109: warning: array subscript has type `char' "

Kompilując te same źródła od strony AVRSide mam taki sam błąd.

Źródła są pobrane bezpośrednio ze strony EP, narazie bez żadnych przeróbek.

Proszę o ew. pomoc lub podpowiedź od czego mam zacząć ?

~~~~

Wersja AVR Studio:
AVR Studio 4.12.460
GUI Version 4, 12, 0, 460
AVR Simulator 1, 0, 1, 6
ATMEGA8 186

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 11 mar 2009, o 20:47

Jest to tylko ostrzeżenie i program powinien działać poprawnie.
Mówi ono że jako index dla tablicy została użyta zmienna typu char - jeśli zmienisz typ tej zmiennej na int to ostrzeżenie zniknie - ale program będzie miał większą objętość i zajmie więcej RAM-u. Jeśli programista panuje nad zakresem tablic to powinno działać.

Marek

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 11 mar 2009, o 21:00

Jeśli tylko to Ci się pokazuje, to powinieneś otrzymywać skompilowany program. To jest tylko (lub aż) warning (ostrzeżenie). Zapewne jakaś niezgodność typu, załatwiana niejawną konwersją. Bez obejrzenia źródełka nie powiem więcej, w tym czy to może być groźne.

_ImPuLs_
-
-
Posty: 17
Rejestracja: 30 lis 2003, o 21:58
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: _ImPuLs_ » 11 mar 2009, o 22:54

tzn. żeby bardzo nie namieszać to podam wszystko co jest efektem kompilacji:

w AVRStudio:

Build started 11.3.2009 at 19:04:38
avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -O0 -Wp,-M,-MP,-MT,AVT987.o,-MF,dep/AVT987.o.d -c ../AVT987.c
../AVT987.c: In function `GetTemp':
../AVT987.c:107: error: 'for' loop initial declaration used outside C99 mode
../AVT987.c:109: warning: array subscript has type `char'
make: *** [AVT987.o] Error 1
Build failed with 1 errors and 1 warnings...


oraz w AVRSide:
(po kompilacji <Ctrl+F9>:

rl1.c:109 - warning: array subscript has type 'char'

(po kompilacji <F9>:
rl1.c:156: error - undefined reference to 'dtostrf'
rl1.c:215: error - undefined reference to 'dtostrf'
rl1.c:242: error - undefined reference to 'dtostrf'


Źródłą są tutaj.

http://www.ep.com.pl/pobierz.php?id=3036

Narazie nic nie zmieniałem. Przymierzam się do kilku zmian ale chciałem na początek sprawdzić czy kompilacja oryginalnych źródeł da taki sam plik HEX jaki jest opublikowany.

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 12 mar 2009, o 18:40

Spróbuj zamiast

Kod: Zaznacz cały

for(char i=8;i>=0;i--)
Wpisać

Kod: Zaznacz cały

char i; for(i=8;i>=0;i--)
lub lepiej

Kod: Zaznacz cały

int i; for(i=8;i>=0;i--)
Marek

_ImPuLs_
-
-
Posty: 17
Rejestracja: 30 lis 2003, o 21:58
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: _ImPuLs_ » 13 mar 2009, o 19:57

Po zmianie na tę pierwszą propozycję mam taki efekt:

Kod: Zaznacz cały

Build started 13.3.2009 at 19:53:00 avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -O0 -Wp,-M,-MP,-MT,AVT987.o,-MF,dep/AVT987.o.d -c ../AVT987.c ../AVT987.c: In function `GetTemp': ../AVT987.c:111: warning: array subscript has type `char' avr-gcc -mmcu=atmega8 AVT987.o -o AVT987.elf E:\WinAVR\bin\..\lib\gcc\avr\3.4.3\..\..\..\..\avr\bin\ld.exe: region text is full (AVT987.elf section .text) AVT987.o(.text+0x2a0): In function `Intro': ../AVT987.c:123: undefined reference to `WriteLcd' AVT987.o(.text+0x2a6):../AVT987.c:124: undefined reference to `PutsLcd_P' AVT987.o(.text+0x2ac):../AVT987.c:125: undefined reference to `WriteLcd' AVT987.o(.text+0x2b2):../AVT987.c:126: undefined reference to `PutsLcd_P' AVT987.o(.text+0x2b8):../AVT987.c:127: undefined reference to `DispTim' AVT987.o(.text+0x2bc):../AVT987.c:128: undefined reference to `DispTim' AVT987.o(.text+0x2ca):../AVT987.c:129: undefined reference to `WriteLcd' AVT987.o(.text+0x2d0):../AVT987.c:130: undefined reference to `PutsLcd_P' AVT987.o(.text+0x2d6):../AVT987.c:131: undefined reference to `WriteLcd' AVT987.o(.text+0x2dc):../AVT987.c:132: undefined reference to `PutsLcd_P' AVT987.o(.text+0x2e2):../AVT987.c:133: undefined reference to `DispTim' AVT987.o(.text+0x2e6):../AVT987.c:134: undefined reference to `DispTim' AVT987.o(.text+0x30a): In function `MeasureTempThread': ../AVT987.c:141: undefined reference to `AdcGetValue' AVT987.o(.text+0x3c6): In function `DispMainScreen': ../AVT987.c:153: undefined reference to `DispTim' AVT987.o(.text+0x3d2):../AVT987.c:155: undefined reference to `WriteLcd' AVT987.o(.text+0x3d8):../AVT987.c:157: undefined reference to `PutsLcd_P' AVT987.o(.text+0x3f8):../AVT987.c:158: undefined reference to `dtostrf' AVT987.o(.text+0x3fe):../AVT987.c:159: undefined reference to `PutsLcd' AVT987.o(.text+0x404):../AVT987.c:160: undefined reference to `PutsLcd_P' AVT987.o(.text+0x40a):../AVT987.c:162: undefined reference to `PutsLcd_P' AVT987.o(.text+0x438):../AVT987.c:163: undefined reference to `dtostrf' AVT987.o(.text+0x43e):../AVT987.c:164: undefined reference to `PutsLcd' AVT987.o(.text+0x444):../AVT987.c:166: undefined reference to `WriteLcd' AVT987.o(.text+0x44a):../AVT987.c:168: undefined reference to `PutsLcd_P' AVT987.o(.text+0x4a6):../AVT987.c:169: undefined reference to `dtostrf' AVT987.o(.text+0x4ac):../AVT987.c:170: undefined reference to `PutsLcd' AVT987.o(.text+0x4b2):../AVT987.c:171: undefined reference to `PutsLcd_P' AVT987.o(.text+0x4ee):../AVT987.c:176: undefined reference to `PutsLcd_P' AVT987.o(.text+0x4f6):../AVT987.c:179: undefined reference to `PutsLcd_P' AVT987.o(.text+0x4fe):../AVT987.c:182: undefined reference to `PutsLcd_P' AVT987.o(.text+0x504):../AVT987.c:186: undefined reference to `DispTim' AVT987.o(.text+0x55a): In function `DispSetScreen': ../AVT987.c:206: undefined reference to `WriteLcd' AVT987.o(.text+0x560):../AVT987.c:207: undefined reference to `WriteLcd' AVT987.o(.text+0x566):../AVT987.c:208: undefined reference to `PutsLcd_P' AVT987.o(.text+0x5e4):../AVT987.c:214: undefined reference to `dtostrf' AVT987.o(.text+0x60e):../AVT987.c:217: undefined reference to `dtostrf' AVT987.o(.text+0x614):../AVT987.c:220: undefined reference to `WriteLcd' AVT987.o(.text+0x61a):../AVT987.c:221: undefined reference to `PutsLcd' AVT987.o(.text+0x64c): In function `DisplaySelfTunning': ../AVT987.c:228: undefined reference to `DispTim' AVT987.o(.text+0x668):../AVT987.c:234: undefined reference to `WriteLcd' AVT987.o(.text+0x66e):../AVT987.c:235: undefined reference to `WriteLcd' AVT987.o(.text+0x67e):../AVT987.c:239: undefined reference to `WriteLcd' AVT987.o(.text+0x684):../AVT987.c:240: undefined reference to `WriteLcd' AVT987.o(.text+0x68a):../AVT987.c:242: undefined reference to `WriteLcd' AVT987.o(.text+0x690):../AVT987.c:243: undefined reference to `PutsLcd_P' AVT987.o(.text+0x6b0):../AVT987.c:244: undefined reference to `dtostrf' AVT987.o(.text+0x6b6):../AVT987.c:245: undefined reference to `PutsLcd' AVT987.o(.text+0x6bc):../AVT987.c:246: undefined reference to `PutsLcd_P' AVT987.o(.text+0x6cc):../AVT987.c:250: undefined reference to `WriteLcd' AVT987.o(.text+0x6d2):../AVT987.c:251: undefined reference to `PutsLcd_P' AVT987.o(.text+0x6d8):../AVT987.c:252: undefined reference to `WriteLcd' AVT987.o(.text+0x6de):../AVT987.c:253: undefined reference to `PutsLcd_P' 7: undefined reference to `WriteLcd' AVT987.o(.text+0x6f4):../AVT987.c:258: undefined reference to `PutsLcd_P' AVT987.o(.text+0x6fa):../AVT987.c:259: undefined reference to `WriteLcd' AVT987.o(.text+0x700):../AVT987.c:260: undefined reference to `PutsLcd_P' AVT987.o(.text+0x706):../AVT987.c:264: undefined reference to `DispTim' AVT987.o(.text+0x734): In function `DisplayThread': ../AVT987.c:278: undefined reference to `KeyZTim' AVT987.o(.text+0x73c):../AVT987.c:278: undefined reference to `key_p' AVT987.o(.text+0x77c):../AVT987.c:286: undefined reference to `key_p' AVT987.o(.text+0x784):../AVT987.c:289: undefined reference to `key_r' AVT987.o(.text+0x7d0):../AVT987.c:292: undefined reference to `Tim' AVT987.o(.text+0x7da):../AVT987.c:295: undefined reference to `key_p' AVT987.o(.text+0x7e2):../AVT987.c:298: undefined reference to `key_r' AVT987.o(.text+0x82c):../AVT987.c:301: undefined reference to `Tim' AVT987.o(.text+0x836):../AVT987.c:304: undefined reference to `key_p' AVT987.o(.text+0x850):../AVT987.c:309: undefined reference to `key_p' AVT987.o(.text+0x866):../AVT987.c:314: undefined reference to `ExitTim' AVT987.o(.text+0x86a):../AVT987.c:314: undefined reference to `ExitTim' AVT987.o(.text+0x870):../AVT987.c:315: undefined reference to `KeyZTim' AVT987.o(.text+0x87a):../AVT987.c:318: undefined reference to `key_p' AVT987.o(.text+0x894):../AVT987.c:324: undefined reference to `KeyZTim' AVT987.o(.text+0x89a):../AVT987.c:325: undefined reference to `WriteLcd' AVT987.o(.text+0x8a0):../AVT987.c:326: undefined reference to `WriteLcd' AVT987.o(.text+0x8a6):../AVT987.c:327: undefined reference to `PutsLcd_P' AVT987.o(.text+0x8aa):../AVT987.c:329: undefined reference to `key_p' AVT987.o(.text+0x8b0):../AVT987.c:333: undefined reference to `key_p' AVT987.o(.text+0x8d0):../AVT987.c:338: undefined reference to `key_p' AVT987.o(.text+0x8e0):../AVT987.c:342: undefined reference to `key_r' AVT987.o(.text+0x92c):../AVT987.c:345: undefined reference to `Tim' AVT987.o(.text+0x93c):../AVT987.c:349: undefined reference to `key_p' AVT987.o(.text+0x94c):../AVT987.c:352: undefined reference to `key_r' AVT987.o(.text+0x996):../AVT987.c:355: undefined reference to `Tim' AVT987.o(.text+0x9a6):../AVT987.c:359: undefined reference to `key_p' AVT987.o(.text+0x9ae):../AVT987.c:359: undefined reference to `ExitTim' AVT987.o(.text+0x9b2):../AVT987.c:359: undefined reference to `ExitTim' AVT987.o(.text+0x9be):../AVT987.c:363: undefined reference to `key_p' AVT987.o(.text+0x9c8):../AVT987.c:365: undefined reference to `KeyZTim' AVT987.o(.text+0x9cc):../AVT987.c:367: undefined reference to `key_p' AVT987.o(.text+0x9d8):../AVT987.c:370: undefined reference to `ExitTim' AVT987.o(.text+0x9dc):../AVT987.c:370: undefined reference to `ExitTim' AVT987.o(.text+0x9e0):../AVT987.c:372: undefined reference to `key_p' AVT987.o(.text+0x9e8):../AVT987.c:377: undefined reference to `key_p' AVT987.o(.text+0xa00):../AVT987.c:382: undefined reference to `KeyZTim' AVT987.o(.text+0xa04):../AVT987.c:384: undefined reference to `key_p' AVT987.o(.text+0xa10):../AVT987.c:388: undefined reference to `Tim' AVT987.o(.text+0xa34):../AVT987.c:394: undefined reference to `Tim' AVT987.o(.text+0xa6e): In function `Restore': ../AVT987.c:405: undefined reference to `key_p' AVT987.o(.text+0xa80):../AVT987.c:412: undefined reference to `WriteLcd' AVT987.o(.text+0xa86):../AVT987.c:413: undefined reference to `PutsLcd_P' AVT987.o(.text+0xa8c):../AVT987.c:414: undefined reference to `WriteLcd' AVT987.o(.text+0xa92):../AVT987.c:415: undefined reference to `PutsLcd_P' AVT987.o(.text+0xa98):../AVT987.c:416: undefined reference to `DispTim' AVT987.o(.text+0xa9c):../AVT987.c:417: undefined reference to `DispTim' AVT987.o(.text+0xd48): In function `SelfTunning': ../AVT987.c:457: undefined reference to `TimPid' AVT987.o(.text+0xd4c):../AVT987.c:457: undefined reference to `TimPid' AVT987.o(.text+0xd50):../AVT987.c:457: undefined reference to `TimPid' AVT987.o(.text+0xd54):../AVT987.c:457: undefined reference to `TimPid' AVT987.o(.text+0xd5c):../AVT987.c:459: undefined reference to `pwm_p' T987.o(.text+0xde2):../AVT987.c:467: undefined reference to `TimPid' AVT987.o(.text+0xde6):../AVT987.c:467: undefined reference to `TimPid' AVT987.o(.text+0xdea):../AVT987.c:467: undefined reference to `TimPid' AVT987.o(.text+0xdee):../AVT987.c:467: undefined reference to `TimPid' AVT987.o(.text+0xe84):../AVT987.c:475: undefined reference to `TimPid' AVT987.o(.text+0xe88):../AVT987.c:475: more undefined references to `TimPid' follow AVT987.o(.text+0xff4): In function `SelfTunning': ../AVT987.c:489: undefined reference to `pwm_p' AVT987.o(.text+0xff8):../AVT987.c:490: undefined reference to `TimPid' AVT987.o(.text+0xffc):../AVT987.c:490: undefined reference to `TimPid' AVT987.o(.text+0x1000):../AVT987.c:490: undefined reference to `TimPid' AVT987.o(.text+0x1004):../AVT987.c:490: undefined reference to `TimPid' AVT987.o(.text+0x1012):../AVT987.c:494: undefined reference to `pwm_p' AVT987.o(.text+0x11c4):../AVT987.c:502: undefined reference to `TimPid' AVT987.o(.text+0x11c8):../AVT987.c:502: undefined reference to `TimPid' AVT987.o(.text+0x11cc):../AVT987.c:502: undefined reference to `TimPid' AVT987.o(.text+0x11d0):../AVT987.c:502: undefined reference to `TimPid' AVT987.o(.text+0x11da):../AVT987.c:506: undefined reference to `TimPid' AVT987.o(.text+0x11de):../AVT987.c:506: more undefined references to `TimPid' follow AVT987.o(.text+0x1472): In function `RegThread': ../AVT987.c:551: undefined reference to `pwm_p' AVT987.o(.text+0x1490):../AVT987.c:557: undefined reference to `TimPid' AVT987.o(.text+0x1494):../AVT987.c:557: undefined reference to `TimPid' AVT987.o(.text+0x1498):../AVT987.c:557: undefined reference to `TimPid' AVT987.o(.text+0x149c):../AVT987.c:557: undefined reference to `TimPid' AVT987.o(.text+0x14e4):../AVT987.c:561: undefined reference to `TimPid' AVT987.o(.text+0x14e8):../AVT987.c:561: more undefined references to `TimPid' follow AVT987.o(.text+0x1586): In function `RegThread': ../AVT987.c:565: undefined reference to `pwm_p' AVT987.o(.text+0x15c6): In function `main': ../AVT987.c:581: undefined reference to `InitHw' AVT987.o(.text+0x15ca):../AVT987.c:585: undefined reference to `InitLcd' AVT987.o(.text+0x15d6):../AVT987.c:595: undefined reference to `key_p' make: *** [AVT987.elf] Error 1 Build failed with 139 errors and 1 warnings...
Po zmianie na tą drugą wersję mam efekt identyczny - też 139 błędów.

Edit:

Kod: Zaznacz cały

[/color]
Ostatnio zmieniony 13 mar 2009, o 23:32 przez _ImPuLs_, łącznie zmieniany 2 razy.

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 13 mar 2009, o 22:14

Witam
Sciągnąłem plik z programem do którego link załączyłeś.
Skompilowałem z AVR Studio z użycie WinAVR edycja 2008-06-10
Po pierwszej kompilacji miałem 4 warningi, ale program się skompilował.
Po poprawkach kompiluje się bez błędów i warningów.
Poprawione pliki załączam zarchiwizowane.
Spróbuj czy się skompilują.
Kompilowałem dla ATMega32, ale to nie powinno mieć większego znaczenia.

Marek
Załączniki
lutownica.zip
(7.97 KiB) Pobrany 386 razy

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 13 mar 2009, o 23:40

Kompilowałem dla ATMega32, ale to nie powinno mieć większego znaczenia.
Chyba jednak ma, i to duże. Zauważ że sama kompilacja zgłasza tylko 1 warning, ten co poprzednio ("/AVT987.c:111: warning: array subscript has type `char' "). Reszta to błędy linkera, który stwierdza co następuje:

Kod: Zaznacz cały

region text is full (AVT987.elf section .text)
A później 139 (czy ile tam razy), że nie znana funkcja, czy obiekt... bo się już po prostu nie zmieściły.

_ImPuLs_
-
-
Posty: 17
Rejestracja: 30 lis 2003, o 21:58
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: _ImPuLs_ » 14 mar 2009, o 12:51

marek1 - to co podesłałeś jak kompiluję w AVRStudio dla procesora ATMega8 to mam taki efekt:

Kod: Zaznacz cały

rm -rf lutownica.o lutownica.elf dep/ lutownica.hex lutownica.eep Build succeeded with 0 Warnings... avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -O0 -Wp,-M,-MP,-MT,lutownica.o,-MF,dep/lutownica.o.d -c ../lutownica.c avr-gcc -mmcu=atmega8 lutownica.o -o lutownica.elf E:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../../../avr/lib/avr4/crtm8.o(.init9+0x0): undefined reference to `main' make: *** [lutownica.elf] Error 1 Build failed with 1 errors and 0 warnings...

Napisałem do autora źródeł. Podobno da się to tylko skompilować w GCC w trybie natywnym. W AVRStudio się nie da.

Teraz będę musiał zasięgnąć trochę wiedzy jak to zrobić i dlaczego jest właśnie takie uzależnienie.
Aczkolwiek jest to trochę dziwne że w jednym kompilatorze się da, a w innym już nie. Ale jeszcze za mało umiem żeby móc polemizować na ten temat ;-)


~~~~
... do moderatora który edytował mój poprzedni post -> mam wyłączone używanie BBCODE i nie mogę robić tak 'ładnie' jak inni - może ktoś by mi włączył taką możliwość - byłbym wdzięczny ;)
 
Edit: by moderator który nagminnie edytuje posty ;)
Jedyne co mogę Ci teraz poradzić, to ręczne włączanie BBCode przy każdym poście (odhaczasz "wyłącz BBCode w tym poście" - a może tego nie masz? Sprawdzałem na userze, który domyślnie ma włączone, wówczas jest taka możliwość), rzeczywiście w profilu nie widzę możliwości włączenia BBCode na stałe.
Pajączek

 
Ostatnio zmieniony 14 mar 2009, o 17:42 przez _ImPuLs_, łącznie zmieniany 1 raz.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 14 mar 2009, o 17:50

A wracając jeszcze do tematu, znów widać (choć tym razem już nie ld), że nie znajduje funkcji main. Kompilujesz rl1.c? Masz tam jakiś Makefile? Pokażesz?

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 14 mar 2009, o 20:13

Witam
U mnie ten program kompiluje się bez błędów i ostrzeżen, ma jednak aż ponad 11kB więc w ATMega8 się nie zmieści - nie wim czy może to być wina kompilowania pod AVR Studio i WinAVR.

Poniżej przesyłem raport z kompilacji

Kod: Zaznacz cały

Build started 14.3.2009 at 20:08:09 avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT rl1.o -MF dep/rl1.o.d -c ../rl1.c avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT hw.o -MF dep/hw.o.d -c ../hw.c avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT lcd.o -MF dep/lcd.o.d -c ../lcd.c avr-gcc.exe -mmcu=atmega16 -Wl,-Map=xxxxx.map rl1.o hw.o lcd.o -o xxxxx.elf avr-objcopy -O ihex -R .eeprom xxxxx.elf xxxxx.hex avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex xxxxx.elf xxxxx.eep || exit 0 avr-objdump -h -S xxxxx.elf > xxxxx.lss AVR Memory Usage ---------------- Device: atmega16 Program: 11366 bytes (69.4% Full) (.text + .data + .bootloader) Data: 351 bytes (34.3% Full) (.data + .bss + .noinit) EEPROM: 21 bytes (4.1% Full) (.eeprom) Build succeeded with 0 Warnings...
Jeśli ktoś wie jak go zmniejszyć aby się zmieścił w 8kB to też chętnie się dowiem

Pozdrawiam
Marek

_ImPuLs_
-
-
Posty: 17
Rejestracja: 30 lis 2003, o 21:58
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: _ImPuLs_ » 14 mar 2009, o 21:02

A więc tak, już wiem co jest grane i udało mi się to skompilować.
Niestety tak jak autor źródeł informował mnie zrobiłem to bezpośrednio w GCC poprzez 'make all'.
Dodanie do projektu pliku 'Makefile' niewiele wniosło do efektu kompilacji pomimo tego że jest tam wpis " CSTANDARD = -std=gnu99 " który musi być przy kompilacji bezpośrednio w GCC.

Plik wynikowy to 7810 Bajtów.



~~~~
... do moderatora -> nie mam opcji włączenia BBCODE. W opcjach mam tylko:
HTML: NIE
BBCode: NIE
Uśmieszki: TAK

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 15 mar 2009, o 00:13

Opisz może trochę dokładniej - jakiego pliku makefile użyłeś aby zadziałało.
Jeżeli używam pliku makefile ze sciągniętego archiwum to po kompilacji mam dalej ponad 11kB.

Marek

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 15 mar 2009, o 03:57

Pisząc o Makefile miałem na myśli byś nam go pokazał ;) bo widać było jakiś problem ze znalezieniem main().

Pytanie za 100pkt, czy kompilując teraz pod gcc stosowałeś optymalizację?? Bo w pierwszych Twoich logach ewidentnie widać, że linkerowi zabrakło miejsca, o czym zresztą już pisałem 2 dni temu.

Co do BBCode, jak się wyjaśni sprawa, to wrócimy do tematu, a włączenie BBCode jest obok tego co zacytowałeś (takie checkboxy). Sprawdzałem zwykły użytkownik mający domyślnie włączone, może sobie w pojedynczym poście wyłączyć. Być może u Ciebie faktycznie problem w tym, że masz domyślnie wyłączone.

Dodano (po wyjaśnieniu sprawy):

Zajrzyj do profilu, i włącz sobie BBCode, teraz już powinieneś mieć taką możliwość. Jak zadziała, podziękuj ładnie Endowi.

_ImPuLs_
-
-
Posty: 17
Rejestracja: 30 lis 2003, o 21:58
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: _ImPuLs_ » 15 mar 2009, o 22:37

Przy kompilacji po raz pierwszy w AVRStudio lub w AVRSide nie korzystałem z żadnego makefile.
Przy kompilacji ręcznej w GCC wykorzystałem załączony przez autora do projektu plik makefile.

Jak do projektu w AVRSide dołączę plik makefile dołączony przez autora to też niewiele się zmienia. Efekt kompilacji wygląda tak (u mnie):

Kod: Zaznacz cały

Build started 15.3.2009 at 22:32:35 avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -O0 -Wp,-M,-MP,-MT,AVT987.o,-MF,dep/AVT987.o.d -c -std=gnu99 ../AVT987.c ../AVT987.c: In function `GetTemp': ../AVT987.c:109: warning: array subscript has type `char' avr-gcc -mmcu=atmega8 AVT987.o -o AVT987.elf E:\WinAVR\bin\..\lib\gcc\avr\3.4.3\..\..\..\..\avr\bin\ld.exe: region text is full (AVT987.elf section .text) AVT987.o(.text+0x2a0): In function `Intro': ../AVT987.c:121: undefined reference to `WriteLcd' AVT987.o(.text+0x2a6):../AVT987.c:122: undefined reference to `PutsLcd_P' AVT987.o(.text+0x2ac):../AVT987.c:123: undefined reference to `WriteLcd' AVT987.o(.text+0x2b2):../AVT987.c:124: undefined reference to `PutsLcd_P' .... - ciach, ciach, ciach - .... AVT987.o(.text+0x14e8):../AVT987.c:559: more undefined references to `TimPid' follow AVT987.o(.text+0x1586): In function `RegThread': ../AVT987.c:563: undefined reference to `pwm_p' AVT987.o(.text+0x15c6): In function `main': ../AVT987.c:579: undefined reference to `InitHw' AVT987.o(.text+0x15ca):../AVT987.c:583: undefined reference to `InitLcd' AVT987.o(.text+0x15d6):../AVT987.c:593: undefined reference to `key_p' make: *** [AVT987.elf] Error 1 Build failed with 139 errors and 1 warnings...
... skróciłem bo jest tego duuuużo (podobnie jak we wcześniejszym poście).

Z opcji można wywnioskować że kompilator z AVRStudio bierze pod uwagę ustawienia z makefile ale rezultatu to żadnego nie daje. Zapewne jest jednak różnica pomiędzy sposobem kompilacji w GCC i w AVRStudio (a wydawało mi się że AVRStudio korzysta z pakietu GCC).


Dziękuję za rozwiązanie problemu dotyczącego BBCODE. Teraz wszystko jest OK.

 

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 16 mar 2009, o 08:49

A mógłbyś napisać przy jakich ustawieniach i w jakim programie udało Ci się osiągnąć te 7810 bajtów.
W moim przypadku jak kompiluję pod AVR Studio + najnowszy WinAVR to mam ponad 11kB a jak kompiluję z linii komend w tym samym WinAVR ale bez AVR Studio, używając makefile dostarczony razem z projektem, to wychodzi około 8600 bajtów.
Jako że AVR Studio wywołuje również WinAVR to muszą być możeliwe takie ustawienia że osiągnie się ten sam rezultat.

Marek

_ImPuLs_
-
-
Posty: 17
Rejestracja: 30 lis 2003, o 21:58
Lokalizacja: Krasnystaw
Kontaktowanie:

Postautor: _ImPuLs_ » 18 mar 2009, o 08:07

Używałem GCC wywołując go z linii poleceń poprzez 'make all'.
Plik 'Makefile' wykorzystałem dołączony do projektu przez autora.
GCC w wersji 'gcc-3.4.3-2.15-1.2.3'.

Szczegółowy wynik kompilacji poniżej:

Kod: Zaznacz cały

-------- begin -------- avr-gcc (GCC) 3.4.3 Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiling: lcd.c avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-bitfields -fpack-struct -Wall -Wstrict-prototypes -Wa,-adhlns=lcd.lst -std=gnu99 -MD -MP -MF .dep/lcd.o.d lcd.c -o lcd.o Compiling: rl1.c avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-bitfields -fpack-struct -Wall -Wstrict-prototypes -Wa,-adhlns=rl1.lst -std=gnu99 -MD -MP -MF .dep/rl1.o.d rl1.c -o rl1.o Compiling: hw.c avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-bitfields -fpack-struct -Wall -Wstrict-prototypes -Wa,-adhlns=hw.lst -std=gnu99 -MD -MP -MF .dep/hw.o.d hw.c -o hw.o Linking: rl1.elf avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-bitfields -fpack-struct -Wall -Wstrict-prototypes -Wa,-adhlns=lcd.o -std=gnu99 -MD -MP -MF .dep/rl1.elf.d lcd.o rl1.o hw.o --output rl1.elf -Wl,-Map=rl1.map,--cref -lm Creating load file for Flash: rl1.hex avr-objcopy -O binary -R .eeprom rl1.elf rl1.hex Creating load file for EEPROM: rl1.eep avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 -O binary rl1.elf rl1.eep Creating Extended Listing: rl1.lss avr-objdump -h -S rl1.elf > rl1.lss Creating Symbol Table: rl1.sym avr-nm -n rl1.elf > rl1.sym Size after: rl1.elf : section size addr .text 7810 0 .data 0 8388704 .bss 87 8388704 .noinit 0 8388791 .eeprom 21 8454144 .debug_aranges 60 0 .debug_pubnames 614 0 .debug_info 3146 0 .debug_abbrev 975 0 .debug_line 3156 0 .debug_str 746 0 .debug_ranges 12 7810 Total 16627 AVR Memory Usage: ----------------- Device: atmega8 Program: 7810 bytes (95.3% Full) (.text + .data + .bootloader) Data: 87 bytes (8.5% Full) (.data + .bss + .noinit) -------- end --------

Wróć do „Kity AVT”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 52 gości