Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[AVR][C] Eclipse CDT próba kompilacji programu

oskar777 28 Sty 2012 16:45 2546 15
  • #1 28 Sty 2012 16:45
    oskar777

    Poziom 25  

    Witam Was.
    Od samego początku jak uczę się C i programuję używałem edytora programmers notepad z pakietu winavr. Ostatnio wpadłem na pomysł uruchomienia lepszego edytora czyli eclipse niestety napotkałem problemy.
    Programatora używam tego
    http://shop.tuxgraphics.org/electronic/detail_avrusb500.html

    Błąd jaki mi się pojawia to

    Kod: c
    Zaloguj się, aby zobaczyć kod

    jest to plik od petitfata
    diskio.h
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i diskio.c
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Problem polega na tym, że pod programmers notepad wszystko się kompiluje a program względnie działa.

    Co może być problemem że eclipse nie chce tego poprawnie skompilować?

    Pozdrawiam serdecznie
    Oskar

    0 15
  • #2 28 Sty 2012 17:15
    victoriii
    Poziom 16  

    Jest różnica między funkcją disk_writep, a prototypem:

    Code:
    DRESULT disk_writep (const BYTE*, DWORD); 


    *.c:

    Code:
    DRESULT disk_writep (BYTE* buff, DWORD sc) 


    W pierwszym powinno być jeszcze coś za DWORD a także jedno i drugie powinno być takie samo. Sprawdź jak jest u źródła.

    0
  • #3 28 Sty 2012 17:34
    oskar777

    Poziom 25  

    Poprawiłem i pomogło ale teraz mam

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Coś w tym eclipse trzeba ustawić bo jak nie ten plik to znowu kolejny się pojawia że coś mu nie pasuje już tak kilka plików przerabiałem na tę modłę.

    Tak jak wspomniałem jak kompilowałem w programmers notepad nie było tego w ogóle.

    Np w tym pliku nie pasuje mu linia np

    Kod: c
    Zaloguj się, aby zobaczyć kod


    I jakoś wcześniej nie było problemów o co mu może chodzić??

    0
  • #4 28 Sty 2012 17:45
    victoriii
    Poziom 16  

    Co do błędu z PORTE, to sprawdź czy w Eclipse jest wybrany procek taki na który to jest napisane, bo ten błąd sugeruje, że w procku na który obecnie idzie kompilacja nie ma takiego portu. STA_PROTECT: czy są włączone odpowiednie pliki nagłówkowe, być może trzeba też dodać w ustawieniach projektu jakiś katalog. Conflicting types to tak jak wcześniej. Używasz tego pluginu do Eclipse do AVR? Zauważ, że PORTE nie występuje w mega32 na który obecnie idzie kompilacja.

    0
  • #5 28 Sty 2012 18:16
    oskar777

    Poziom 25  

    z tym PORTE masz racje, w katalogu jest mmcbb.c ale nie bierze on udziału w kompilacji, tzn nie powinien. Tyle co wyczytałem na nieszczęście jest generowany makefile, a ja mam swój z odpowiednimi opcjami. Jak mu zdefiniować które pliki mają brać udział w kompilacji, bo tak teraz bierze pod uwagę wszystko co jest w katalogu głównym i podkatalogach. Generuje to listę bezsensownych błędów. Mój główny plik nazywa się termometr.c tam jest cały program.
    W makefile ten plik definiowałem, a jak jest tutaj. Skoro mój makefile olewa to kompiluje wszystko co popadnie i co mu się uda.
    Jak to działa?

    Czasem ściągam biblioteki do innych atmeg, które chce przerobić potem. Tak więc je ładuje do katalogu np pliki. Chodzi o to bym miał wszystko w jednym projekcie. Nie chciałbym by opcja bulid project brała taki katalog. I nie chciałbym takiego katalogu przenosić gdzie indziej bo to bez sensu. Czasem też robię szybką kopię pliku np termometr - Kopia.c też nie powinien tego brać pod uwagę a bierze.




    Pozdrawiam

    0
  • #6 28 Sty 2012 18:26
    victoriii
    Poziom 16  

    Na pliku który chcesz żeby nie był kompilowany dajesz prawy klik a potem szukaj opcji exclude from build, zaznaczasz debug i release i wtedy taki plik nie jest kompilowany, ikonka się też zmieni. Eclipse działa trochę inaczej niz PN ;).

    0
  • #7 28 Sty 2012 18:49
    oskar777

    Poziom 25  

    Wiem i to mnie martwi. bo takich plików mam z 50 w rożnych wersjach nawet nie pamiętam gdzie bo mam kilka katalogów z różnymi przykładami. Wie ktoś jak dodać opcje do tego automake ? i jak wskazać że termometr.c jest głównym plikiem do kompilacji?

    0
  • #8 28 Sty 2012 19:10
    McMonster
    Poziom 32  

    W Eclipse można wyłączyć generowanie makefile. Właściwości projektu > C/C++ Build > zakładka Builder Settings > Generate Makefiles automatically. Prawdopodobnie będziesz mu też musiał gdzieś wskazać swój makefile (albo po prostu umieścić w katalogu projektu), ja z tej możliwości nigdy nie korzystałem.

    Czy Eclipse jest lepszy to kwestia preferencji, więc jeśli PN miałeś dobrze skonfigurowanego, to możliwe, że Eclipse nic Ci nie da, ale to już musisz sam sobie rozstrzygnąć.

    0
  • Pomocny post
    #9 28 Sty 2012 19:29
    mirekk36
    Poziom 42  

    No właśnie - przewaga Eclipse i podobnych środowisk nad PN i ręcznym bawieniem się makefile jest dobrze tu widoczna. W projekcie powinien być porządek a nie 50 plików w różnych wersjach, a nawet jeśli to zawsze można dać te różne wersje do osobnego folderu projektu - i cały ten folder wyłączać metodą Exculde from build. Wtedy nie dość że nie ma kłopotu jak tu opisany to jeszcze robi się porządek w całej strukturze projektu. Nie wspomnę o przejrzystości widoku i struktury projektu dla oka wtedy. A jak się człowiek przyzwyczai do porządku to potem na myśl o uwstecznieniu się do PN aż ciarki po plecach przechodzą brrrr ;)

    0
  • #10 28 Sty 2012 20:22
    oskar777

    Poziom 25  

    Nie uważam, że programmers jest lepszy, chciałbym eclipse bo jest bardziej wygodny,... udalo mi się wyłączyć auto-makefile. Jeżeli do generowanego makefile da się dodawać opcje w stylu
    SRC = $(TARGET).c .....
    oraz
    ASRC =....
    i może
    OPT = ...
    to może być i automat.
    Poza tym jak nie miał mojego make file to chyba nie wiedział jaki jest główny plik projektu tak mi się wydaje bo wcześniej miał pretensje o braki plików nagłówkowych a teraz już nie ma jak załapał, że termometr.c jest tym głównym.

    Mam nadzieję, że jasno mówię :).

    jeszcze jedna rzecz.
    mam wycinek ustawień timera

    Kod: c
    Zaloguj się, aby zobaczyć kod

    i mam komunikaty typu
    WGM12 could not be resolved (w edytorze) o co może mu biegać ? mam kilka takich przypadków
    Zaznaczam, że program się skompilował poprawnie i działa.

    0
  • #11 28 Sty 2012 20:39
    mirekk36
    Poziom 42  

    Eclipse w bardzo jasny sposób rozpoznaje, który to główny plik projektu - tak jak to powinno być normalnie, czyli ten, który zawiera punkt wejścia jakim jest funkcja main(). A jeśli będzie kilka takich plików to nic nie skompiluje.

    Przy czym nie trzeba NIC a NIC dodawać w makefile ręcznie i to jest piękne, a pójdzie każda konfiguracja.

    Ten problem z WGM12 może wynikać być może z tego, że nie dołączyłeś potrzebnych podstawowych plików nagłówkowych albo właśnie masz włączoną ręczną kocią edycję makefila i coś tam namieszałeś.

    0
  • #12 28 Sty 2012 22:10
    McMonster
    Poziom 32  

    To może też być "czkawka" samego Eclipse. Czasami mimo poprawnego kodu i dołączonych nagłówków nie może znaleźć symboli, wtedy trzeba zrobić Clean i zbudować projekt (doprowadzić do jakiegokolwiek zbudowania bez błędów). Jak się nie zbuduje, to jednak coś zepsułeś.

    0
  • #13 29 Sty 2012 11:31
    oskar777

    Poziom 25  

    To wina eclipse albo ja tego nie mogę znaleźć. Mam zdefiniowane atmega32 ale średnio go to interesuje. Dopiero jak dałem #include <avr/iom32.h> to poznikało 3/4 ostrzeżeń.
    Myślę, że to błąd edytora, jak by naprawdę nie rozpoznawał tych definicji to by program się nie skompilował poprawnie.

    0
  • #14 29 Sty 2012 14:30
    mirekk36
    Poziom 42  

    Kolejna wypowiedź na elektrodzie tego typu. Panowie kiedy wy się nauczycie i to niezależnie czy o jakie środowisko programowania chodzi. To że wam coś nie działa tak jak chcecie - nie jest winą środowiska/edytora. Toż to działa milionom innych ludzi na świecie. Więc mam rozumieć - że jesteście pierwszymi, którzy znaleźli tak poważny błąd ?

    Dodano po 1 [minuty]:

    oskar777 napisał:
    To wina eclipse albo ja tego nie mogę znaleźć. .


    Dlatego zdecydowanie uważam, że to ta druga przyczyna którą wymieniłeś. I warto dojść jak to się robi poprawnie, bo znowu inkludowanie iom32.h wcale nie jest poprawnym rozwiązaniem. To jest tylko załatanie dziury i gdy tylko spróbujesz zrobić takie cyrki na innych prockach, które mają bardziej rozbudowane pliki nagłówkowe w AVR GCC to szybko się przejedziesz. Ale rozumiem, że wtedy to już uznasz, że Eclipse jest do niczego, i być może przejdziesz na AVRS5 jak np autor tego postu: Link

    0
  • #15 29 Sty 2012 19:20
    McMonster
    Poziom 32  

    Sprzątnij to, co masz, i rozpakuj jeszcze raz Eclipse do innego folderu oraz ustaw inny workspace. Potem zainstaluj wtyczkę do AVR i spróbuj od początku tworzyć projekty przenosząc tylko te pliki, których używasz. Mam wrażenie, że coś strasznie namieszałeś przy kombinowaniu z makefile i swoimi starymi projektami.

    0
  • #16 29 Sty 2012 20:34
    mirekk36
    Poziom 42  

    McMonster napisał:
    Sprzątnij to, co masz, i rozpakuj jeszcze raz Eclipse do innego folderu oraz ustaw inny workspace. Potem zainstaluj wtyczkę do AVR i spróbuj od początku tworzyć projekty przenosząc tylko te pliki, których używasz. Mam wrażenie, że coś strasznie namieszałeś przy kombinowaniu z makefile i swoimi starymi projektami.


    Jakoś mi się wydaje, że kolega ma tutaj 99,9999999% racji ;) .... więc polecam to samo.

    0
  Szukaj w 5mln produktów