We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
What kind of error could it be, if one register gets a address value causing a data abort. Because this value is in the undefinend area.
I wrote the code in c and I set a breakpoint befor the part, where the data abort occur. But when I step through this part of code I get the right value for this register and no data abort will occur.
So I think the code must be ok, but which side-effect could cause such a error?
Gerd
now I installed a additional printf() function, and the error is gone but now I'm not able to start the main.c function at the beginning after the startup code. It always starts the senc_character function for the printf() function. My stack size is large enough.
Hello Gerd Emar,
Please read knowledgebase article http://www.keil.com/support/docs/3080.htm . This article explains how to analyze a Data Abort Exception.
Best Regards, Martin Guenther
thanks for the hint, but "Show Source Code for the current address" is not available, when I click right in the assembly window.
the current address for the data abort is e.g. 0x2000DD29
in the assembly window:
0x2000DD29 00000000 ANDEQ R0, R0, R0
I think there's a data overflow, because my printf function shows strange values
int fputc(int ch, FILE *f) { return (COM1_Sendchar(ch)); }
In the stack window I can read that f should have the value / address 0x00000000 and ch is 0xFFFFFFFF
one question for my better understanding.
there's the stack top (at 0x00200588); I write a pattern from this address to lower addresses - to see if the stack size is enough. And the stack is really enough.
I check the values and I could see that above the stack top is a area with oxFF( in the internal RAM) following a part of 0x00 and then I could see a few values, stored at the end of the sram.
When I 'start this pattern from the last address of the sram to the stack top, then I'm not able to start my program, because I got immediately a dara abort. Moreover if I take a look into the call stack window then main is never called. Another function fputc for printf() is called...
ok now I see that I'm not able to write my pattern at the end of the internal ram - but where could I see which values are stored in this region? I can't see anything in the map file.