From: Helton M. <hm...@ya...> - 2003-12-09 17:22:51
|
Hello everybody!!!! I have a simple question about the sdcc... see the function //send a block in to the serial port ! void send_block(unsigned char *buffer, unsigned char size); void main (void) { //XRAM on AT89C51RD2 xdata unsigned char *bfaux[16]; ... ... .... send_block(bfaux, 16); } To this working fine i need to do this.... void main (void) { xdata unsigned char *bfaux[16]; unsigned char *ptaux = bfaux; ... ... .... send_block(ptaux, 16); } Why the pointer in the function don't access this address in xram...? I try do to this and doesn't work...see that void send_block(unsigned char xdata *buffer, unsigned char size); void main (void) { //XRAM on AT89C51RD2 xdata unsigned char *bfaux[16]; ... ... .... send_block(bfaux, 16); } It only functioned when I created a hand(*ptaux) that receives the address from memory of bfaux.... Why? ----------------------------------- Helton Luiz Marques Linux registered user: #298262 ----------------------------------- |
From: Erik P. <epe...@iv...> - 2003-12-10 06:32:39
|
On 9 Dec 2003, Helton Marques wrote: > //send a block in to the serial port ! > void send_block(unsigned char *buffer, unsigned char size); > > void main (void) > { > xdata unsigned char *bfaux[16]; > unsigned char *ptaux = bfaux; > ... > ... > .... > send_block(ptaux, 16); > } > > Why the pointer in the function don't access this address in xram...? Your declaration "xdata unsigned char *bfaux[16]" is suspicious; it declares an array of 16 pointers. More likely you wanted an array of 16 characters? If so, use either: void send_block(unsigned char *buffer, unsigned char size); void main (void) { xdata unsigned char bfaux[16]; unsigned char *ptaux = bfaux; ... ... ... send_block(ptaux, 16); } or (a little more efficient): void send_block(xdata unsigned char *buffer, unsigned char size); void main (void) { xdata unsigned char bfaux[16]; xdata unsigned char *ptaux = bfaux; ... ... ... send_block(ptaux, 16); } Erik |