SDCC model large problem

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to



hi,
     Currently I am using C8051F345 chip , Silicon IDE (2.72) version
and SDCC (2.6).
I have problem in declaring global variables more than 171 bytes. The
memory model currently used is model large.

I have initialized the controller and the UART . I am just transferring
data from the controller in my program. When I increase the array size
of a varible more than 171 bytes the code is not working. Is this a
problem with SDCC(2.6) version or any problem related with hardware.


           I have given the code below , I need some help on this
memeory model problem
/**********************************************************************************************************************/
//This program is to configure both uarts for variable baud rates
/**********************************************************************************************************************/
#include <stdlib.h>
#include "c8051F345.h"
#include <string.h>

xdata unsigned char memChk[171];  // this is the array whose size i
want to change

void UART0_ISR (void) interrupt 4
{
    EA = 0;

    if((SCON0 & 0x02) == 2)
    {
        SCON0 &= 0xFD;
    }

    if((SCON0 & 0x01) == 1)
    {
        SCON0 &= 0xFE;

    }
    EA = 1;
}

void Uart0Init()
{
     SCON0 = 0x10;  //Receive is Enabled
      TMOD  = 0x20;  // Timer 1 is configured in MODE 2 as 8 bit auto
reload mode
      CKCON = 0x01; // The SYSCLK/4 is selected as source for the timer
operation
      TH1 = 0x64; //For the baud rate 9600, at SYSCLK 12MHZ.
      TR1 = 1;  //The timer Run bit is enabled.
}
void SysInit()
{
    EA = 1; // Enable all interrupts
    P0SKIP = 0x01; //This is used to skip P0.0 and to use P0.1 as TX1 and
P0.2 as RX1
    EIE1 = 0x80;  // timer 3 enabled
    EIE2 = 0x02; // UART1 enabled
    ES0 = 1;      //UART0 enabled
    PCA0MD = 0x00; // watch dog timer disable
    XBR0 |= 0x01;//UART0 TX0, RX0 routed to Port pins P0.4 and P0.5.
    XBR1 |= 0x40; //Weak Pull-ups enabled and Crossbar enabled.
    XBR2 |= 0x01; //UART1 TX1, RX1 routed to Port pins.
    OSCICN    = 0x83;  //Internal H-F Oscillator Enabled. and SYSCLK derived
from Internal H-F Oscillator divided by 1.
    OSCICL = 0x1F;  //The internal Oscillator is configured to slowest
speed which is 12 MHZ in this controller
    CLKSEL     = 0x70; //Internal Oscillator (as determined by the IFCN bits
in register OSCICN)

    P0MDIN = 0xFF;
    P0MDOUT = 0xFB;
    P1MDOUT = 0xFF;
    P4MDOUT = 0xFF;

}

void main()
{
    SysInit();
    Uart0Init();
    P0MDIN = 0xFF;
    P0MDOUT = 0xFB;
    P1MDOUT = 0xFF;
    P4MDOUT = 0xFF;

    
    while(1)

    {
                SBUF0 = 'T';
    }

}


Site Timeline