From: SourceForge.net <no...@so...> - 2007-07-24 18:13:29
|
Bugs item #1759839, was opened at 2007-07-24 13:11 Message generated for change (Comment added) made by tparker_silabs You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1759839&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: TParker (tparker_silabs) Assigned to: Nobody/Anonymous (nobody) Summary: variables located in same place as actively-used registers Initial Comment: Version 2.7 Build output (using Silicon Labs IDE): Invoking project defined compiler. c:\SDCC\BIN\SDCC.EXE -c --debug --use-stdout -V -IM:\PRIVATE\an219\sdcc_bug M:\PRIVATE\an219\sdcc_bug\F360_Blinky.c ................. + c:\SDCC\BIN\sdcpp.exe -nostdinc -Wall -std=c99 -I"M:\PRIVATE\an219\sdcc_bug" -obj-ext=.rel -DSDCC_MODEL_SMALL -DSDCC=270 -DSDCC_mcs51 -D__mcs51 -I"c:\SDCC\BIN\..\include\mcs51" -I"c:\SDCC\BIN\..\include" "M:\PRIVATE\an219\sdcc_bug\F360_Blinky.c" + c:\SDCC\BIN\asx8051.exe -plosgffc "F360_Blinky.asm" Link in progress... c:\SDCC\BIN\SDCC.EXE --debug --use-stdout -V -IM:\PRIVATE\an219\sdcc_bug -oM:\PRIVATE\an219\sdcc_bug\F360_Blinky.hex M:\PRIVATE\an219\sdcc_bug\F360_Blinky.rel .......... + c:\SDCC\BIN\aslink.exe -nf "M:\PRIVATE\an219\sdcc_bug\F360_Blinky.lnk" Problem: The "using" directive switches to the correct register bank in the ISR. However, the SDCC Linker is still allocating variables to those DRAM areas so that any instructions using those registers overwrite the variables in DRAM. Using the attached program for a C8051F36x Target Board, the map file for the DRAM segment looks like this: Hexadecimal Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ DSEG 0000 0080 = 128. bytes (REL,CON) Value Global -------- -------------------------------- 0008 G$phase_add1$0$0 0008 _phase_add1 000A G$phase_add2$0$0 000A _phase_add2 000C LTimer2_ISR$phase_acc1$1$1 000E LTimer2_ISR$phase_acc2$1$1 The variables <phase_add1> and <phase_add2> are global constants that are added to <phase_acc1> and <phase_acc2> in the Timer2 ISR. However, <phase_add1> and <phase_add2> are located by the linker in Register Bank 1, the same Register Bank specified to be used by the ISR by the "using" directive. Because of this, the <add> variables are overwritten by the process of adding them to the accumulator variables. Please contact me if you have any questions at tab...@si.... The attached file requires "compiler_defs.h" and "C8051F360_defs.h" to compile, but it seems like I can only upload the one file. ---------------------------------------------------------------------- >Comment By: TParker (tparker_silabs) Date: 2007-07-24 13:13 Message: Logged In: YES user_id=1852451 Originator: YES File Added: C8051F360_defs.h ---------------------------------------------------------------------- Comment By: TParker (tparker_silabs) Date: 2007-07-24 13:12 Message: Logged In: YES user_id=1852451 Originator: YES File Added: compiler_defs.h ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1759839&group_id=599 |