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

scater file problems

Hi
I am using uvision to develop code for LPC1768. my code is not small but I am sure I have lots of unused SRAM and I have assigned enough heap and stack

But I have a problem. Some of my variables get values other than what they should have. For example a variable that I set it 1 in timer interrupt (and define it volatile when declaring it), is having 0 value when is referred to in code, etc

When these problems happen, I define the variable in a specific address, like this

unsigned char Flash_write_values[512] __attribute__((at(RAM_BaseAddress + 0x5000)));
unsigned char Flash_Data[512] __attribute__((at(RAM_BaseAddress + 0x5200)));
volatile unsigned char  SMS_QueueActive __attribute__((at(RAM_BaseAddress + 0x5A04)));

Now that my code is getting bigger, this problem is occurring more frequently.
Maybe I should define all my variables in specific addresses. What is your opinion?

I started studying linker manuals to learn how to create scatter files, but it seems the manuals are too large and not enough simple to work/start with

How do you suggest me to proceed?
Thanks in advance

Parents
  • In more tests, I noticed when I change some local variables to global variables, the problems happen less
    Local vs global is almost certainly the wrong distinction. The only aspect that would be important is automatic vs. static storage duration.

    Maybe the problem is "stack overflow"
    But I have set the stack size an enough big number in configuration wizard of lpc17xx_startup.s

    Those two statements contradict each other to some extent. Either you know your stack is big enough, or you don't. There's not really any middle ground.

    That said, I'm afraid you're still jumping to conclusions. Forget about the scatter file. Forget about the stack size, at least for the moment. You have to diagnose this properly, instead of doing essentially random modifications to the code and hoping they'll cure something.

    There is clearly something seriously wrong with your code. But so far, you have not got one step closer to knowing what the problem is. For all you've established so far, it could be anything, e.g. a wild pointer, buffer underflow, buffer overflow, stack overflow, stack underflow, misaligned data access, a misconfigured compiler (register locations wrong, ...), or any combination of those.

Reply
  • In more tests, I noticed when I change some local variables to global variables, the problems happen less
    Local vs global is almost certainly the wrong distinction. The only aspect that would be important is automatic vs. static storage duration.

    Maybe the problem is "stack overflow"
    But I have set the stack size an enough big number in configuration wizard of lpc17xx_startup.s

    Those two statements contradict each other to some extent. Either you know your stack is big enough, or you don't. There's not really any middle ground.

    That said, I'm afraid you're still jumping to conclusions. Forget about the scatter file. Forget about the stack size, at least for the moment. You have to diagnose this properly, instead of doing essentially random modifications to the code and hoping they'll cure something.

    There is clearly something seriously wrong with your code. But so far, you have not got one step closer to knowing what the problem is. For all you've established so far, it could be anything, e.g. a wild pointer, buffer underflow, buffer overflow, stack overflow, stack underflow, misaligned data access, a misconfigured compiler (register locations wrong, ...), or any combination of those.

Children
No data