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

Memory layout of variables not in order of declaration

Using uVision 5.12.0.0 (ARM)
I need my variables to be placed in the order I declare them.
But when I look at the map-file they are not.
The types I use are unsigned) char, (unsigned) int, and arrays of these types.

Question 1: How are variables placed in memory?
Question 2: How can I control the order, there is no #pragma ORDER (as was in C166)?
Question 3: Any alternatives, besides placing them in a structure?

Thanks.

Parents
  • But packed structs are quite often very painful.

    If mapping on top of hardware, then the hardware registers are normally properly aligned to avoid the need for strange packed constructs.

    When handling protocols, it's often better to use own source code working with a void* or uint8_t* pointer for building/decoding packets, since that also takes care of byte order.

    Another issue when having packed structs mapped to hardware is the implication of volatile underlying registers assumed to be accessed using a single read or a single write. Or assuming that maybe low word must be accessed before high word - or reversed - to latch and read out a wide value.

Reply
  • But packed structs are quite often very painful.

    If mapping on top of hardware, then the hardware registers are normally properly aligned to avoid the need for strange packed constructs.

    When handling protocols, it's often better to use own source code working with a void* or uint8_t* pointer for building/decoding packets, since that also takes care of byte order.

    Another issue when having packed structs mapped to hardware is the implication of volatile underlying registers assumed to be accessed using a single read or a single write. Or assuming that maybe low word must be accessed before high word - or reversed - to latch and read out a wide value.

Children
No data