Wertuję książkę Pana Jarosława Dolińskiego - "Mikrokontrolery AVR w praktyce" poświęconej programowaniu mikrokontrolerów w C.
1. W pierwszym listingu użyto komend cbi(PORTB,i); i sbi(PORTB,i); których nie przyjmuje WinAVR GCC. Używam najnowszej wersji WinAvR oraz z 2005 roku. W obu przypadkach ten sam błąd. Jak temu zaradzić.
2. Co to są pliki <io.h>?
Równolegle śledzę kurs C z Edw z 2005/2006 roku.
We wspomnianej książce spotykam następujący kod:
#include <io.h>
natomiast w kursie z EdW
#include <avr\io.h>
Czy obydwie składnie są poprawne i dotyczą tych samych plików?
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięcbi(PORTB,i);
Moderatorzy:Jacek Bogusz, procesorowiec, r-mik, Moderatorzy
-
- -
- Posty:175
- Rejestracja:10 paź 2003, o 20:44
- Lokalizacja:Białystok
- Kontaktowanie:
zeby korzystac z tych makr dodaj wpierw:
#include <avr\sfr_defs.h>
cytat
i wybij sobie ze ..glowy
#include <avr\sfr_defs.h>
cytat
Kod: Zaznacz cały
Avr-gcc nie posiada składni bezpośredniego dostępu do bitów zmienna.numer_bitu. Operacje na bitach wykonujemy używając iloczynu i sumy bitowej, np. dla bajtu:
zmienna |= _BV(numer_bitu); // ustawienie bitu
zmienna &= ~_BV(numer_bitu); //zgaszenie bitu
zmienna ^= _BV(numer_bitu); // przełączenie bitu
( _BV() - bit value to proste pomocnicze makro równoznaczne z jedynką przesuniętą w lewo o numer_bitu ).
PORTC & 0x01; // Testuj bit 0 portu C.
i wybij sobie ze ..glowy
Kod: Zaznacz cały
A na zapis podobny do funkcji jest śliczna funkcja 'inline', w pełni
sprawdzana przez kompilator, będąca jakąś tam sensowną całością.
zamiast
#define LED_OFF PORTB=!_BV(PB4)
poprawnie jest
inline void LED_OFF(void)
{
PORTB=!_BV(PB4) ;
}
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości