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.

[ATmega8][C] - Kolejność dodawania bibliotek i definicji

want3d90 20 Sty 2014 04:01 990 6
  • #1 20 Sty 2014 04:01
    want3d90
    Poziom 5  

    Witam,
    Czy mógłby ktoś wyjaśnić mi dlaczego gdy skompiluję i uruchomię taki "program":

    Kod: c
    Zaloguj się, aby zobaczyć kod


    to opóźnienie pomiędzy poszczególnymi instrukcjami rzeczywiście wynosi 250ms, a w przypadku takiego programu:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    wynosi ono 2 sekundy pomiędzy każdą instrukcją?
    Z góry dziękuję za pomoc.

    0 6
  • #2 20 Sty 2014 05:57
    kedzi1
    Poziom 18  

    Witam,
    #define F_CPU 1000000 to dyrektywa preprocesora. Zdefiniowana nazwa F_CPU zamieniana jest w tym przypadku na wartość liczbową. Dzieje się tak od momentu wystąpienia tego polecenia.
    Biblioteka delay.h korzysta z tej wartości do obliczania opóźnień. Zmieniając ją przed dodaniem biblioteki wpływasz na sposób jej kompilacji i zarazem na opóźnienie jakie dają jej funkcje.
    Prędkości zegara powinna być zdeklarowana globalnie. Nie powinno się jej umieszczać w ten sposób co Ty bo właśnie może gdzieś "nie dotrzeć". Sprawdź ustawienia kompilacji projektu. Powinna znajdować się tam prędkość zegara do ustawienia lub sama deklaracja F_CPU. Tam ja zmień na prawidłową, a tę z programu usuń. Wszystko powinno wtedy zawsze działać prawidłowo.

    Pozdrawiam

    0
  • #3 20 Sty 2014 05:59
    Steryd3
    Poziom 31  

    Jeżeli doszedłeś do tego, iż jeden program działa poprawnie to chyba masz odpowiedź. Przeglądnij sobie co jest w bibliotece delay.h, czego ona potrzebuje i już będziesz miał odpowiedź. A w programowaniu jak w życiu-ważna jest kolejność:)

    0
  • #4 20 Sty 2014 08:51
    voytaschec
    Poziom 24  

    Dodatkowo staraj się zawsze zwracać uwagę na wszelkie warningi kompilatora/preprocesora. Początkujący programiście zwykle sprawdzają tylko errory, a ostrzeżeń nawet nie widzą. Przekompiluj jeszcze raz przykład z przypadku drugiego, przeczytaj ostrzeżenie, a od razu zorientujesz się o co chodzi.

    0
  • #5 20 Sty 2014 08:53
    BlueDraco
    Specjalista - Mikrokontrolery

    Zacznijmy jednak od tego, że delay.h, ani żaden inny plik .h NIE JEST BIBLIOTEKĄ.

    0
  • #7 20 Sty 2014 15:14
    want3d90
    Poziom 5  

    Dziękuję wszystkim za pomoc. Stawiam dopiero pierwsze kroki na elektrodzie i przyznam szczerze, że nie spodziewałem się jakiegokolwiek odzewu. :D

    @kedzi1
    Od teraz będę ustawiał to w pliku makefile.

    @BlueDraco
    Racja, są to nagłówki.

    0