On Tue, Mar 10, 2009 at 2:44 PM, David Brown <david.br...@hesbynett.no>wrote:

> As I've told you before, if you think there is something odd about the
> generated assembly code, no one can give you more than very general guesses
> unless you post a minimal compilable code snippet.


Given that this is something that comes and goes, and I have not had any
luck figuring out the dependency, I don't know how I could deliberately
generate code to reproduce it.


>
> At first glance, I agree with Eric - I think you probably have a mixup
> between word addresses and byte addresses and the generated code is correct
> (i.e., the call is to *byte* address 0x62c, while the lcd_init routine is at
> *word* address 0x62c).


The call is going to the bottom of the LCD_Init routine, I can step it
through in the disassembler.  Also, the C function is always returning the
value "9", even when the input data is 0.

The line in question is:
Bin = (New_A_Data / (Raw_Samples / Sample_Bins));

New_A_Data is in RAM, so I can set it to 0, or any other value.
Raw_Samples is a constant, 512
Sample_Bins is a constant, 32

No matter how you slice it, nine should never be the result of (0 /
(constant1 + constant2))



> gcc likes to think in terms of byte addresses, while avr studio (I'm
> guessing that's what you are using) will probably show things in flash with
> word addresses.


I don't completely understand, but single-stepping the code gives me the
results that I expect everywhere else.


> As well as the assembly files listing suggested by Eric, generate a map
> file and look at that - it might give you a clue.
>
I'll try.
_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to