Stary kompilator, nowy sposób podawania argumentów. W GCC, od wersji chyba 4.8, można właczyć optymalizację "przyjazną" dla debugingu (czyli "-Og"). W starszych wersjach GCC optymalizacja (parametr -O) przyjmuje wartości od 0 do 3 i dodatkowo s jak size . Makefile ręcznie pisany, czy generowany automatycznie?
Po zainstalowaniu ubuntu i skonfigurowaniu eclipse+codesourcery pod niego okazało się że mój archaiczny makefile nie "zbuilduje" mi projektu. Po zainstalowaniu plugina ARM do eclipse okazało się że wygenerowany kod nie mieści się w pamięci. ... Nie mam pojęcia skąd ta róźnica. Kompilator to Codesourcery z 2010, optymalizacja w obu przypadkach na O1...
$katalog_WinAVR$/doc/avr-libc/avr-libc-u... Tworzysz osobny plik w asemblerze (.S, nie .s) zawierający procedurę obsługi przerwania, kompilujesz do pliku .o i linkujesz z pozostałymi plikami. W dołączanym wo WinAVR szablonie Makefile jest przewidziane miejsce na wypisanie źródeł w asemblerze (ASRC = $tu wpisz nazwy plików$). Przykład,...
No dobra, udalo ci sie polechtac moja proznosc wiec moze zrobimy tak. Opisze tutaj przykladowego mekafile-a z nastawieniem na WinAVR, Atmega8 i STK200 tak aby inni tez cos z tego mieli. W zasadzie wszystko jest opisane w angielszczyznie no ale jakby kto nie umial to daje po polsku. # Hey Emacs, this is a -*- makefile -*- #---------------------------------------...
http://obrazki.elektroda.pl/3025550100_1... Mając do dyspozycji jedną matrycę 8x8 czerwonych diod LED o boku 60,2mm oraz mikrokontroler ATtiny861 pozostałe po innych projektach postanowiłem zbudować to, co każdy elektronik chociaż raz w życiu zbudować musi: zegar ;). Ze względu na charakter wyświetlacza miał to być zegar binarny, ale...
http://obrazki.elektroda.pl/7326333400_1... Autor zajął się tym projektem przy okazji zabawy komputerem Apple II. Celem tego odtwarzacza jest osiągnięcie takich samych efektów dźwiękowych jakie osiąga się w Apple II. W tym celu wykorzystany został oryginalny układ scalony z serii AY-3-8910/1/2. Układ ten może generować trzy kanały przebiegów...
Dzięki, znalazłem już i przetestowałem, choć trochę napsuł mi ten nowy atmelowski avrgcc nerwów głównie przez to, że makefile mi nie działał co używałem z winavr :/ (brakowało sh.exe (który przekopiowałem z winavr) i avr-size który nie działa wywoływany z makefile - a ręcznie tak :/ ). Co do optymalizacji kodu, po tym jak wyciąłem niepotrzebne funkcje...
Pozwoliłem sobie odpowiedzieć nowym postem dlatego,że częściowo problem rozwiązałem. Mianowice kolega michalko12 skompilował moje pliki, ale w makefile zmienił optymalizację z 0 na s i dlatego powstały hex działa. Sprawdziłem i okazuje się że optymalizacja ustawiona na 0 i 1 kompiluje niedziałającego hex'a natomiast 2, 3 i s kompiluje hex'a który działa....
Wychodzi na to, że muszę za rączkę :( . Próbowałem ręcznie w makefile dodawać linker flags ale on sobie za każdym razem zmienia makefile według tego co ma w konfiguracji. Jak to przeskoczyć? Wychodzi na to że pierwszy raz stało się to potrzebne...
Tak, w pliku Makefile ustawiam częstotliwość, dodam że używam środowiska WinAVR i optymalizacja kodu ustawiona jest na Os.
A procek wogółe rusza?? Zmien program tak, żeby na stałe zapalić diodę. Może wina twki po stronie makefile bo IAR chyba sam tworzy makefile. Moze włączona jest jakas optymalizacja która usuwa puste pętle. Jesli miganie diodą zrealizowane jest na pętlach opozniajacych może być to powodem. Czy otrzymujesz jakieś ostrzeżenia po kompilacji ??
są różnice cały czas, np. bez optymalizacji z AVR studio 14kB, z GCC 11kB. Ale zrobiłem coś innego - w opcjach projektu AVR Studio wyłączyłem wszystkie ustawienia przez funkcję 'użyj zewnętrznego pliku Makefile' i wskazałem plik makefile z GCC - teraz jest identycznie to samo. Skąd tak wielkie różnice ustawień AVR Studio i Makefile z GCC? Przy niby...
Optymalizacja w makefile(optimization level) jest ustawiona na s, do wyboru są 0, 1, s, 2 i 3. Format wyjściowy: ihex. W makefile mam taktowanie ustawione na 8000000(F_CPU=8000000). Mikrokontroler działa na wewnętrznym kwarcu 1Mhz, uznałem, że będzie wystarczający :) Dziękuję za tyle odpowiedzi, u Was ten problem też występuje? Po zmienieniu końcówki...
Dla takich osób, które chcą pooglądać jednak taki, który jest NIEpoprawny, choć w wyjątkowo subtelny sposób: https://gcc.gnu.org/bugzilla/show bug.cgi?id=83703 https://stackoverflow.com/ques...dd-floa... + https://gcc.gnu.org/bugzilla/show bug.cgi?id=79436 Nie wiem co ten kod ma wspólnego z naszymi optymalizacyjnymi dywagacjami:...
Jeśli chodzi o samo Arduino to ja bardziej bym się cieszył jak popularniejsze stanie się właśnie z jakimiś procesorami ARM gdzie taka warstwa abstrakcji dla ludzi nieobytych ma jakiś sens i można sobie na nią pozwolić Dla "nie programistów" dobre rozwiązanie, nie musi wiedzieć jak konfigurować timer, użyje bibliotek, Odczyt pliku BMP z karty SD i wyświetlenie...
Witam. Z dniem dzisiejszym przesiadłem się na eclipsa. Programuję (a raczej staram się :D) pod linuxem. Nie mogę dojść, dlaczego kod z eclipsa zajmuje 2 razy tyle miejsca, co kod skompilowany za pomocą makefile wygenerowanego przez winavr (jeszcze pod windowsem, działa też na linuxie). Oczywiście optymalizacja i tu i tu jest ustawiona na rozmiar (-Os)....
W wersji WinAvr 20070525 wystarczy odpalić programik "MFile" Przechodzisz do menu Makefile -> Optimization Level -> 0 I optymalizacja wyłączona. Jeśli chcesz zrobić to ręcznie odszukaj fragment kodu: # Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization...
Witam Temat dotyczy optymalizacji kompilatora gcc dla uC AVR, dodam jeszcze że nie mam wielkiego doświadczenia w programowaniu w tym środowisku. A więc problem jest taki - przykładowy program poniżej: #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> int main(void) { DDRB = 0xff; PORTB = 0X00; uint8_t x=1; while(1) { PORTB...
Sorki że dopiero teraz odpisuje, ale ostatnio bardzo mało czasu mam na przesiadywanie przed komputerem. Optymalizacja w Makefile jest na -O0, więc nie jest to ten problem. Wydaje mi się, że program nie może wyjść z realizacji funkcji pierwszego delaya. Zapala diodę, a potem tkwi w pętli. Poniżej prezentuje funkcje, które wywoływane są w sposób pokazany...
ad2. To znaczy gdy tworzy swój plik makefile to tak właśnie pomija gdy korzystam z tych "dobry" podmienianych projektów to nie pomija. Prawdopodobnie w jednym z makefil'ów jest włączona optymalizacja Zwróć uwagę na takie słowa kluczowe w pliku jak: -Os ; -O0; O1; O2; oznaczają one stopień optymalizacji kodu ad3. Sporo osób (ja również) używają środowiska...
W tym momencie to tej zmiennej po prostu w ogóle nie ma [; W pliku map (i w pliku .lss pośrednio) można zobaczyć, że w programie jest zerowy rozmiar sekcji .data i .bss. Linker wyrzucił ją, bo nie jest nigdzie używana (jak zapewne cały kod z widget.c). W Makefile domyślnie włączona jest optymalizacja 0, ale też jest włączone usuwanie nieużywanych zmiennych...
Wszystko fajnie, pod warunkiem, że chce się używać STM32. Dodanie podstawowego wsparcia dla innych układów jest porównywalne z postawieniem projektu na FreeRTOSie - ot po prostu musisz mieć tablicę wektorów i skonfigurowane rozmiary/adresy pamięci i dokładny typ układu. We FreeRTOSie przecież wsparcie dla STM32 czy dla LPC tak samo nie istnieje - tablicę...
Czyżby? Czy dla AVR ktokolwiek przejmuje się skryptami linkera, startupem, tablicą wektorów i Makefilem? Przecież dla tej platformy jest DOKŁADNIE TAK SAMO jak dla ARM, a jakoś nikomu nawet na myśl nie przyjdzie zajmować się tymi plikami - każdy korzysta z gotowców zawartych w pakiecie avr-gcc. Te pliki tam fizycznie są, nikt nie zajmuje się tym jak...
Używam poniższego kodu do inicjalizacji połączenia z komputerem samochodu (według protokołu kw2000). Używam tam komunikacji USART 10400baud 8n1. Chciałem zwiększyć taktowanie do 8MHz i usunąłem programowo dzielnik fusebita CLKDIV8 zmieniając na początku funkcji main() rejestr CLKPR w ten sposób: CLKPR|= _BV(CLKPCE); CLKPR&=~ _BV(CLKPS1); CLKPR&=~...
Żeby pisać na mikrokontrolery w C++ trzeba znać ten język bardzo dobrze. Niestety mikrokontroler to nie PC i nie "wybacza" nieprzemyślanych konstrukcji, które kończą się alokacją ogromnych ilości pamięci. Tak konkretniej to chodzi mi o nieprzemyślane używanie klas. C na mikrokontrolery jest znacznie łatwiejszy. A mógłby ktoś napisać w C++ i w C program...
Nie za bardzo mi sie chce anlizowac te dwa listingi, ale mozesz sprobowac zaldowac to do avrstudio i debugowac. Po drugie , wylacz optymalizacje kodu w makefile.
Masz racje przeoczylem tego posta. 1. Napiszcie mi prosze jeszcze czy jak dolaczam jakas biblioteke w ktorej powiedzmy jest 10 funkcji a ja kożystam tylko z jednej to kompilator/linker dolaczy do kodu wynikowego tylko ta jedna czy wszystkie. 2. Do czego służy w makefile optymalizacja. Zauważyłem tylko, że gdy chcę debugować to muszę wybrać 0. Ale kod...
Eclipse to IDE a nie kompilator. Jeżeli korzystasz z makefile to właśnie tam. Jeżeli masz plugina GNU ARM Eclipse to we właściwościach projektu (Properties -> C/C++ Build->Settings)
Za generację pliku .lss odpowiada program 'objdump' - niestety nie korzystam z TrueStudio, tylko bezposrednio z makefile'a + kompilator, więc konkretnej opcji nie wskażę. O ile oczywiscie TueStudio korzysta z gcc :-) Co do dzialania wyswietlacza lub nie - czesto tak jest , że dane urzadzenie ma parametry lepsze niz te graniczne deklarowane przez producenta...
Aby te funkcje działały poprawnie należy włączyć optymalizacje kodu. Rozumiem, że optymalizację kodu włącza się w pliku makefile. Mam ustawiony poziom optymalizacji na s. Mam do wyboru 0 - 3. Który najlepiej wybrać?
jak zmienisz _delay_ms((PIND & _BV(0))? 1000: 200); na _delay_ms(200); to zobaczysz, że tyle nie zajmuje. Dlaczego ? Pytanie konkursowe o złote gacie dla Ciebie :) i jeszcze spróbuj włączyć optymalizację w jakichś opcjach projektu (nie użuwam avr studio więc dokładnie nie powiem), bo o makefile'u pewnie nie słyszałeś...
Hiob napisał I TU POJAWIA się PROBLEM PONIEWAZ DO PAMIECI MIKROKONTROLERA POWINNA ZALADOWAC się TYLKO PROCEDURA A - RESZTA JEST PRZECIEZ ZBEDNA - A MIEJSCE W PAMIECI ZAJMOWANE PRZEZ PROGRAM POWINNO się ZMNIEJSZYC - W RZECZYWISTOSCI ZAMUJE TYLE SAMO MIEJSCA CO PROGRAM1 Tez mam ten sam problem, nie wiem jak w winavr wlaczyc optymalizacje kodu? czy ktos...
Witam. Zaniepokoila mnie pewna rzecz, nie wiem czy ja popelniam blad czy blad lezy po stronie nakladki dla WinAvr - AvrSide.. ale do rzeczy Do tej pory korzystalem z WinAVR+AvrSide, a ostatnio jako IDE wykorzystuje Crimson Editor (polecam!!!) (plus WinAVR oczywiscie). Jak wiadomo AvrSide automatycznie generuje makefile, mam ustawiony poziom optymalizacji...
Ustaw optymalizację na -O0 (w makefile OPT=0), czyli wyłącz :wink: Piotrek
Dziękuję bardzo za radę od szanownego forumowicza "gmp" Jak ustawię w pliku Makefile stopień optymalizacji na "0" to program działa prawidłowo, zajmuje około 4 % pamięci w atmega, jednak jak w tej pustej pętli wpisze sie np: k=5(program zajmuje około 3%), wykonuje się ona troszkę krócej, ale też działa Wielkie dzięki za pomoc i serdeczne pozdrowienia...
Kompilator kompiluje bez optymalizacji. Oto fragment makefile: # Define optimisation level here OPT = -O0
jak kompiluje w avrstudio, to działa dobrze :) Ale już kompilacja przez to samo avr-g++ z którego korzysta avrstudio nie działa, więc problem jest chyba tak jak pisaliście w optymalizacji (Makefile). Zamieniłem z -Os na -O2 ale bez zmian. Później będe jeszcze to męczyć i pewnie napisze jeśli to nie to co myśle. W każdym razie dzięki za pomoc!
Czy ktoś wie dlaczego sprintf_P resetuje program? [syntax=c]sprintf_P(bufor, PSTR("%d"), liczba);[/syntax] Nie mogę znaleźć powodu... (W makefile odhaczone wszystkie opcje printf, brak optymalizacji, sprintf() działa normalnie).
Moj program po skompilowaniu daje plik wynikowy hexa o rozmiarze 186kB, ale sprawdzalem sobie przy pomocy PonyProga ile to bedzie bajtow w pamięci kontrolera i jest to 67.9363kB. Pisze w WinAVR, po wykorzystaniu optymalizacji kodu ustawianej w pliku MakeFile przy pomocy komendy OPT z najwyzszym stopniem optymalizacji 3 program nie zmniejsza sie znaczaco...
jaki procesor i jakaa optymalizacja to wszystko zawiera sie w pliku makefile, zobacz ten plik w przykladzie podanym w katalogu example Kompilujemy program naciskajac na "Make All" w menu Tools w ProgrammersNotepad.
1.Czy da się kompilować programy w trybie "Release" czyli bez informacji o debugowaniu, aby działały jak najszybciej i zajmowały mniej miejsca w pamięci. Taka opcja jest dostępna np. w Rowley Crossworks. Informacje o debuggowaniu niczego nie zmieniają. Można sobie ręcznie zmienić w Makefile opcje optymalizacji. Przykładowe projekty mają optymalizację...
Skoro zmieniłeś bibliotekę od lcd to oczywiście, że mógł się "rozrosnąć". Na początek usuń nieużywane funkcje z biblioteki o ile takie są. jeżeli to nie pomoże pozostaje Ci znalezienie biblioteki o mniejszy zapotrzebowaniu na pamięć lub optymalizacja tej którą użyłeś.Podczas kompilacji powinieneś też otrzymywać informację na temat zajmowania pamięci...
Zmień opcję optymalizacji kodu z -O0 na -Os w makefile i spróbuj ponownie. I jeżeli się skompiluje, to pokaż tą mapę (.map), bo coś tego kodu jest za dużo.
hm taie wielkośći otrzymuje po kompilacji w AVRGCC. Co do stosu nie wiem jak to sprawdzić :( a może co jakiś czas czyścic stos stos aby mieć miejsce Dodano po 3 ...teraz juz nic nie kumam w makefile zmieniłem parametr optymalizacji kompilatora z -O3 na -O1 plik jest mniejszy o połowe i teraz mogę wywoływać proceduryobsługi LCD ktore wcześniej powodowały...
Ale taki dobry to ja jeszcze nie jestem. Nauczyłem się jako/tako pisać w C, natomiast do końca nie rozumiem tych definicji, deklaracji itd... Ponieważ program jest dość skomplikowany i zawiera sporo plików dodatkowych typu .c i .h więc miałem spore problemy żeby to wszystko się zobaczyło i skompilowało. Pewnie mam tam sporo błędów, przynajmniej w sensie...
Plik Makefile zawiera tylko opcje, które zostały użyte podczas kompilacji źródeł programu. Jego modyfikacja nie wpływa na wsady pamięci FLASH i EEPROM. Wpływa. Zmiana optymalizacji wygeneruje różny kod, a wyłączenie optymalizacji (opcja O0) może spowodować, że program przestanie działać.
Witam! Przede wszystkim w obu plikach zauważyłem różne poziomy optymalizacji kodu, w pliku z 'sample' jest to 's' (optymalizacja pod kątem rozmiaru kodu), a w pliku z 'examples' jest '02' (optymalizacja bardziej pod kątem szybkości kodu) i stąd mogła się wziąść róznica prędkości wykonywania kodu. W nowych projektach stosowałbym wersję z katalogu 'sample'.
Witam. Mam następujący problem. Po kompilacji poniższego kodu za pomocą Eclipse z CodeSourcery otrzymuję częstotliwość Timera wynoszącą 18kHz, natomiast za pomocą programu Keil 53kHz. Wartości te zostały sprawdzone za pomocą oscyloskopu oraz analizatora stanów logicznych, dlatego w tym punkcie wykluczam błąd. Linker, startup i Makefile jest od Freediego....
ja akurat nie używam plugina, tylko ręcznie piszę sobie Makefile'a. Generalnie wiele więcej roboty z tym mieć nie będziesz, zresztą popatrz na mój szablon. Tam de facto zmienia się tylko opcje optymalizacji i nazwę projektu. pzdr.
No więc wielkie dzięki dla Freddie Chopin przede wszystkim za cierpliwość. Zastosowałem twój startup i skrypt z tym że nie dodałem skryptu w opcjach i stąd te błędy. Teraz już jest bezbłędnie. Co do optymalizacji to znalazłem odpowiednie flagi w twoim makefile: -ffunction-sections -fdata-sections - dla kompilatora -Wl,--gc-sections - dla linkera i oczywiście...
winavr makefile makefile avrstudio makefile makefile cmsis
przetwornice impulsowe topologie samsung blade wydruki enkoder pomiar
telewizor selecline cyfral cosmo
Parkside Solar PTUS 1 B1 – jak prawidłowo włożyć akumulatory AA NiMH 1,2V 600mAh EUP3490 – zamienniki: MP1584EN, SY8113B, RT8293A, porównanie parametrów