Skocz do zawartości

[C] Biblioteka 'util/delay.h' - błąd kompilacji


expertup

Pomocna odpowiedź

Witam,

stwierdziłem, ze najwyższa pora zacząć uczyć się języka C. Przez cały okres technikum programowałem w BASCOM, wiec co nie co wiem o ukontrolerach.

Na początek postanowiłem pomrugać sobie diodą LED. Na początek wziąłem taki kod:

/* port_test.c
* The following program just  keeps toggling pin 0 of port B
*/

#include <avr/io.h> //standard include for ATMega16
#define sbi(x,y) x |= _BV(y) //set bit - using bitwise OR operator 
#define cbi(x,y) x &= ~(_BV(y)) //clear bit - using bitwise AND operator
#define tbi(x,y) x ^= _BV(y) //toggle bit - using bitwise XOR operator
#define is_high(x,y) (x & _BV(y) == _BV(y)) //check if the y'th bit of register 'x' is high ... test if its AND with 1 is 1

/* _BV(a) is a macro which returns the value corresponding to 2 to the power 'a'. Thus _BV(PX3) would be 0x08 or 0b00001000 */

void main(void)
{
   DDRD=0xff; //PORTB as OUTPUT
   PORTD=0x00; //All pins of PORTB LOW

   unsigned int i;
   while(1==1) //Infinite loop
   {
       for(i=0;i<65535;i++); //delay
       tbi(PORTD,PD5);   //here the toggling takes place
   }
}

Działa od bez żadnego problemu. Jednak w innym przykładzie zobaczyłem, że można dołączyć bibliotekę delay:

/* Szkielet prostego programu dla avr-gcc */

#define F_CPU 8000000L
#include <avr/io.h>     
#include <util/delay.h>       

int main(void)
{
DDRD  = 0xFF;
for(;;)
{   
	PORTD = 0xff;

}
}

P kompilacji ostatniego kodu, dostaję błąd:

piotr@piotr-Satellite-L500:~/TEST$ avr-gcc -mmcu=atmega32 dioda.c -o dioda

In file included from dioda.c:5:0:

/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:95:3: warning: #warning "Compiler optimizations disabled; functions from won't work as designed"

piotr@piotr-Satellite-L500:~/TEST$

Czyli jakiś problem z biblioteką delay.h. Po przejściu do folderu 'lib', nie widzę w nim folderu 'avr' w którym powinny być foldery z tą biblioteką. Tak mi się przynajmniej wydaje.

Środowisko do programowania przygotowałem wg. tego poradnika: https://www.forbot.pl/forum/topics20/programowanie-programowanie-avr-w-linux-vt3667.htm

Jakieś sugestie?

Pozdrawiam

Link do komentarza
Share on other sites

Z tego co widać nie ma błędu tylko ostrzeżenie, dokładnie to chodzi o wyłączoną optymalizacje itd. W dodatku nie korzystasz z żadnej funkcji z util/delay.h więc wszystko powinno brykać. Upewnij się, czy otrzymujesz plik wynikowy, skorzystaj też z funkcji _delay_ms() lub _delay_us() i zobacz czy dostajesz error.

pozdro

ps. po wejściu w lib powinieneś szukać gcc, a w nim dopiero avr

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Ok, wsadziłem funkcję _delay_ms(1000); i jest ok. Zastanawiam sie tylko skąd on bierze tą bibliotekę, bo mam lib/gcc/avr i w nim tylko jeden folder 4.5.3, a gdzie ten include?

Po za tym: /usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h

jestem w folderze /usr/lib/gcc/avr/4.5.3

../

/usr/lib/gcc/avr

../

/usr/lib/gcc

../

/usr/lib

Czego nie rozumiem/nie wiem?

Link do komentarza
Share on other sites

../../../ <- ten fragment w ścieżce jest skrótem, a nie wyjściem w górę

Nie mam teraz możliwości podejrzenia jaka jest dokładna ścieżka ale możesz sobie poszukać i poćwiczyć jednocześnie zwiedzanie katalogów w terminalu.

Komenda LS (może być z małych ofc ale będę tak pisać bo jest czytelniej) pokazuje zawartość katalogu więc po wejściu w /usr/lib/gcc/avr/4.5.3/ wrzuć LS lub LS -ALL (wtedy masz podgląd praw dla każdego pliku/katalogu) i sobie przeglądaj dalej każdy kolejny.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Czyli /usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h

to może być PRZYKŁADOWO

/usr/lib/gcc/avr/4.5.3/abcdefghikl/1234567890/jakis_tam_jeszcze_jeden_katalog/avr/include/util/delay.h ?

dokładnie 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.