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
Hi again I'm sorry but it still seems that my variables are getting changed with no reason
In more tests, I noticed when I change some local variables to global variables, the problems happen less
Maybe the problem is "stack overflow" But I have set the stack size an enough big number in configuration wizard of lpc17xx_startup.s
Should I change anything else to have enough stack size?
Maybe I should define what address of RAM should be used for stack in scatter file, but I can't understand how to do this based on my studies of linker manuals ):
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.
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.