I'm having a problem with a pointer to struct. I'm working with the PC16552 UART, (it has 2 UARTs), and I created a struct for each UART like this:
typedef struct _uart { uchar xdata *ucBuffer; uchar xdata *ucLineCt; uchar xdata *ucLineSt; } uart;
void int0(void) interrupt 0 { ... getByte(&Serial1); ... } void int1(void) interrupt 1 { ... getByte(&Serial2); ... } void getByte(uart *actualSerial) reentrant { unsigned char ucByte; ucByte = *actualSerial->ucBuffer; ... }
if(actualSerial == &Serial2) { if(i < 20) Dump[i++] = ucByte; }
Well, I've found something today... I was not initializing the reentrant Stack... After initializing it it works perfectly... Well, about the problem been hardware, I discarded it. It's not a time problem, because the acess time of the UART is 84ns, and I'm using a 89C52 with a 11.0592MHz Crystal. If it was the data bus, and I'd considered it, this problem will occur frequently, with all kind of data. The substitution that I'd made was put a attribution after loading data from the UART. It worked... About the pointer, I really didn't know about it, and from now, I'll observe it. But in this project, I'm not writing to these pointers. I'll check if I'm doing something similar... Thanks a lot for the help!!! A last question... What hapens exactly if you don't initialize the reentrant Stack??