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 the code again..

    #include<serial.h>
    #include <AT89X52.H>

    unsigned char message[35];
    unsigned char Request[35];

    main()
    { unsigned char i,j;

    // UART functionlity working fine with 9600 baud

    Init_Uart();
    while(1)
    { for(i=0;i<=35;i++)

    {

    //Rx buffer for first 35 char's
    // controll waits here for incoming char

    message[i]=RX_CHAR();
    process=1;

    }

    if(process==1)

    {

    // I'm sure that this characters are 26th
    // character always from transmitter

    if(message[25]=='*')

    {

    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';

    }

    // Request array is transmitted Note this
    // subroutine is tested working correctly.

    Send_Str(Request);
    }

    else if( pass==0)

    {

    for(j=0;j<=35;j++)

    {

    Request[j]= 'B';

    }

    Send_Str(Request);

    }
    } }

    Thanks

Reply
  • Here is the code again..

    #include<serial.h>
    #include <AT89X52.H>

    unsigned char message[35];
    unsigned char Request[35];

    main()
    { unsigned char i,j;

    // UART functionlity working fine with 9600 baud

    Init_Uart();
    while(1)
    { for(i=0;i<=35;i++)

    {

    //Rx buffer for first 35 char's
    // controll waits here for incoming char

    message[i]=RX_CHAR();
    process=1;

    }

    if(process==1)

    {

    // I'm sure that this characters are 26th
    // character always from transmitter

    if(message[25]=='*')

    {

    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';

    }

    // Request array is transmitted Note this
    // subroutine is tested working correctly.

    Send_Str(Request);
    }

    else if( pass==0)

    {

    for(j=0;j<=35;j++)

    {

    Request[j]= 'B';

    }

    Send_Str(Request);

    }
    } }

    Thanks

Children