making a short out of a msb+lsb char

Hi all,

I'm new to C and need a hint on an optimization problem.

I have a 16 bit counter, divided into two 8bit SFRs, let's say TH0 and TL0, and I want to transfer them to a short.

I could:
mshort = (short)TH0 * 256 + TL0

but this takes 16bytes, similar to something like:
mshort = (short)TH0 << 8 + TL0

I would like to do it more simple, like:
MSB of mshort = TH0
LSB of mshort = TL0

I tried it that way:
unsigned short *pINT;
pINT = &TH0;

but this is not possible with SFRs.

Something else I tried:
unsigned short mINT;
unsigned char *pChar;
pChar = & mINT;
*pChar = TH0;
*(pChar + 1) = TL0;

results in even more code (31 bytes)

So I think it would be the easiest, if I could place 2 char variables at the same address, covered by my short, like:

unsigned short mINT;
unsigned char mChar[2] (at the same address like mINT)

mChar[0] = TH0;
mchar[1] = TL0;

but I don't know, how to place the mChar array at the same address of mINT. I tried it with:

unsigned char mChar[2] _at_ mINT;

but this is not possible (compiler error).

So anyone here, who could give me a hint how to place both variables at the same address?

Thanks in advance

Marco Della Rocca

Parents
  • I've been coding with C for around 10 years and don't think I ever used the keyword "short" before.
    "unsigned short mINT;"

    Is this a 16 bit value? If so, why not make it
    unsigned int mINT;

    The word "short" to me mentally implies an 8 bit variable.

    Sorry, Hate to be nitpicking but I prefer code that I understand right off the bat instead of having to pick up my C book (dont have it handy today anyway:)

    Ditto on checking out unions in C

    Andy

Reply
  • I've been coding with C for around 10 years and don't think I ever used the keyword "short" before.
    "unsigned short mINT;"

    Is this a 16 bit value? If so, why not make it
    unsigned int mINT;

    The word "short" to me mentally implies an 8 bit variable.

    Sorry, Hate to be nitpicking but I prefer code that I understand right off the bat instead of having to pick up my C book (dont have it handy today anyway:)

    Ditto on checking out unions in C

    Andy

Children
More questions in this forum