This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

hard fault caused by scatter loader decompress routine

Hi

I am working with a microsemi cortex M3 ARM with uVision and ulink2 mdk 5.12 and I am getting a PRECISERR bus fault from a memory read during initialization by the scatterloader decompress routine. It is definitely trying to read a bad address. This code is created by the linker to initialize my memory/variables so its not something I have direct control over.

Here is the goofy thing, I found that I could get around getting a hard fault 1 time if after hitting the hard fault I get out of the debugger and right back in. Then I can run as long as I don't try to restart by clicking the reset button on uVision.

I don't understand why this would make any difference but it does and allowed me to work for the past few weeks although its slow and awkward.

This weekend my luck ran out and now I get that hard fault every single time I trying to run. My trick no longer works. All I did just before this started was to add 1 line of code and recompile and reload.

Here is a interesting clue. Out of desperation I recompiled my entire project and reflashed and I was able to get to Main! All I did was recompile. I did some testing and had to make one minor change to a index and recompiled and now I am back to getting that hard fault every time. None of my tricks work either.

Its still coming from the same loop in the decompress routine where it reads a address that is just below my DDR memory. 0x9FFFFEFF

It really sounds like some kind of memory alignment issue or something like that. But the clues do not seem to be related.

Why would adding or removing a few bytes from my code cause the decompress routine to hard fault?
Why did recompiling the project allow me to get past the decompress problem once?
Why does clicking reset and trying to run the same code cause the decompress to suddenly not work?
Why would getting out the debugger and back in allow it to do the decompression correctly one time?

Arrrgg.

I am totally stopped from doing any more development because the decompression code always causes a hard fault from the same address and memory access.

Has anyone experienced anything like this before?