From fd16541ba58fd40060ac3a26be612c967cb610b1 Mon Sep 17 00:00:00 2001 From: jesusc Date: Wed, 29 Jan 2003 08:59:29 +0000 Subject: [PATCH] Added option --code-size and --xram-size git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2187 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 9 +++++++++ as/mcs51/aslink.h | 6 ++++++ as/mcs51/lkdata.c | 4 ++++ as/mcs51/lkmain.c | 35 +++++++++++++++++++++++++++++++++++ as/mcs51/lkmem.c | 10 ++++++---- 5 files changed, 60 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index ba913355..3e97581d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2003-01-29 Jesus Calvino-Fraga + + * as/mcs51/aslink.h: Added options --xram-size and --code-size + * as/mcs51/lkdata.c: Added options --xram-size and --code-size + * as/mcs51/lkmain.c: Added options --xram-size and --code-size + * as/mcs51/lkmem.c: Added options --xram-size and --code-size + * src/SDCCglobl.h: Added options --xram-size and --code-size + * src/SDCCmain.c: Added options --xram-size and --code-size + 2003-01-28 Bernhard Held * src/ds390/gen.c: fix deps by replacing with "common.h" diff --git a/as/mcs51/aslink.h b/as/mcs51/aslink.h index 6928054f..403fd89c 100644 --- a/as/mcs51/aslink.h +++ b/as/mcs51/aslink.h @@ -622,6 +622,10 @@ extern struct lbfile *lbfhead; /* pointer to the first */ extern Addr_T iram_size; /* internal ram size */ +extern long xram_size; /* external ram size + */ +extern long code_size; /* code size + */ /* C Library function definitions */ @@ -646,6 +650,8 @@ extern FILE * afile(); extern VOID bassav(); extern VOID gblsav(); extern VOID iramsav(); +extern VOID xramsav(); +extern VOID codesav(); extern VOID iramcheck(); extern VOID link_main(); extern VOID lkexit(); diff --git a/as/mcs51/lkdata.c b/as/mcs51/lkdata.c index 19a84377..1d100f8a 100644 --- a/as/mcs51/lkdata.c +++ b/as/mcs51/lkdata.c @@ -93,6 +93,10 @@ int gcntr; /* LST file relocation active */ Addr_T iram_size; /* internal ram size */ +long xram_size=-1; /* external ram size + */ +long code_size=-1; /* code size + */ /* * The structure lfile contains a pointer to a diff --git a/as/mcs51/lkmain.c b/as/mcs51/lkmain.c index e0f6a924..4b96033c 100644 --- a/as/mcs51/lkmain.c +++ b/as/mcs51/lkmain.c @@ -791,6 +791,16 @@ parse() iramsav(); return(0); + case 'v': + case 'V': + xramsav(); + return(0); + + case 'w': + case 'W': + codesav(); + return(0); + case 'z': case 'Z': dflag = 1; @@ -1161,6 +1171,29 @@ iramsav() iram_size = 128; /* Default is 128 (0x80) bytes */ } +/*Similar to iramsav but for xram memory*/ +VOID +xramsav() +{ + unget(getnb()); + if (ip && *ip) + xram_size = expr(0); /* evaluate size expression */ + else + xram_size = rflag?0x1000000:0x10000; +} + +/*Similar to iramsav but for code memory*/ +VOID +codesav() +{ + unget(getnb()); + if (ip && *ip) + code_size = expr(0); /* evaluate size expression */ + else + code_size = rflag?0x1000000:0x10000; +} + + /*)Function VOID iramcheck() * * The function iramcheck() is used at the end of linking to check that @@ -1231,6 +1264,8 @@ char *usetxt[] = { " -u Update listing file(s) with link data as file(s)[.RST]", "Miscellaneous:\n" " -a [iram-size] Check for internal RAM overflow", + " -v [xram-size] Check for external RAM overflow", + " -w [code-size] Check for code overflow", "End:", " -e or null line terminates input", 0 diff --git a/as/mcs51/lkmem.c b/as/mcs51/lkmem.c index ba31c4d5..6a2d8770 100644 --- a/as/mcs51/lkmem.c +++ b/as/mcs51/lkmem.c @@ -314,7 +314,7 @@ int summary(struct area * areap) else sprintf(end, "0x%04lx", XRam.Size+XRam.Start-1); sprintf(size, "%5lu", XRam.Size); - sprintf(max, "%5lu", XRam.Max); + sprintf(max, "%5lu", xram_size<0?XRam.Max:xram_size); fprintf(of, format, XRam.Name, start, end, size, max); /*Report Rom/Flash totals:*/ @@ -324,7 +324,7 @@ int summary(struct area * areap) else sprintf(end, "0x%04lx", Rom.Size+Rom.Start-1); sprintf(size, "%5lu", Rom.Size); - sprintf(max, "%5lu", Rom.Max); + sprintf(max, "%5lu", code_size<0?Rom.Max:code_size); fprintf(of, format, Rom.Name, start, end, size, max); /*Report any excess:*/ @@ -333,12 +333,14 @@ int summary(struct area * areap) sprintf(buff, "Insufficient INDIRECT RAM memory.\n"); REPORT_ERROR(buff, 1); } - if((XRam.Start+XRam.Size)>XRam.Max) + if( ((XRam.Start+XRam.Size)>XRam.Max) || + (((int)XRam.Size>xram_size)&&(xram_size>=0)) ) { sprintf(buff, "Insufficient EXTERNAL RAM memory.\n"); REPORT_ERROR(buff, 1); } - if((Rom.Start+Rom.Size)>Rom.Max) + if( ((Rom.Start+Rom.Size)>Rom.Max) || + (((int)Rom.Size>code_size)&&(code_size>=0)) ) { sprintf(buff, "Insufficient ROM/EPROM/FLASH memory.\n"); REPORT_ERROR(buff, 1); -- 2.39.5