Deklaracja bitow w CodeVisionAVR

Oct 13, 2003 2 Replies

Witam!



W jaki sposób zadeklarowaæ w CV_AVR zmienna q_byte tak ¿eby w programie mo¿na by³o wykonywaæ operacje na ca³ym bajcie jak i na poszczególnych bitach.



W Keilu wyglada³o to tak: UCHAR bdata qbyte0=0; sbit q0 = qbyte0^0; sbit q1 = qbyte0^1; sbit q2 = qbyte0^2; sbit q3 = qbyte0^3; sbit q4 = qbyte0^4; sbit q5 = qbyte0^5; sbit q6 = qbyte0^6; sbit q7 = qbyte0^7;



W CV_AVR na razie wykonuje od groma operacji (1<< bit_no), sprawdzanie czy ustawic 1 czy wyzerowac to nastepne kilobajty programu.



Sprawdzi³em demo ICC_AVR ale tam w ogóle nie wystepuje zmienna bitowa. Czy w IAR_AVR mo¿na deklarowac funkcje ze zmiennymi bitowymi jako argument funkcji?



Pozdrawiam Ed


Code Vision ma fajny help i tam jest wszystko opisane.

mo¿na tak: bit flaszka1=1; Inaczej siê chyba nie da. Pola bitowe nie s± obs³ugiwane. Mo¿na bity zmieniaæ za pomoc± operacji logicznych.

radek

U¿ytkownik "Ed" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:bmfa3b$sk9$ snipped-for-privacy@news.onet.pl...

Deklaracja którą masz poniżej powinna działać pod każdym komplikatorem C. Musisz sobie tylko wybrać odpowiednią kolejność bitów w bajcie.

Regards, /J.D.

#include <stdio.h>

union moja_swietna_unia { unsigned char BYTE; struct { #if defined MSB_FIRST unsigned char B7:1; unsigned char B6:1; unsigned char B5:1; unsigned char B4:1; unsigned char B3:1; unsigned char B2:1; unsigned char B1:1; unsigned char B0:1; #elif defined LSB_FIRST unsigned char B0:1; unsigned char B1:1; unsigned char B2:1; unsigned char B3:1; unsigned char B4:1; unsigned char B5:1; unsigned char B6:1; unsigned char B7:1; #else #error "Musisz zdefiniować kolejność bitów w bajcie." #endif } BIT; };

int main(int argc, char **argv) { union moja_swietna_unia moja_swietna_zmienna;

moja_swietna_zmienna.BYTE = 0x99; printf("%#x\n", moja_swietna_zmienna.BYTE); /* 0x99 */

moja_swietna_zmienna.BIT.B7 ^= 1; /* przełącz bit 7 */ moja_swietna_zmienna.BIT.B6 = 1; /* ustaw bit 6 */ moja_swietna_zmienna.BIT.B3 = 0; /* wyzeruj bit 3 */ printf("%#x\n", moja_swietna_zmienna.BYTE); /* 0x51 */

return 0; }

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required