Bitove polia v C

Stano stano.hw na gmail.com
Pátek Duben 6 15:47:35 CEST 2012


Dobry den
Este oprasim tuto temu.
Jeden zo sposobou ako vyuzivat bitband ako pisal vyssie map Povalac, s 
vyuzitim makra

#define BitBand(VarAddr, BitNumber) \
    (*(__IO uint32_t *) (SRAM_BB_BASE + \
    (((uint32_t)(&VarAddr) - SRAM_BASE) << 5) + \
    ((BitNumber) << 2)))


Druhy sposob, pomocou struktury:
typedef struct {
    unsigned int b0    : 1;
    unsigned int b1    : 1;
    unsigned int b2    : 1;
    unsigned int b3    : 1;
} bity;

Otazka je ktory z tychto sposobov je vhodnejsi na prenasanie informacie 
z/do interruptu.
Je mozne nejako compileru napovedat aby pouzil bitove operacie pre 
pripad zo strukturou, je nejaky sposob ako zabezpecit aby aj v tomto 
pripade boli operacie atomicke?
A posledna otazka. Zarovnanie dat, ak do strukturi pridame napriklad:

typedef struct {
    char data8;
    unsigned int b1    : 1;
    ...
Da sa a ak tak ako zabezpecit aby bitove premenne nezdielali tu istu 
32bit pamatovu adresu ako 8bitova premenna.
Dakujem za odpovede pripadne za akekolvek navedenie spravnym smerom ako 
bezpecne predavat data z/do interruptu.
Architektura je cortexM3 ale tieto problemy su platne vseobecne.

S pozdravom
          Stano


Další informace o konferenci Hw-list