pointery C
Miroslav Mraz
mraz na seznam.cz
Úterý Květen 21 21:14:08 CEST 2013
Nehledejte v tom složitosti.
1. Pokud se ten union má vejít do 1 bytu, bude lépe místo unsigned, kde
překladač předpokládá unsigned int, což budou patrně 2 byty použít
unsigned char (lépe uint8_t ze stdint.h).
2. To složité přetypování mi přijde docela zbytečné, pracoval bych s tím
asi takto:
_ProgramEEprom* pTest;
pTest = &ProgramRAM[Program][RAM_AutoMesic];
tmp = (*pTest).value; // takhle
tmp = pTest->value; // nebo stejne
tmp = pTest->Mesic;
Nebo jsem něco přehlédl ?
Mrazík
Miroslav Draxal píše v Út 21. 05. 2013 v 13:29 +0200:
> Dobrý den,
>
> Toto je pokračování vlákna“ C _ jak rozepsat řádek“. Bylo zpřetrháno,
> tak proto nově.
>
>
>
> Opět ukazatele. Mocný nástroj, ale složitý!!!
>
>
>
> typedef union {
>
> char value;
>
>
>
> struct {
>
> unsigned Bit0 : 1;
>
> unsigned Bit1 : 1;
>
> unsigned Bit2 : 1;
>
> unsigned Bit3 : 1;
>
> unsigned Bit4 : 1;
>
> unsigned Bit5 : 1;
>
> unsigned Bit6 : 1;
>
> unsigned Bit7 : 1;
>
> } Bits;
>
>
>
> struct {
>
> unsigned cas : 7;
>
> unsigned bit_PROLNpauza : 1; // set = prolnutí
>
> } ProlnutiPauza;
>
>
>
> struct {
>
> unsigned Mesic : 5;
>
> unsigned AutoOnOff : 1;
>
> unsigned EndProgram : 1;
>
> };
>
> } _ProgramEEprom;
>
>
>
> _ProgramEEprom ProgramRAM[PocetProgEEprom][DelkaProgEEprom]
>
>
>
> char *pTest
>
>
>
> pTest = &ProgramRAM[Program][RAM_AutoMesic].value;
> // na adrese D0 je 0x0B
>
> tmp =(*((_ProgramEEprom*)*pTest)).value;
> // načte 1 - chyba
>
> tmp =
> *pTest; // načte 0x0B - ok
>
>
>
> Je problém s
>
> tmp =(*((_ProgramEEprom*)*pTest)).value;// načte 1
>
> tmp =(*((_ProgramEEprom*)*pTest)).mesic;// načte taky 1
>
>
>
> ale načítat by měl 0x0B. Co mi zase uniká? Míra
>
>
>
Další informace o konferenci Hw-list