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

Question about sbit definitions

Hi,

I am using the Keil uVision 2 software to develop a firmware driver. I have one technical related to the sbit definitions.

Lets say i have couple of sbit definitions as follows:

sbit JTAG_TDO = 0xB0+0;
sbit ALT_JTAG_TDO = 0x80+0;

In the course of program execution, based on some condition I want JTAG_TDO point to the ALT_JTAG_TDO pin so that whatever i write to JTAG_TDO gets written to ALT_JTAG_TDO at the port address 0x80+0 instead of the original 0xB0+0.

I tried doing &JTAG_TDO = &ALT_JTAG_TDO and that raised a compiled error.

Please let me know how to dynamically change the port pin addressing?

Parents
  • To dredge up an ancient forgotten evil: self-modifying code.

    If you have von Neumann memory (that is, you can write to your program store), and know the address of the instruction that accesses the pin, you can overwrite the byte that contains the bit address so that the instruction fetches from different bits.

    If you do such a thing, I'd recommend writing the fetching routine in assembly so that you can exactly control the instruction sequence. You'll also need giant screaming comments that the source you see is not the code that actually gets run, with a reference to place that changes it.

Reply
  • To dredge up an ancient forgotten evil: self-modifying code.

    If you have von Neumann memory (that is, you can write to your program store), and know the address of the instruction that accesses the pin, you can overwrite the byte that contains the bit address so that the instruction fetches from different bits.

    If you do such a thing, I'd recommend writing the fetching routine in assembly so that you can exactly control the instruction sequence. You'll also need giant screaming comments that the source you see is not the code that actually gets run, with a reference to place that changes it.

Children
No data