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