- posted
15 years ago
Pytanie o kurs
- Vote on answer
- posted
15 years ago
snipped-for-privacy@wp.pl pisze: (...)
W uC bardzo często trzeba ustawić jakiś pojedynczy bit bądź kilka bitów w rejestrze, aby to zrobić w sposób czytelny musisz używać przesunięć.
(...)
W tym przypadku to średnio, ale autorowi chodziło o samą zasadę - w dużym projekcie byś się pogubił jakbyś nie nadawał własnych nazw.
Tutaj bardziej chodzi o nadanie nazwy którą programista będzie pamiętał.
Proponuje abyś w jakimś programie wszystkie zmienne po nazywał sobie w następujący sposób: a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 itp.
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
snipped-for-privacy@wp.pl wrote: ...
Napiszesz sobie dobrze dzialajacy, sprawdzony program w ktorym LEDy sa podlaczone do PORTB. Potem sie okaze ze w Twoim urzadzeniu przydalby sie komparator analogowy ktory jest na jednym z pinow PORTB, nie ma problemu bo LEDy mozesz podlaczyc do PORTD ktory nie jest uzywany. No i teraz sie zastanow czy lepiej zmienic kilka #define (z DDRB na DDRD itd), czy zmieniac caly (sprawdzony i dobrze dzialajacy) program?
Tomek
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
I jak się programuje inny rejestr z różnymi bitami (bo ten tutaj to rzeczywiście nienajlepszy przykład), to jest to IMO bardziej przejrzyste do analizy - jak się później debuguje program, to od razu widać na jaki stan został dany bit ustawiony, zamiast pieczołowicie liczyć na której pozycji jest jedynka a na której zero.
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
snipped-for-privacy@wp.pl pisze:
No ale jeśli np. miałeś diody na pinach B0..B3, a teraz masz na B0 i B1, oraz B4 i B5 - to niezła masakra program pozmieniać ;)... np 0x03 zostanie, ale 0x05 zmienisz na 0x11 itp ;P... A jak zdefiniujesz #define LED1 0 #define LED2 1 #define LED3 2 #define LED4 3
i bedziesz używał (1 << LED1) itp...
To zmiana programu po "przełączniu" LEDów gdzieś indziej będzie się ogranizcała do zmiany kilku wartości w DEFINE :)... i koniec :)...
Przydatne - bo jeśli kiedyś będziesz pisał program, który będzie działał podobnie, ale na innym porcie i innych pinach - kopiujesz, zmieniasz "DEFINY" i masz :)....
Pozdrawiam Konop
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
In the darkest hour on Thu, 25 Sep 2008 12:56:31 +0200, snipped-for-privacy@wp.pl snipped-for-privacy@wp.pl screamed:
Nie jest prostsza. Co jest podłączone do portu B? Nie widać bez schematu. Opis LEDcośtam jest dużo bardziej czytelny.
ps. ustaw MIME -
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
entroper pisze:
podsumowując kolegów - im szybciej przyzwyczaisz się i zaczniesz korzystać z przesunięć bitowych tym lepiej dla Ciebie. W uC operacje bitowe to podstawa. W szczególności w prostych uC.
pozdrawiam yes
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
In the darkest hour on Thu, 25 Sep 2008 13:22:12 +0200, snipped-for-privacy@wp.pl snipped-for-privacy@wp.pl screamed:
Nie będzie żadnych przesunięć w kodzie tylko wyliczona już wartość. Przypuszczam, że może Ci jeszcze chodzić o to, że można było zamiast:
#define X 5 ... int x = 1 << X
dać:
#define X 0x20
int x = X
- Vote on answer
- posted
15 years ago
Ot co zrobilo Windows i C++. Dawniej sie uzywalo gesto.
Zapis gmatwa, ale potem ulatwia zmiany .. szczegolnie jak tych miejsc do obslugiwania jest wiecej i chcialbys np potem skorzystac z innego portu, a tu trzeba zmienic np 10 stalych w programie ..
A jeszcze zostaje kwestia ze nie znasz nr portu w czasie kompilacji - bedzie wybrany przez uzytkownika - choc z tym potrafi byc znacznie wiecej zachodu i ograniczen ze strony sprzetu ..
Dopoki pamietasz do czego jest uzywany DDRB to nie, ale potem musisz program zmienic, albo co gorsza po kims poprawic, i sie zastanawiasz co autor tu chcial powiedziec jak napisal DDRB=8
J.
- Vote on answer
- posted
15 years ago
Przesunięcia bitowe enkapsuluje się w makrodefinicje. _BV(5) oznacza maskę z ustawionym 5 bitem (1 << (5)).
Dla przejrzystości.
A z kolei używanie tutaj makrodefinicji to temat na osobny wykład...
Jest.
- Vote on answer
- posted
15 years ago
Może skonfiguruj sprawdzanie pisowni...