uart i hex

Loading thread data ...

  1. 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
  2. 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?

Reply to
Adam Dybkowski

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

Reply to
Waldemar Krzok

To maskowanie (a & 0xF0) jest zbędne. Wystarczy b=a>>4;

Reply to
Zbych

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

Reply to
Waldemar Krzok

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.

Reply to
Zbych
Reply to
Krzysztof Rudnik

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

Reply to
Waldemar Krzok

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

Reply to
Waldemar Krzok

Uwazaj, bo jak swierdzi ze typ jest "signed", to moze czasem z przodu dopelnic 1111

J.

Reply to
J.F.

Wytłumacz mi jak kompilator zmienną typu unsigned char może potraktować jako liczbę ze znakiem.

Reply to
Zbych

Mozesz zapomniec dopusac unsigned. Moze miec blad. Albo upierdliwie realizowac standard - byl tu jakis przyklad jak to GCC konwertowal na 16 bit ..

J.

Reply to
J.F.

^^^^^^^^^^^^^^^^^^^^^^^ To co, unsigned char ma zakres 0...127??

Pozdrawiam

Reply to
Marcin Stanisz

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

formatting link
nic o tym nie ma.

Reply to
Zbych

Przeczytaj proszę jescze raz parę postów powyżej. To co napisałem dotyczyło operacji przesuwania w prawo liczby bez znaku (x>>y).

Reply to
Zbych

No, tak. Niedoczytałem, że chodzi o 0 wpisywane w wyniku przesuwania.

Serdeczne

Reply to
Marcin Stanisz

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.