c + pic
Hynek Sladky
econf na centrum.cz
Středa Únor 29 13:34:57 CET 2012
Mozna by se struktura musela dat jeste do union, ktera by umoznila
bytovy pristup...
typedef union {
unsigned char b;
struct {
unsigned left:1;
....
Nize uvedeny assembler je IMHO spravne: mam ukazatel a z adresy, kam
ukazuje, se precte byte.
Jeste je otazka, zda toto je spravne reseni. Jestli by nebylo lepsi
misto bitoveho pole pouzit jen bytovou promennou a sadu bitovych masek:
unsigned char keyPress;
#define KEY_LEFT 0x01
#define KEY_RIGHT 0x02
#define KEY_UP 0x04
#define KEY_DOWN 0x08
...
if (keyPress & keyMap) ...
Hynek Sladky
Dne 29.2.2012 13:05, Miroslav Draxal napsal(a):
>
> Dobrý den,
>
> Mejme strukturu o délce 1bytu
>
> -----------------------------------------------------------------------------------
>
> typedef struct _keyPress_flag
>
> { unsigned
> left :1;
>
> unsigned
> right :1;
>
> unsigned
> up :1;
>
> unsigned
> down :1;
>
> unsigned
> ok :1;
>
> unsigned
> nc1 :1;
>
> unsigned
> nc2 :1;
>
> unsigned
> Press :1;
>
> }_keyPress;
>
> _keyPress keyPress;
>
> uchar* pkeyPress = &keyPress; // bylo typedef unsigned char uchar
>
> if (!(*pkeyPress & keyMap)) // o toto se jedná
>
> c to přeloží jako
>
> uchar* pkeyPress = &keyPress;
>
> 0802 0E0E MOVLW 0xe
>
> 0804 0100 MOVLB 0
>
> 0806 6F1A MOVWF 0x1a, BANKED
>
> 0808 0E00 MOVLW 0
>
> 080A 6B1B CLRF 0x1b, BANKED
>
> if (!(*pkeyPress & keyMap))
>
> 0810 C01A MOVFF 0x1a, 0xfe9
>
> 0812 FFE9 NOP
>
> 0814 C01B MOVFF 0x1b, 0xfea
>
> 0816 FFEA NOP
>
> 0818 50EF MOVF 0xfef, W, ACCESS
>
> 081A 0BEA ANDLW 0xea
>
> 081C E108 BNZ 0x82e
>
> Chodí to to je. Optimalizace podle mě zapnuté všechny. Jak to napsat
> v C, pokud to jde, a vyhnout se asm, aby si to přeložilo jako
>
> MOVF 0x0e,W,ACCESS
>
> ANDLW 0Xea
>
> BNZ 0x82e
>
> Je to přeložený v HI-TECH C PRO for the PIC18 MCU Family V9.63PL3 PRO
>
> Díky Míra
>
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20120229/f1d9afaa/attachment.htm>
Další informace o konferenci Hw-list