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

Writing constant to ROM

Maybe this is a simple question, but I just couldn't figure it out. Can someone tell me how to place a constant variable into the specific ROM area? I would like to be able to set a constant value at a particualr ROM area and use a pointer to get it whenever I need it.

Cheers,
Tang

Parents
  • 
    unsigned char code version _at_ 0x0006 = CODE_VERSION;
    But that's not allowed - you can't use an initialiser with the _at_ keyword.

    See p79 in the C51 User's Guide, 03.2000:
    "The following restrictions apply to absolute variable location:
    1. Absolute variables cannot be initialized.
    2. Functions and variables of type bit cannot be located at an absolute address."

Reply
  • 
    unsigned char code version _at_ 0x0006 = CODE_VERSION;
    But that's not allowed - you can't use an initialiser with the _at_ keyword.

    See p79 in the C51 User's Guide, 03.2000:
    "The following restrictions apply to absolute variable location:
    1. Absolute variables cannot be initialized.
    2. Functions and variables of type bit cannot be located at an absolute address."

Children
  • That's what I thought. I'm still dreaming of this feature for the C51.

    - Mark

  • Why does Keil have this restriction? You can do this with Raisonance and I would like to have my code be compatible with both. For Raisonance you just use:
    at 0x803d code char my_char = 0x55;

    I don't need to have a variable name created, but I would like to be able to set a byte that configures the hardware. This is a hardware configuration byte that needs to be programmed when the program is loaded. If I understand correctly there is no way to add a single statement to the Keil C program for this function. I have to link an assembly language file to do that with Keil. Is that correct?

  • "Why does Keil have this restriction?"

    Although it seems a simple enough addition apparently it will involve a major rewrite of part of the compiler.

    You can put the 'variable' in its own 'C' source file then link that as a 'user segment'. There's an example in the knowledgebase somewhere.