Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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

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

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?

../../../ <- 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.

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 ?

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 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...