Hi,
I have a Philips RD2 board with a memory mapped 8255 with ports A at 8000H, B at 8001H, C at 8002H and a control port at 8003H.
How do I set up my defines so that I can just refer to these memory mapped ports as PORTA, CTRLPRT etc. in a C program?
Muz
If you wanted to use a #define, it would look something like:
8255.h -- #define 8255_BASE_ADDR 0x8000 #define 8255_CTRL_ADDR (8255_BASE_ADDR + 3) #define 8255_CTRL (*(xdata volatile*)8255_CTRL_ADDR) ... // usage val = 8255_CTRL; 8255_CTRL |= 0x01;
The only virtue of this method would be portability. (And that not so much of the code, but of your skills; you don't have to figure out the current platform's idiosyncratic method of locating variables for each project.) _at_ should work just fine.
Hi Drew,
Oh, thank you. That's the kind of thing I was after.
I can't seem to make it go, though. I get a bunch of syntax errors.
Muz.
"The only virtue of this method would be portability ... _at_ should work just fine"
And the advantage of _at_ is that the tools know exactly what you're doing - so, for example, there's no risk of the Linker allocating some variable(s) at the same address...