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

const placed in DATA segment

Hi All,
when I write:
const char mysting[] ={"my string"};

data are placed to DATA segment, not code sement. I know if it would be written like this:

code char mysting[] ={"my string"};

data will be placed in code segment. What I have to do for automatic placing const data to code segment? I did it by #define const code
But may be other ways are exist.

Thanks,
Vladimir

Parents
  • The compiler should not place the data in ROM because you may want to place a memory mapped read-only register in XDATA space. Thus if you were force into code space you could not read the register. By allowing const to do exactly what it does in ISO/ANSI C, Keil has allowed us to enforce compile-time read-only attributes while having the freedom of placing the read-only variable in any data space.

    Another example, in the assembler startup routine you calculate a "first available memory" location for malloc and write it to an address for malloc to use. Malloc() declares that external variable as const but the variable must be in a writable memory space for the C startup module to be able to set it.

    In the end, tell C51 exactly where you want everything to go. I put memory space qualifiers on every single variable I define. I am never surprised when I look in the map file.

    - Mark

Reply
  • The compiler should not place the data in ROM because you may want to place a memory mapped read-only register in XDATA space. Thus if you were force into code space you could not read the register. By allowing const to do exactly what it does in ISO/ANSI C, Keil has allowed us to enforce compile-time read-only attributes while having the freedom of placing the read-only variable in any data space.

    Another example, in the assembler startup routine you calculate a "first available memory" location for malloc and write it to an address for malloc to use. Malloc() declares that external variable as const but the variable must be in a writable memory space for the C startup module to be able to set it.

    In the end, tell C51 exactly where you want everything to go. I put memory space qualifiers on every single variable I define. I am never surprised when I look in the map file.

    - Mark

Children