Carl,
If your stack ends up in flash then you might have a problem with the
linker description file or somewhere in the initialisation routines.

Nico Coesel


At 15:08 20-2-2010 -0800, [email protected] wrote:
> I don't think the optimizer is not removing code or variables when -O0.
When stepping through with gdb if you try to display a variable that is
optimized out, it notifies you by displaying <optimized out>. This is not
happening.
>
>I've tried declaring a global variable it works as expected.
>
>The problem I'm observing is when a variable is on the stack.
>
>The code I'm posting is for example only in trying to illustrate a problem
in my code where the stack variables are being used but do not have the
expected values. When stepping through with gdb, the stack variables are is
flash. I have assert statements in my code that catch this even when not
using gdb.
>
>I can post a bigger example if that will help.
>
>Carl
>
>
>On Sat, 20 Feb 2010 23:49:57 +0100
> "N. Coesel" <[email protected]> wrote:
>>Try this first:
>>
>>volatile int i;
>>
>>int main()
>>{
>>    while(1)
>>    {
>>        i++;
>>    }
>>}
>>
>>
>>IMHO you are chasing a dead horse because the optimizer is removing code
>>that doesn't do anything. Inside main, the scope of the variable is limited
>>to main so volatile probably doesn't mean anything.
>>
>>
>>At 14:16 20-2-2010 -0700, Carl wrote:
>>>If I declare it as a global it is where I expect at the beginning of RAM
>>>(0x1100). But if it is on the stack in the main function, even if I
>>>declare it volatile, use asm(""); // __asm__ __volatile__ (""); or pass
>>>it to a function, the variable address is in flash at 0x3102. It doesn't
>>>make sense.
>>>
>>>Now if I use the program:
>>>
>>>#include <io.h> 
>>>
>>>int f1()
>>>{
>>>    volatile int i = 5;
>>>    i += 2;
>>>    return i;
>>>}
>>>
>>>int main()
>>>{
>>>    while(1)
>>>    {
>>>        f1();
>>>    }
>>>}
>>>
>>>The variable i address is on the stack in RAM at 0x30f8 which makes
>>>sense. But if I change the compile option to use -02. Then the function
>>>stack variable, i, goes back to being located in flash at 0x3102. And
>>>it's value is not initialed to 5 nor is 2 added to it. The value of i is
>>>constant = 12544 (0x3100.)
>>>
>>>I noticed at new version of mspgcc4 is out as of Feb 18, 2010. I've
>>>tried to install it on both a Fedora 9 and a Ubuntu machine but get the
>>>same error:
>>>
>>>Failed to execute sh do-gcc.sh "/opt/msp430-gcc-4.4.3" "4.4.3"
>>>"http://ftp.uni-kl.de"; "build" "gcc-4.x" "4.3.1" "2.4.1"
>>>at ./buildgcc.pl line 237, <STDIN> line 9.
>>>
>>>
>>>Carl
>>>
>>>
>>>
>>>On Sat, 2010-02-20 at 09:08 +0100, N. Coesel wrote:
>>>> Carl,
>>>> 
>>>> Try to declare it outside the function (as a global).
>>>> 
>>>> At 19:43 19-2-2010 -0800, you wrote:
>>>> >I tried declaring as volatile and it is at the exact same address.
>>>> >
>>>> >Carl
>>>> >
>>>> >On Sat, 20 Feb 2010 01:35:03 +0000
>>>> > "Wayne Uroda" <[email protected]> wrote:
>>>> >>try declaring i as volatile, or the compiler will probably get rid
of it
>>>> since it has no effect or side-effect.
>>>> >>Sent via BlackBerry from Vodafone
>>>> >>
>>>> >>-----Original Message-----
>>>> >>From: Carl <[email protected]>
>>>> >>Date: Fri, 19 Feb 2010 18:29:03 
>>>> >>To: <[email protected]>
>>>> >>Subject: [Mspgcc-users] stack variable in flash?
>>>> >>
>>>> >>I'm sure that I'm missing some basic here but I'm not sure what. The
>>>> >>first variable on the stack is in an unexpected location. I would
expect
>>>> >>it to be located somewhere on the stack in RAM (0x30ff-0x1100) but
it is
>>>> >>located in flash memory and it does not get set or incremented.
>>>> >>
>>>> >>
>>>> >>#include <io.h>
>>>> >>
>>>> >>int main()
>>>> >>{
>>>> >>    int i=0;
>>>> >>    while(1)
>>>> >>        i++;
>>>> >>}
>>>> >>
>>>> >
>>>
>>>
>>>
>>>---------------------------------------------------------------------------
>>---
>>>Download Intel&#174; Parallel Studio Eval
>>>Try the new software tools for yourself. Speed compiling, find bugs
>>>proactively, and fine-tune applications for parallel performance.
>>>See why Intel Parallel Studio got high marks during beta.
>>>http://p.sf.net/sfu/intel-sw-dev
>>>_______________________________________________
>>>Mspgcc-users mailing list
>>>[email protected]
>>>https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>>>
>>>
>>
>>--------------------------------------------------------------------------
----
>>Download Intel&#174; Parallel Studio Eval
>>Try the new software tools for yourself. Speed compiling, find bugs
>>proactively, and fine-tune applications for parallel performance.
>>See why Intel Parallel Studio got high marks during beta.
>>http://p.sf.net/sfu/intel-sw-dev
>>_______________________________________________
>>Mspgcc-users mailing list
>>[email protected]
>>https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
>
>---------------------------------------------------------------------------
---
>Download Intel&#174; Parallel Studio Eval
>Try the new software tools for yourself. Speed compiling, find bugs
>proactively, and fine-tune applications for parallel performance.
>See why Intel Parallel Studio got high marks during beta.
>http://p.sf.net/sfu/intel-sw-dev
>_______________________________________________
>Mspgcc-users mailing list
>[email protected]
>https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
>

Reply via email to