pole bitového pole v C

Josef Štengl ok1ced na nagano.cz
Sobota Leden 12 17:33:50 CET 2013


A Jan, jsi si jist,  že na PIC je c99 C překladač? Protože _Bool je 
zaveden až od C99 (to jen tak pro informaci, nepředpokládám, že to nevíš 
:-). Pokud není, tak se to pravděpodobně nepřeloží.

Abych jen nerýpal. V případě kompilátoru nebo překladu ve standardu před 
C99 ještě přidej řádku:

typedef  char _Bool;

nebo, když už používáme stdint.h

typedef int_fast8_t _Bool;

Bezpečnější je to rovnou nahradit, přeci jen je to klíčové slovo.

Mimochodem, na řádce
bitfield[idx / 8]&= (~mask)&  0xFF;

výraz & 0xFF má nějaký speciální význam? Protože položka bitfield je 
uin8_t, tak jako mask. Není mi jasné proč to tam je, podle mě je to tam 
proto, protože jsi to psal rychle a tak nějak se to tam vyskytlo (ale 
mohu se mýlit, proto se ptám).

ced


Dne 12.1.2013 15:45, Jan Waclawek napsal(a):
>> je to vlastně pole char[3], chtěl bych napsat něco univerzálního, kde bych
>> zadal ukazatel na počátek pole, jaký bit nastavit např.14.
>>
>> Nějak mě nenapadá žádný elegantní způsob. Ale zase, někde jsem to někde
>> viděl v asm pro PIC. Míra
>
> #include<stdint.h>
> uint8_t bits[3]
>
> void SetBit(uint8_t * bitfield, uint8_t idx, _Bool value) {
> uint8_t mask;
>    mask = 1<<  (idx % 8);
>    if (value) {
>      bitfield[idx / 8] |= mask;
>    } else {
>      bitfield[idx / 8]&= (~mask)&  0xFF;
>    }
> }
>
> _Bool GetBit(uint8_t * bitfield, uint8_t idx) {
>    return (_Bool)(bitfield[idx / 8]&  (1<<  (idx % 8))
> }
>
> wek
> wek
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list