eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaDlaczego ATmega128 przekłamuje? › Re: Dlaczego ATmega128 przek?amuje?
  • Data: 2009-10-16 11:24:37
    Temat: Re: Dlaczego ATmega128 przek?amuje?
    Od: cepu69 <c...@t...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    T.M.F. wrote:

    > W dniu 15.10.2009 20:11, MiSTER pisze:
    >>> Cos sie zapetliles, to w koncu te pola bitowe sa rozmieszczane dowolnie
    >>> czy nie?
    >>> IMHO kompilator rozmieszcza je w kolejnosci w jakiej sa zdefiniowane - w
    >>> koncu to struktura, a elementy struktury wystepuja w kolejnosci zgodnej
    >>> z definicja.
    >>
    >> Nie zaleca si? korzysta? z p?l bitowych je?eli soft ma by? kompilowany
    >> pod
    >> r?nymi platformami gdy? standard NIE DEFINIUJE kolejno?ci przypisania
    >> bit?w.
    >>
    To kompilator ustala kolejnosc bitwo we bajcie, np GCC vs propriety
    compiler:
    typedef union {
    unsigned short word;
    #ifndef __GNUC__
    struct
    {
    unsigned short :1; /* reserved */
    unsigned short CodeAssertLine :13;
    unsigned short EventOverflowTrigger :1;
    unsigned short EventCodeAssertTrigger :1;
    } bit;
    #else
    struct
    {
    unsigned short EventCodeAssertTrigger :1;
    unsigned short EventOverflowTrigger :1;
    unsigned short CodeAssertLine :13;
    unsigned short :1; /* reserved */
    } bit;
    #endif

    aczkolwiek GCC dostarcza makra __BIG_ENDIAN_BITFIELD oraz
    __LITTLE_ENDIAN_BITFIELD informujace o ukladzie bitow w slowie

    struct atapi_mechstat_header {
    #if defined(__BIG_ENDIAN_BITFIELD)
    __u8 fault : 1;
    __u8 changer_state : 2;
    __u8 curslot : 5;
    #elif defined(__LITTLE_ENDIAN_BITFIELD)
    __u8 curslot : 5;
    __u8 changer_state : 2;
    __u8 fault : 1;
    #else
    #error "Please fix <asm/byteorder.h>"
    #endif

    #if defined(__BIG_ENDIAN_BITFIELD)
    __u8 mech_state : 3;
    __u8 door_open : 1;
    __u8 reserved1 : 4;
    #elif defined(__LITTLE_ENDIAN_BITFIELD)
    __u8 reserved1 : 4;
    __u8 door_open : 1;
    __u8 mech_state : 3;
    #else
    #error "Please fix <asm/byteorder.h>"
    #endif

    byte curlba[3];
    byte nslots;
    __u8 short slot_tablelen;
    };

    >
    > Ale to jak sadze jest raczej kwestia big/little-endian.
    Nie endian mowi o kolejnosi bajtow w slowie :
    http://pl.wikipedia.org/wiki/Kolejność_bajtów

    > Dla programu nie ma to znaczenia - o ile wlasnie nie przenosze pomiedzy
    > architekturami danych wygenerowanych na innej. Bo w samym programie
    > odwolanie do pola struktury zawsze bedzie jednoznaczne.
    Oczywiscie dopoki nie jest to unia i odwolujesz sie do niej zarowno przez
    pola bitowe jak i slowa ;)

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: