AW: Re: Digest from [email protected]

"Mark Butcher" <[email protected]> Mon, 15 Sep 2008 17:33:07 +0200
Newsgroups gmane.comp.hardware.motorola.microcontrollers.coldfire
Message-ID <000301c91748$5aad70d0$10085270$@com>
Hi Bob

It is normal that arithmetic operations will extend (or sign extend) but
this should not cause any problems. Sign extending from signed to unsigned
or unsigned to signed can of course cause errors but as long as the compile
know the types (which it does . i.e. that you define these as you need them)
there shouldn't be any problems.

It is correct to zero extend an unsigned short to unsigned long.
When extending a signed short to signed long it will depend on the first bit
- if it is zero it will zero extend. If it is 1 it will one extend (to keep
it negative).
I don't understand the problem at the moment and I think that in your case
you should really work with unsigned values (the pulse samples are always
positive values). If you are getting a sign extension to a negative number
this is very unexpected and points to an intermediate variable with
un-matching type. I have used CW for a couple of years in a number of
projects and never had any difficulties of this nature.

Perhaps it would be useful to show the C and assembler in this specific
case. You can right click the file in the CW explorer and right mouse click
to get the context menu and the disassemble command. Then there will be C
and assembler mixed, which could throw light on the matter.

Regards

Mark



-----Ursprüngliche Nachricht-----
Von: [email protected] [mailto:[email protected]] Im
Auftrag von Robert Ritchey
Gesendet: Montag, 15. September 2008 16:33
An: [email protected]
Betreff: [ColdFire] Re: Digest from [email protected]

Hi Mark,
Thanks for that too.  I am afraid I am mostly a 
hardware guy so this is about the
only C compiler I have right now. In the past I 
did most of my work in assembly
on the MSP430.

Which brings me to one last question if I could 
impose.  Basically what I am doing
here is capturing a pulse by a time to determine 
the pulse width.  I capture the
rising and falling edges on a counter that is modulo 16 bits.  The MSP430 is
a
16-bit machine so to get the pulse width I just 
subtracted the falling edge from the
rising edge value and got a positive value.  The 
reason I went to signed shorts on
the coldfire is that I saw in the assembly it was 
loading the shorts with zero extend
and then doing a 32-bit subtract.  I don't think 
this will give me the correct value so
I went to signed shorts and it does.  You 
suggested going to unsigned shorts but
I don't think this will work.  Am I missing something simple here?   Thanks,

At 12:00 AM 9/15/2008 -0500, [email protected] wrote:
>From: "Mark Butcher" <[email protected]>
>To: <[email protected]>
>Subject: AW: [ColdFire] Re: Digest from  [email protected]
>Date: Sun, 14 Sep 2008 22:57:40 +0200
>
>Hi Bob
>Just a side note. I work with several compilers and the CW warnings are in
>fact quite extreme and I do in fact keep them off since otherwise the
>casting required also becomes rather extreme.
>My solution is to compile the project with GCC and Visual-Studio
C-compilers
>and ensure that they don't give any warnings - assuming that this is the
>case, then I am satisfied.
>Regards
>Mark
>
>
>
>-----Ursprüngliche Nachricht-----
>Von: [email protected] [mailto:[email protected]] Im
>Auftrag von Robert Ritchey
>Gesendet: Sonntag, 14. September 2008 16:44
>An: [email protected]
>Betreff: [ColdFire] Re: Digest from [email protected]
>
>Hi Mark,
>Thank you very much for the detailed explanation.  Its very clear now.
>I think with this help I can make some informed decisions on how to
>declare variable types.
>
> >
> >typedef struct
> >      {
> >      short            RiseEdge;                       /* Pulse rising
> >edge time                       */
> >      short            FallEdge;                       /* Pulse
> >falling edge time                      */
> >      } ChanInStruct;
> >
> >bool TxPulseOffset(short *Offset)
> >{
> >      short   PulseWidth;
> >                     /* Pulse width                          */
> >      PulseWidth = (short)(pRxChannelInput->FallEdge -
> >pRxChannelInput->RiseEdge);        /* Pulse width is falling minus rising
>*/
> >}

-Bob
--------------------------------------------------------------------
Robert Ritchey
Quest Engineering & Development, Inc.
Suite B/8
6125 South Ash Avenue
Tempe, AZ 85283
Tel: (480) 460-2652
FAX: (480) 460-2653
E-Mail: [email protected]
E-Mail: [email protected]
E-Mail: [email protected]
E-Mail: [email protected]
WWW: www.QuestEngDev.com/
WWW: www.Smart-Fly.com/
-------------------------------------------------------------------- 

---
[email protected]              Send a post to the list.
[email protected]        Join the list.
[email protected]    Join the list in digest mode.
[email protected]     Leave the list.

---
[email protected]              Send a post to the list.
[email protected]        Join the list.
[email protected]    Join the list in digest mode.
[email protected]     Leave the list.