-
Data: 2011-02-02 01:01:13
Temat: Re: które języki 'historyczne' sš ważne
Od: Jędrzej Dudkiewicz <j...@n...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 02/02/2011 01:06 AM, Andrzej Jarzabek wrote:
> On 01/02/2011 21:50, Marek Borowski wrote:
>>
>> Cos mam wrazenie ze mylicie systemy z systemami. Operacje bliskie
>> hardware najwygodniej sie robi w C. Jak np w innych jezykach wysokiego
>> poziomu deklarujesz wywolanie funkcji z pod konkretnego adresu he ?
>>
>> W C prosze bardzo:
>>
>> void (*fun)(void) = (void (*)(void))0xFC00;
>> fun();
>
> Naprawdę muszę pisać, jak to można zrobić w C++?
>
>> Jak po odebraniu pakietu dobierzesz sie do jego pol, bez dodatkowych
>> narzutow ?
>>
>> W C jest to trywialne:
>>
>> uint8_t *buffer;
>>
>> a po odebraniu;
>>
>> struct Packet* usb = (struct Packet*) buffer;
>>
>> usb->requestType i jedziemy.
>
> Naprawdę? Szkoda tylko, że jak piszesz tę strukturę, to musisz pilnować,
> żeby wszystkie pola były na swoim miejscu i żeby Ci kompilator nie
> namieszał paddingiem na przykład.
__attribute__((packed)), pola struktury nie mogą być przekładane.
> Jak w C zapiszesz pole pakietu, które jest zaczyna się od ósmego bajta i
> jest czterobajtową liczbą, powiedzmy bez znaku, zapisaną w formacie -
> uwaga - big endian?
Rozumiem, że chodzi o deklarację tego pola w strukturze? Otóż wstawię na
początek pól na łączną wartość 7 bajtów, potem wstawię czterobajtową
zmienną, a potem wywołam funkcję "preprocess_packet", która mi zawoła
ntohl i pochodne na wskazanych polach, w tym na tej zmiennej.
> W C++ za to możesz bez problemu wrapnąć bufor bajtowy w klasę, która
> jako dane pole udotępnia ci dajmy na to 14 bajt bufora albo wartość
> liczbową w natywnym formacie, zapisaną jako big endian na bajtach od 4
> do 7.
Jasne, ale w środku albo będziesz kopiował dane do oddzielnych pól, albo
będziesz trzymał wskaźniki do nich i wołał ntohl przy dostępie, albo
wstawisz powyższy syf. To trzecie ma najmniejszy narzut pamięciowy i
obliczeniowy w czasie wykonania.
Tak czy owak, zaletą C++ jest to, że jakby co, to można tego rozwiązania
użyć, ale znacznie ładniej zapakowanego.
JD
Następne wpisy z tego wątku
- 02.02.11 01:25 Michoo
- 02.02.11 02:22 Michoo
- 02.02.11 02:23 Michoo
- 02.02.11 06:30 Adam Przybyla
- 02.02.11 06:32 Grzegorz Krukowski
- 02.02.11 07:46 Andrzej Jarzabek
- 02.02.11 08:04 Tomasz Kaczanowski
- 02.02.11 08:05 Tomasz Kaczanowski
- 02.02.11 08:08 Krzysiek Kowaliczek
- 02.02.11 08:22 Krzysiek Kowaliczek
- 02.02.11 08:28 Krzysiek Kowaliczek
- 02.02.11 09:08 Stachu 'Dozzie' K.
- 02.02.11 09:09 Stachu 'Dozzie' K.
- 02.02.11 09:34 Maciej Sobczak
- 02.02.11 09:36 R. P.
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-02-01 "Nie kupujcie samochodów elektrycznych
- 2025-02-01 jakie małe auto duże w środku :-)
- 2025-02-01 Re: pytanie do oponiarzy lub szybkojeżdzących (opony Hankook Ventus Prime, S1 Evo, alternatywy)
- 2025-02-01 T-1000 was here
- 2025-02-01 Warszawa => DevOps Engineer <=
- 2025-02-01 Katowice => Administrator IT - Operating Systems and Virtualization <=
- 2025-02-01 Warszawa => Spedytor międzynarodowy <=
- 2025-02-01 Śmierć mózgu a narządy do pobrania
- 2025-01-31 A niektórym to naprawdę zależy na ekologi w miastach LPG POWRACA ;-)
- 2025-01-31 Lublin => Programista Delphi <=
- 2025-01-31 Łódź => Programista NodeJS <=
- 2025-01-31 Wrocław => Senior SAP Support Consultant (SD) <=
- 2025-01-31 Warszawa => Full Stack web developer (obszar .Net Core, Angular6+) <=
- 2025-01-31 Gdańsk => iOS Developer (Swift experience) <=
- 2025-01-31 Kraków => UX Designer <=