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