<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-2" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
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:<br>
<br>
sdcc:<br>
sfr at 0x80 P0;<br>
sbit at 0x80 P0_0;<br>
<br>
keil:<br>
sfr P0 = 0x80;<br>
sbit P0_0 = 0x80;<br>
<br>
Láďa<br>
<br>
Pavel Troller napsal(a):
<blockquote cite="mid20080104213012.GA18075@tangens.sinus.cz"
type="cite">
<pre wrap="">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
</pre>
<blockquote type="cite">
<pre wrap="">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 <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<pre wrap=""><!---->_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
</body>
</html>