On Thu, Mar 06, 2003 at 12:33:16PM -0500, Mark Stokes wrote:
> I've been pulling my hair out about an auto increment problem.  I
> finally realized the following statement wasn't acting as I expected it
> to:
> 
> Unsigned char ReadByte( unsigned int *address )
> {
> unsigned char data;
> 
>     // Setup read from memory chip (SPI)
> 
>     E2DISABLE;      // End Read operation
>     // Auto increment address the proper number of bytes
>     *address++;
>     return data;
> }
> 
> I expected the contents of memory that address pointed to be incremented
> one.  But when I check the .lst file, I get this:
> ...
>     E2DISABLE;      // End Read operation
>     1b88:     d2 d3 19 00             bis.b   #1,     &0x0019
>     *address++;
>     return data;
>     1b8c:     4f 4e                   mov.b   r14,    r15     ;
> ...
> 
> Nothing came out at all!!! And no warnings.  When I changed the line to
> read:
>     // Auto increment address the proper number of bytes
>     *address += 1;    
> I got the desired result:
>     *address += 1;
>     1b8e:     9e 53 00 00             inc     0(r14)          ;
> Is this a bug?

I don't think it is a bug:

In the first case: * address ++; will do the folowing:

It will take data, that address was pointing to, and throw it out,
then it will increment address.

The second: * address += 1; will take data pointed by address,
increment and restore the result in place that address is pointing to.


> -Mark Stokes
> 
> 
> 
> -------------------------------------------------------
> This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger 
> for complex code. Debugging C/C++ programs can leave you feeling lost and 
> disoriented. TotalView can help you find your way. Available on major UNIX 
> and Linux platforms. Try it free. www.etnus.com
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to