Cecko - zacatecnicka

Vláďa Anděl vaelektronik@vaelektronik.cz
Pátek Leden 4 23:41:21 CET 2008


No já ve starém Kejlu udělám přetypování na unsigned char a vezme si to jen 1 bajt. Když napíšu  
unsigned int b;
unsigned char a;
a=(unsigned char)b;
vezme si to dolní bajt. Když napíšu 
a=(unsigned char)(b<<8);
vezme si to horní bajt a žádné rotace neprovádí. Ale je možné že jiná céčka chtějí něco jiného.
Anděl

  ----- Original Message ----- 
  From: Ladislav Vaiz 
  To: HW-news 
  Sent: Friday, January 04, 2008 10:51 PM
  Subject: Re: Cecko - zacatecnicka


  A nebo použít ukazatele char* a unsigned short*. Chcete-li ukazovat na konkrétní adresu jako u pascalského absolute (do SFR), tak je to vhodné. Existují i proprietární rozšíření, například:

  sdcc:
  sfr at 0x80 P0;
  sbit at 0x80 P0_0;

  keil:
  sfr P0 = 0x80;
  sbit P0_0 = 0x80;

  Láďa

  Pavel Troller napsal(a): 
Zdravíĺ,
  rozumím-li tomu, hodí se Vám typ union (viz následující příkládek):

$ cat union.c

#include <stdio.h>

typedef struct { char lo; char hi; } chars;

typedef union {
  unsigned short number;
  chars bytes;
} un;

int main(void) {

 un my_un;

 my_un.bytes.lo = 0x55;
 my_un.bytes.hi = 0xaa;

printf("%x\n", my_un.number);

}

$ gcc -o union union.c
$ ./union
aa55

  DD,
v Ccku (konkretne Microchip C30, ale to je asi jedno) jsem toho jeste moc
nenapsal, takze se omlouvam za zacatecnicky dotaz. Da se vubec, a pokud ano,
tak jak, realizovat nekolikery pohled na stejnou pozici v pameti? 
Napriklad mam promennou:
unsigned int Sestnactibit; 

a chtel bych na totez taky koukat jako na:
typedef struct HLverze {
   unsigned char H;
   unsigned char L;
} HLverze;

HLverze SestnactHL;

V Pascalu se blahe pameti takove triky daly delat pomoci klicoveho slovicka
"absolute" ale v Cecku nemuzu prijit na to, jak to udelat.

Hlavickove soubory od Microchipu jsou presne tohohle plne, jenze tam
pouzivaji __attribute__ __sfr__, ktery to usadi na predem danou pevnou adresu
SFR registu (ta je myslim ve scriptu linkeru .gld nebo v prislusnem inc
souboru. (Namatkou vybiram priklad z p30f3012.h):

/* MODCON: Modulo Addressing Control Register */
extern volatile unsigned int MODCON __attribute__((__sfr__));
typedef struct tagMODCONBITS {
        unsigned XWM    :4;     /* X-RAGU/X-WAGU modulo addressing register
select  */
        unsigned YWM    :4;     /* Y-RAGU modulo addressing register select
*/
        unsigned BWM    :4;     /* Bit-reversed addressing register select
*/
        unsigned        :2;
        unsigned YMODEN :1;     /* Y-RAGU modulo addressing enable
*/
        unsigned XMODEN :1;     /* X-RAGU/X-WAGU modulo addressing enable
*/
} MODCONBITS;
extern volatile MODCONBITS MODCONbits __attribute__((__sfr__));


Predem diky za radu, jak tuhle zrejme trivialitu v Cecku vyresit.

Jakub Serych

_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
    _______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
  

------------------------------------------------------------------------------


  _______________________________________________
  HW-list mailing list  -  sponsored by www.HW.cz
  Hw-list@list.hw.cz
  http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://list.hw.cz/pipermail/hw-list/attachments/20080104/300df04a/attachment.htm 


Další informace o konferenci Hw-list