- posted
19 years ago
uart i hex
- Vote on answer
- posted
19 years ago
- Pomyśl jak zamienić bajt na 2 znaki hex: - rozdziel na starszą ((n >> 4) & 0x0f) i młodszą połówkę (n & 0x0f) - mając dwie liczby z zakresu 0..15 przekształć każdą z nich na znak szestnastkowy
- Wyślij te znaki funkcją typu uart_putchar (ch)
A dlaczego nie chcesz normalnie użyć printf, wcześniej się doczepiając do jego mechanizmu wywołaniem fdevopen?
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
a co chcesz "robić" ? Przecież wewnętrznie i tak już jest.
uchar a, b;
a = 0x26; // na przykład b = a & 0x0F; uart_putchar( b + (b < 10) ? '0' : 'A' ); b = (a & 0xF0) >> 4; uart_putchar( b + (b < 10) ? '0' : 'A' );
ok?
Waldek
- Vote on answer
- posted
19 years ago
To maskowanie (a & 0xF0) jest zbędne. Wystarczy b=a>>4;
- Vote on answer
- posted
19 years ago
fuckt. Ale wygląda ładniej ;-) No i coniektóre kompilatory (nie wiem, czy GCC nie jest takim świnią) propagują MSB przy shifcie i już masz kłopot. Z moją wersją zresztą też, więc lepiej: b = (a >> 4) & 0x0F;
Waldek
- Vote on answer
- posted
19 years ago
MSB ? chodzi ci o najstarszy bit w bajcie ? Jeśli masz liczbę bez znaku to na najstarszy bit zawsze jest wpisywane 0, a jeśli ze znakiem to powielany jest bit znaku. W przykładzie który dałeś masz liczbę bez znaku więc zapis "b=a>>4;" jest w pełni wystarczający.
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
teoretycznie masz rację, ale już kiedyś dostałem kurwicy jąder, bo kompilator o tym nie wiedział ;-) Strzyżonego pan bóg strzyże...
Waldek
- Vote on answer
- posted
19 years ago
tak być powinno. Ale jak już pisałem, miałem kiedyś kompilator, który uparł się, że bedzie robił shifta na signed, choć wsio było unsigned. No i miałem problem, a koledzy nauczyli się trochę polskiej łaciny.
Waldek
- Vote on answer
- posted
19 years ago
Uwazaj, bo jak swierdzi ze typ jest "signed", to moze czasem z przodu dopelnic 1111
J.
- Vote on answer
- posted
19 years ago
Wytłumacz mi jak kompilator zmienną typu unsigned char może potraktować jako liczbę ze znakiem.
- Vote on answer
- posted
19 years ago
Mozesz zapomniec dopusac unsigned. Moze miec blad. Albo upierdliwie realizowac standard - byl tu jakis przyklad jak to GCC konwertowal na 16 bit ..
J.
- Vote on answer
- posted
19 years ago
^^^^^^^^^^^^^^^^^^^^^^^ To co, unsigned char ma zakres 0...127??
Pozdrawiam
- Vote on answer
- posted
19 years ago
Mogę się założyć, że ilość zmiennych ze znakiem jest małym procentem wszystkich zmiennych w programach do systemów terujących/osadzonych/itp. Więc prędzej ktoś z rozpędu dopisze unsigned tam gdzie go być nie powinno.
Chcesz przez to powiedzieć, że w wyniku tej konwersji wynik operacji był nieprawidłowy (tzn liczba została potraktowana jakby miała znak, choć go mieć nie powinna) ? Ciekawe, bo na stronie
- Vote on answer
- posted
19 years ago
Przeczytaj proszę jescze raz parę postów powyżej. To co napisałem dotyczyło operacji przesuwania w prawo liczby bez znaku (x>>y).
- Vote on answer
- posted
19 years ago
No, tak. Niedoczytałem, że chodzi o 0 wpisywane w wyniku przesuwania.
Serdeczne