logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

problem z <util/delay.h>

muminek4444 02 Maj 2009 21:44 2138 10
  • #1 6482770
    muminek4444
    Poziom 10  
    mam taki problem
    wyskakuja mi warningi i nie mogę ich wyeliminować

    c:\winavr-20090313\bin\../lib/gcc/avr/4.3.2/include/util/delay.h: In function 'void WaitMs(uint8_t)':
    c:\winavr-20090313\bin\../lib/gcc/avr/4.3.2/include/util/delay.h:119: warning: will never be executed
    c:\winavr-20090313\bin\../lib/gcc/avr/4.3.2/include/util/delay.h:120: warning: will never be executed
    c:\winavr-20090313\bin\../lib/gcc/avr/4.3.2/include/util/delay_basic.h:110: warning: will never be executed

    funkcja wygląda tak:
    void TLCD::Czekaj_ns(uint8_t ns)
    {
    uint8_t i;
    for (i=1;i<=ns;i++)
    _delay_us(1);
    }

    w pliku nagłówkowym jest zadeklarowana biblioteka oraz F_CPU
    #define F_CPU 8000000UL
    #include <util/delay.h>


    nie wiem z czego moze to wynikac
  • #2 6482929
    zdebel
    Poziom 15  
    Stosujesz może jakieś optymalizacje? Flaga -O kompilatora.
    Drugie pytanie to po co taką funkcję piszesz? Nie lepiej podać żądaną wartość od razu funkcji _delay_us? To co piszesz chyba nie bedzie za dokładne.
  • #3 6482960
    muminek4444
    Poziom 10  
    jeśli chodzi o flage to mam s

    _delay_ms (double __ms)
    Maksymalne możliwe wstrzymanie to 262.14 ms / (F_CPU w MHz)

    a ja potrzebuje większe opóżnienie
  • #4 6483010
    zdebel
    Poziom 15  
    A właśnie chyba s nie może być, nie wiem dokładnie co s oznacza (optymalizacja pod względem rozmiaru?) ale daj np. -O2. O ile się nie mylę funkcja _delay_ms jest tak napisana żebyś mógł dłużej spać, sam ją stosowałem żeby odczekać np. sekundę w postaci:

    _delay_ms(1000);

    Pamiętaj że _delay_ms a _delay_us to dwie różne funkcje :)
  • #5 6483271
    muminek4444
    Poziom 10  
    wiem że to dwie rózne funkcje ;)
    to taka bardziej literówka była ;p

    nawet po zmianie tej flagi na 02
    i zamiast tej stworzonej funkcji używam
    _delay_ms(1);
    _delay_us(1);
    i dalej mam te same warningi
  • #6 6483430
    zdebel
    Poziom 15  
    Jakbyś mógł zobaczyć inne optymalizacje (0 1), bo wydaje mi się że to ma związek z tym, jeśli nie to przepraszam ale ja innych pomysłów nie mam.
  • #7 6483673
    muminek4444
    Poziom 10  
    po zmianie tych optymalizacji kod mi sie nawet dwa razy powiększył

    to jest mój pierwszy program na mikrokontrlera i juz nie mam pojęcia co tam jest zle mógłbys spojrzeć na ten kod bo zaraz normalnie zwariuje

    Z góry dziękuje
  • #8 6483785
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Po co ten program jest w C++? Chyba tylko po to, żeby problemów było więcej...

    Pozatym - czy pierwszym programem musi być obiektowa obsługa wyświetlacza LCD zamiast standardowego migania dioda?

    Warto uczyć się po kolei, a nie od razu lecieć do C++ i LCD.

    4\/3!!
  • #9 6485691
    muminek4444
    Poziom 10  
    no niestety taki mam projekt do zrobienia i nic na to nie poradze

    z programem mysle ze jakos sobie poradze, tylko nie wiem jaki poziom optymalizacji i jak dołączyć te biblioteke delay.h zeby nie było tych warningów
  • #11 6486326
    Tantalos
    Poziom 18  
    Te warningi możesz zignorować. Poza tym funkcją _delay_ms możesz generować opóźnienia do 6.5535s.
REKLAMA