Pytanie o kurs

Loading thread data ...

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.

Reply to
Dumak

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

Reply to
Tom

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.

Reply to
RobertP.

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

Reply to
Konop

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 -

formatting link

Reply to
Artur M. Piwko

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

Reply to
yes

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

Reply to
Artur M. Piwko

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.

Reply to
J.F.

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.

Reply to
Adam Wysocki

Może skonfiguruj sprawdzanie pisowni...

Reply to
Adam Wysocki

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.