Thanks a lot for MSPGCC. It's a really good solution to develop a software on a MSP430.
I just need some help because I worked 3 days on this bug: all local var in main() are not corrects in debug.
Configuration:
- Windows 7
- Eclipse Indigo Service Release 1
- msp430-gcc 4.6.1 (Package mspgcc-20111224-experimental)
- C/C++ GCC Cross Compiler Support 1.0.0.201109151620
- C/C++ GDB Hardware Debugging 7.0.0.201109151620
- MSP-FET430UIF with MSP430.dll developper package rev 3.02.01.009 from TI (MSP430.dll 3.2.1.9 and HIL.dll 1.2.6.0)
- MSP430-gdbproxy.exe (14-11-2006)
I did tests with another version of Eclipse: Helios but it was the same problem.
Description:
Example 1
#include <msp430.h>
unsigned short e = 0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
while(1)
{
e++;
}
return 0;
}
This example give the correct value of e in debug.
Example 2
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
unsigned short e = 0;
while(1)
{
e++;
}
return 0;
}
This example give a wrong random value of e in debug.
Example 3
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
unsigned short e = 0;
unsigned short i = 1;
unsigned short c = 2;
while(1)
{
e++;
i++;
c++;
}
return 0;
}
This example give wrong values for e, i and c but I see i = e and c = i in debug. There is a shift of 1 in the vars.
Example 4
If I create a new function:
void test()
{
unsigned short y = 0;
y++;
}
I call it into the main function. In this case, I can see the correct value for the local var y in debug.
Conclusion
I try to correct this bug with all version of mspgcc MinGW provided on sourceforge but it was still the same think.
The only solution I found is to use mspgcc4 (older version: mspgcc4-20110312.zip). With this version, I don't have a shift in my variables in debug but I can't use the latest microcontrollers provided by TI.
Thanks in advance for your help.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I believe you have rediscovered this bug. Workarounds should include enabling optimization, or moving the code to a different function and calling it from main().
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Did you tried to set
unsigned short e=0;
before
WDTCTL = WDTPW + WDTHOLD;
?
I am using CCE 3. I do know the thing, but I do not know why.
The declaration could not be put in the middle of the function.
Maybe it is the same problem.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello,
Thanks a lot for MSPGCC. It's a really good solution to develop a software on a MSP430.
I just need some help because I worked 3 days on this bug: all local var in main() are not corrects in debug.
Configuration:
- Windows 7
- Eclipse Indigo Service Release 1
- msp430-gcc 4.6.1 (Package mspgcc-20111224-experimental)
- C/C++ GCC Cross Compiler Support 1.0.0.201109151620
- C/C++ GDB Hardware Debugging 7.0.0.201109151620
- MSP-FET430UIF with MSP430.dll developper package rev 3.02.01.009 from TI (MSP430.dll 3.2.1.9 and HIL.dll 1.2.6.0)
- MSP430-gdbproxy.exe (14-11-2006)
I did tests with another version of Eclipse: Helios but it was the same problem.
Description:
Example 1
#include <msp430.h>
unsigned short e = 0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
while(1)
{
e++;
}
return 0;
}
This example give the correct value of e in debug.
Example 2
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
unsigned short e = 0;
while(1)
{
e++;
}
return 0;
}
This example give a wrong random value of e in debug.
Example 3
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
unsigned short e = 0;
unsigned short i = 1;
unsigned short c = 2;
while(1)
{
e++;
i++;
c++;
}
return 0;
}
This example give wrong values for e, i and c but I see i = e and c = i in debug. There is a shift of 1 in the vars.
Example 4
If I create a new function:
void test()
{
unsigned short y = 0;
y++;
}
I call it into the main function. In this case, I can see the correct value for the local var y in debug.
Conclusion
I try to correct this bug with all version of mspgcc MinGW provided on sourceforge but it was still the same think.
The only solution I found is to use mspgcc4 (older version: mspgcc4-20110312.zip). With this version, I don't have a shift in my variables in debug but I can't use the latest microcontrollers provided by TI.
Thanks in advance for your help.
I believe you have rediscovered this bug. Workarounds should include enabling optimization, or moving the code to a different function and calling it from main().
Thanks Pabigot for the link and the workaround.
I created a __main() function into main().
In this case, the debug works correctly with local vars.
Best Regards
By Curiosity, I put levels of O1, O2, O3 and OS for the optimization.
In this case, I can not debug correctly.
The pointer is still blocked on the first instruction (WDTCTL = WDTPW + WDTHOLD;) in the main function.
The conclusion is I can use only the __main() solution.
Did you tried to set
unsigned short e=0;
before
WDTCTL = WDTPW + WDTHOLD;
?
I am using CCE 3. I do know the thing, but I do not know why.
The declaration could not be put in the middle of the function.
Maybe it is the same problem.