Hello!
I declared 3d array in my Keil project for lpc1788: volatile uint16_t db[16][128][3]. When I read members of the array db[x][y][z] with z < 1 there is no problem. But if I try to read members with z >=1 I always get 0xFFFF, even if they are not equal 0xFFFF (I checked it in debugger). For example:
db[0][1][0] = 0x1515; uint16_t id_ = db[0][1][0]; //works fine, id_ is equal 0x1515 db[1][0][1] = 0x1515; uint16_t index_ = db[1][0][1]; //returns index_ equal 0xFFFF
Could anybody explain to me what's wrong?
Regars, Vasilij.
> You've assumed that the 3D array is global.
Your'e right, I assumed wrongly. Modifying the code in a way that the 3D-array is defined inside a function and setting stack size smaller than the array size caused a program to fail. Anyway, nothing wrong with the compiler, except it would be useful if the tools can detect such a condition...
- Dejan
Only the OP can confirm whether your assumption was correct or not!
Again, that's why the OP needs to provide the example!
"3D-array is defined inside a function and setting stack size smaller than the array size caused a program to fail"
This shows one possible failure mechanism - it may or may not be the particular failure mechanism that the OP is experiencing...
"would be useful if the tools can detect such a condition..."
That would be quite difficult, as the tools don't have full knowledge of the operating environment.
However, Keil does provide an analysis of the stack usage of functions
http://www.keil.com/support/man/docs/armcc/armcc_cjaiidcg.htm