When I debug \Keil\ARM\RV30\RTL\Kernel\Examples\Measure\Measure.uv3,I want watch "cmdbuf[]" in Watch & Call Stack Window,when I use SARM.dll V1.5,watch data was right,but when I use SARM.dll V3.x,watch data was wrong.
Hi I posted too soon. The Watch does appear to be improved, the locals seem to work now where as before they didn't. But now if put a breakpoint after a string activity such as
char cmdbuf [30];
bla bla for (i = 0; cmdbuf[i] != 0; i++) { cmdbuf[i] = (char) toupper(cmdbuf[i]); }
and I hover over string arrays I get a stange looking yy which has two dots above each y. I had been playing with some string manipulation software just before the upgrade. I could see the string contents fine.....
However if I change the declaration to
static char cmdbuf [30];
Things are fine again. I also wish that in the "locals and watch#x" windows that they had ascii as well as decimal and hex.
Static works, thanks..
But there are other problems. I made this function:
void Main_make_sprintf_work(char * str) { static char str_local[40]; sprintf(str_local, "%f" ,2.45); memcpy(str, str_local, 10); }
It works when I call it from main() but don't work if the call come from a function further inside the program.
In what way does it "not work"?
When I call Main_make_sprintf_work(char * str) from a task, str_local don't contain the right string.
After adding 500 bytes to the stack (now 1500 bytes) it writes "2" in Str_local.
I think its strange it did not detect any stack overflow and why do it need so much stack?
The problem was that I had an RTX_Config file for V3.02 and my IRQ and USR stack size was too small.