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

Compiler internal variables

Hello all,

In my application I need to access to the value that Stack is initialized, in general C51 does it in the startup code:

MOV SP,#?STACK-1

What I need is to be able to use later on in my code the value "?STACK-1" and copy it to other variable.

Thanks for your help in advance!
Alfredo M.

Parents Reply Children
  • Hello,
    First of all thanks to everybody for your help, I think this deserves a deeper explanation of what I am trying to do, which is not easy but so far goes fine, I have a bootloader receiving data (application program) by serial port using INTERRUPTION, that's my bootloader, an int routine (there is more but no worth to comment). This int routine is performing different funtions as soon as datas are received:

    - Charging application program and jumping to it to execute.
    - Making software reset.
    - Charging a new received program while other application one is running and replace it.
    - Charging program from serial eeprom.
    …. Many other things.

    Therefore my int routine has to be executable at anytime.That is the reason whenever I jump to application I can not leave application to initialize the pointer in the way that overwrite my variables used in the serial isr, (an obj file of the bootloader is included in the application adding only the global definitions) but there is not startup routine in the application cause the definition is already in the obj file of the bootloader and because I can not change the variable used in the serial isr, since I have not startup in the application I have to initialize the stack pointer by myself and leave it at the same point were the bootloader initialized it !! (here is the point ! ). Do you still follow me? Now you know why I did not explain it from the beggining.

    Just an answer to Neil, as far I understood, the stack pointer grows up to higher address, therefore it has to be initialized following the variables in our program therefore as more you have higher will be the value where the pointer is initialized.

    About the answer of Oleg I will try as soon as possible.

    Regards,
    Alfredo.

  • "Do you still follow me? Now you know why I did not explain it from the beggining."

    It didn't need all that explanation. You asked how to get the value of the stack pointer. At entry to main(), SP contains the result of the MOV SP,#?STACK-1. You can read and write SP. Simple. You don't even need access to the stack area's name. But do it however you want.

  • Hi,
    The things is that you missundertood me, what I need is NOT the value of SP, but the value to which it is initiated at the very begging in the startup code, which is not a variable but a constant value called "#?STACK-1" in the startup file.

    Thanks for you effort,
    Alfredo.

  • Ok,

    Finaly I got it!! thanks a lot everybody for your help especially to Oleg, it worked in the way he said.

    Alfredo M.

  • "The things is that you missundertood me..."

    No, the thing is that you are not able to understand such a simple thing. OK, I'll be the first to say "you don't get it" and "I don't particularly care anymore" -- and neither do you since you are on your way now!

  • You dont have to be so upset,

    You mean to keep the value in a varible an use it later, isnt it? but it should be possible to do it without memory usage since it is only a constant definition.

    I am sorry if I am so stupid and we dont understand, lets stop here since the forum is not a e-mail account for msgs.

    Anyway thanks for your help one more time.