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

Memory overflow problem

Hi all,

I'm using 89C52 controller in my application. I'm using a 90 byte buffer to store received message from UART. Based on this received message I'm controlling I/O ports. The same buffer I'm using for transmitting the application dependent internal status message.

To identify the message I'm using absolute address position for example, if(arr[59] == '*'){do something;}

every first message after reset this is working fine. After that the control hangs somewhere thus its giving undetermined behavior.

I set the memory model as Large: all variables in XDATA.

I hope some address overflow is happening here.

Can anyone help me to resolve this issue.

Thanks in Advance.

Regards,
Ramesh

Parents
  • Here is my code fragment:

    #include<serial.h>
    #include <AT89X52.H>
    unsigned char message[35];
    unsigned char Request[35]; main()
    { unsigned char i,j,;

    Init_Uart(); // UART functionlity working fine with 9600 baud while(1) { for(i=0;i<=35;i++) { message[i]=RX_CHAR(); //Rx buffer for first 35 char's controll waits here for incoming char process=1; }

    if(process==1) {

    if(message[25]=='*') // I'm sure that this characters are 26th character always from transmitter {pass =1; TestLED=ON;} else if(message[25]=='#') {pass =0;TestLED=OFF;} process =0; }

    if(pass==1) { for(j=0;j<=35;j++) { Request[j]= 'A';

    } Send_Str(Request); // Request array is transmitted Note this subroutine is tested working correctly

    } else if( pass==0) { for(j=0;j<=35;j++) { Request[j]= 'B';

    } Send_Str(Request); // Request array is transmitted }

    } }

    Please suggest.

Reply
  • Here is my code fragment:

    #include<serial.h>
    #include <AT89X52.H>
    unsigned char message[35];
    unsigned char Request[35]; main()
    { unsigned char i,j,;

    Init_Uart(); // UART functionlity working fine with 9600 baud while(1) { for(i=0;i<=35;i++) { message[i]=RX_CHAR(); //Rx buffer for first 35 char's controll waits here for incoming char process=1; }

    if(process==1) {

    if(message[25]=='*') // I'm sure that this characters are 26th character always from transmitter {pass =1; TestLED=ON;} else if(message[25]=='#') {pass =0;TestLED=OFF;} process =0; }

    if(pass==1) { for(j=0;j<=35;j++) { Request[j]= 'A';

    } Send_Str(Request); // Request array is transmitted Note this subroutine is tested working correctly

    } else if( pass==0) { for(j=0;j<=35;j++) { Request[j]= 'B';

    } Send_Str(Request); // Request array is transmitted }

    } }

    Please suggest.

Children