| ??? 04/08/09 07:02 Read: times |
#164474 - Unnecessarily complicated! Responding to: ???'s previous message |
Mahesh Joshi said:
xdata unsigned char at 0x4000 MY_8255_BASE[4]; //MY_8255_BASE[4] represents Port-A, Port-B, Port-C & Control Registor of 8255 Exactly: Accessing MY_8255_BASE[0] accesses the Port-A Register of the 8255; Accessing MY_8255_BASE[1] accesses the Port-B Register; Accessing MY_8255_BASE[2] accesses the Port-C Register; Accessing MY_8255_BASE[3] accesses the Control Register. The array alone gives you access to all the registers! So what is the point of adding a pointer:
unsigned char *ptr_8255;
void init_8255(unsigned char control_word)
{
ptr_8255 = MY_8255_BASE;
*(ptr_8255 + 3) = control_word;
}
It just adds an unnecessary level of indirection - to no benefit! Wouldn't it be far simpler & clearer to just write:
void init_8255(unsigned char control_word)
{
MY_8255_BASE[3] = control_word;
}
You could also make it clearer by defining symbolic names for the array indexes; eg,
enum
{
PPI_PORT_A = 0, // Index for Port-A
PPI_PORT_B = 1, // Index for Port-B
PPI_PORT_C = 2, // Index for Port-C
PPI_CONTROL = 3 // Index for the Control register
}
And then have:
void init_8255(unsigned char control_word)
{
MY_8255_BASE[ PPI_CONTROL ] = control_word;
}
Which doesn't even really need to be in a function call... |
| Topic | Author | Date |
| How to access memory mapped 8255 with SDCC? | 01/01/70 00:00 | |
| also asked here: | 01/01/70 00:00 | |
| 8255 with SDCC | 01/01/70 00:00 | |
| Wrong question? | 01/01/70 00:00 | |
| It's C | 01/01/70 00:00 | |
| not on the 8051 | 01/01/70 00:00 | |
| Oh yes it is! | 01/01/70 00:00 | |
| Use XBYTE macro | 01/01/70 00:00 | |
| Isn't there a problem with that? | 01/01/70 00:00 | |
| Oops. I used a wrong example | 01/01/70 00:00 | |
| Portability | 01/01/70 00:00 | |
| like this... | 01/01/70 00:00 | |
| How about a macro in ASM, callable from 'C'? | 01/01/70 00:00 | |
| This is HOW I will Prefer | 01/01/70 00:00 | |
| LST output of my previously posted code | 01/01/70 00:00 | |
| Try the comparison | 01/01/70 00:00 | |
| Unnecessarily complicated! | 01/01/70 00:00 | |
| NOT UNNECESSARILY | 01/01/70 00:00 | |
| You are mistaken | 01/01/70 00:00 | |
| Array or pointer similar | 01/01/70 00:00 | |
| That should not be necessary | 01/01/70 00:00 | |
| SFRX(...,. ..) worked | 01/01/70 00:00 | |
| SFRX - presumably, that's an SDCC extension? | 01/01/70 00:00 | |
| Found it! | 01/01/70 00:00 | |
RE: Found it! | 01/01/70 00:00 |



