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