1 #LyX 1.1 created this file. For more info see http://www.lyx.org/
14 \paperorientation portrait
17 \paragraph_separation indent
19 \quotes_language english
23 \paperpagestyle default
27 SDCC Compiler User Guide
30 Sandeep Dutta (sandeep.dutta@usa.net)
36 SDCC is a Free ware , retargettable, optimizing ANSI-C compiler.
37 The current version targets Intel 8051 based MCUs, it can be retargetted
38 for other 8 bit MCUs or PICs.
39 The entire source code for the compiler is distributed under GPL.
40 SDCC used ASXXXX & ASLINK a Free ware, retargettable assembler & linker.
41 SDCC has extensive MCU (8051) specific language extensions, which lets
42 it utilize the underlying hardware effectively.
43 The front-end (parser) will be enhanced to handle language extensions for
44 other MCUs as and when they are targetted.
45 In addition to the MCU Specific optimizations SDCC also does a host of
46 standard optimizations like
48 global sub expression elimination, loop optimizations (loop invariant,
49 strength reduction of induction variables and loop reversing), constant
50 folding & propagation, copy propagation, dead code elimination and jumptables
51 for 'switch' statements.
54 For the back-end SDCC uses a global register allocation scheme which should
55 be well suited for other 8 bit MCUs , the peep hole optimizer uses a rule
56 based substitution mechanism which is MCU independent.
57 Supported data-types are
59 short (8 bits, 1 byte), char (8 bits, 1 byte), int (16 bits, 2 bytes ),
60 long (32 bit, 4 bytes) & float (4 byte IEEE).
63 The compiler also allows
67 to be embedded anywhere in a function.
68 In addition routines developed in assembly can also be called.
69 SDCC also provides an option to report the relative complexity of a function,
70 these functions can then be further optimized , or hand coded in assembly
72 SDCC also comes with a companion source level debugger SDCDB, the debugger
73 currently uses S51 a freeware simulator for 8051, it can be easily modified
74 to use other simulators.
75 The latest version can be downloaded from
77 http://www.geocities.com/ResearchTriangle/Forum/1353
80 All packages used in this compiler system are
84 (freeware); source code for all the sub-packages ( asxxxx assembler/linker
89 a conservative garbage collector) are distributed with the package.
90 Documentation was created using a freeware word processor (LyX).
94 This program is free software; you can redistribute it and/or modify it
95 under the terms of the GNU General Public License as published by the Free
96 Software Foundation; either version 2, or (at your option) any later version.
97 This program is distributed in the hope that it will be useful, but WITHOUT
98 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
99 FOR A PARTICULAR PURPOSE.
100 See the GNU General Public License for more details.
101 You should have received a copy of the GNU General Public License along
102 with this program; if not, write to the Free Software Foundation, 59 Temple
103 Place - Suite 330, Boston, MA 02111-1307, USA.
104 In other words, you are welcome to use, share and improve this program.
105 You are forbidden to forbid anyone else to use, share and improve what
107 Help stamp out software-hoarding!
111 \begin_inset LatexCommand \label{Installation}
118 What you need before you start installation of SDCC ? A C Compiler, not
119 just any C Compiler, gcc to be exact, you can get adventurous and try another
120 compiler , I HAVEN'T tried it.
121 GCC is free , and is available for almost all major platforms, if you are
126 you probably already have it, if you are using
138 you will need the full development version of their tool (
142 , follow their instructions for installation (this is also free and is very
151 users be aware that the compiler runs substantially slower on the Windows
152 platform, I am not sure why.
155 After you have installed
159 you are ready to build the compiler (sorry no binary distributions yet).
160 SDCC is native to Linux but can be ported to any platform on which GCC
162 Extract the source file package (
170 ) into some directory , which we shall refer to as
178 \begin_inset LatexCommand \label{Components}
183 \layout Subsubsection
185 gc ( a conservative garbage collector)
188 SDCC relies on this component to do all the memory management, this excellent
189 package is copyrighted by
191 Jans J Boehm(boehm@sgi.com) and Alan J Demers
193 but can be used with minimum restrictions.
194 The GC source will be extracted into the directory
200 \layout Subsubsection
202 cpp ( C-Preprocessor)
205 The preprocessor is extracted into the directory
209 , it is a modified version of the GNU preprocessor.
210 \layout Subsubsection
212 asxxxx & aslink ( The assembler and Linkage Editor)
215 This is retargettable assembler & linkage editor, it was developed by Alan
216 Baldwin, John Hartman created the version for 8051, and I (Sandeep) have
217 some enhancements and bug fixes for it to work properly with the SDCC.
218 This component is extracted into the directory
221 \layout Subsubsection
226 This is the actual compiler, it uses
230 and invokes the assembler and linkage editor.
231 All files with the prefix
235 are part of the compiler and is extracted into the the directory
238 \layout Subsubsection
243 Version 2.1.8 onwards contains s51 a freeware , opensource simulator developed
244 by Daniel Drotos <drdani@mazsola.iit.uni-miskolc.hu>.
245 The executable is built as part of build process, for more information
246 visit Daniel's website at <http://mazsola.iit.uni-miskolc.hu/~drdani/embedded/s51/
248 \layout Subsubsection
250 SDCDB - Source level Debugger.
253 SDCDB is the companion source level debugger .
254 The current version of the debugger uses Daniel's Simulator S51, but can
255 be easily changed to use other simulators.
258 Installation for Version <= 2.1.7
261 After the package is extracted (
269 , change to the directory where you extracted the package and give the command.
279 shell script, it will compile all the above mentioned components and install
280 the executables into the directory
284 make sure you add this directory to your
288 environment variable.
289 This script will also compile all the support routines ( library routines
291 The support routines are all developed in C and need to be compiled.
294 Installation for Version >= 2.1.8a
297 The distribution method from Version 2.1.8a has been changed to be conforment
299 \begin_inset Quotes eld
303 \begin_inset Quotes erd
307 The source is now distributed as
311 sdcc-<version number>.tar.gz format
315 , instead of the older .zip format.
316 The steps for installation are as follows.
317 \layout Subsubsection
322 This is usually done by the following command
323 \begin_inset Quotes eld
330 gunzip -c sdcc-<version number>.tar.gz | tar -xv -
335 \begin_inset Quotes eld
339 \layout Subsubsection
341 Change to the main source directory (usually sdcc or sdcc-<version number>)
342 \layout Subsubsection
344 Issue command to configure your system
347 The configure command has several options the most commonly used option
348 is --prefix=<directory name>, where <directory name> is the final location
349 for the sdcc executables and libraries, (default location is /usr/local).
350 The installation process will create the following directory structure
351 under the <directory name> specified.
354 bin/ - binary exectables (add to PATH environment variable)
370 sdcc51inc/ - include header files
412 small/ - Object & Library files for small model library
440 large/ - Object & library files for large model library
450 './configure --prefix=/usr/local
451 \begin_inset Quotes erd
457 will create configure the compiler to be installed in directory /usr/local/bin.
458 \layout Subsubsection
463 After configuration step issue the command
471 \begin_inset Quotes eld
475 \begin_inset Quotes erd
481 This will compile the compiler
482 \layout Subsubsection
485 \begin_inset Quotes eld
489 \begin_inset Quotes erd
495 Will install the compiler and libraries in the appropriate directories.
496 \layout Subsubsection
498 Special Notes for Windows Users.
499 Provided by Michael Jamet[ mjamet@computer.org]
509 How to install SDCC from source on a Windows 95 or Windows NT 4 system
520 This document describes how to install SDCC on a Win 95 or Win NT 4 system.
526 These instructions probably work for Win 98 as well, but have not been
532 tested on that platform.
543 There are lots of little differences between UNIX and the Win32 Cygnus
549 environment which make porting more difficult than it should be.
556 you want the details, please contact me.
558 Otherwise just follow these
575 Install the Cygnus Software
580 Go to http://sourceware.cygnus.com/cygwin.
582 Cygnus provides a UNIX like
587 environment for Win 32 systems.
589 Download "full.exe" and install.
596 MUST install it on your C drive.
598 "full.exe" contains a shell AND many
603 common UNIX utilities.
615 Download and Extract the Latest SDCC
620 The latest version can be found at
627 www.geocities.com/ResearchTriange/Forum/1353.
633 It can be uncompressed with winzip.
651 There should be an entry in the Start Menu for Cygnus.
659 This gives you a UNIX like environment.
661 FROM THIS POINT ON, DIRECTORIES
666 MUST BE SPECIFIED WITH FORWARD SLASHES (/) NOT THE DOS STYLE BACK
673 ) BECAUSE THIS IS WHAT UNIX EXPECTS.
685 winnt" would be "/winnt" under the shell.
697 Change Directory to Where SDCC was extracted (referred to as INSTALLDIR)
711 If you extracted to a drive OTHER THAN C, the drive
716 must be specified as part of the path.
717 For example, if you extracted to
722 your "g drive", type the following: "cd //g/mydir".
729 to specify the drive.
741 Make Dirs Which are Automatically Made During the UNIX Installation
762 (not a typo, just "bin")
776 mkdir -p /usr/local/bin
783 mkdir -p /usr/local/share
790 mkdir -p /usr/local/share/sdcc51lib
797 mkdir -p /usr/local/share/sdcc51inc
814 (When a path from the root directory is specified WITHOUT a drive, the
822 For example /michael/newuser => c:
838 Add Programs to /bin Expected by the Installation Process
845 - Look at your path: echo $PATH
856 One of the fields is the diretory with the CYGNUS programs.
867 /CYGNUS/CYGWIN~1/H-I586/BIN
879 - cd to the directory found above.
881 You may have to fiddle with the
892 case (upper or lower) here because the PATH is SHOWN as all upper
903 case, but is actually mixed.
905 To help you along, you may type
916 a letter or 2 followed by the escape key.
929 out the remaining letters IF THEY describe a unique directory.
941 If you have problems here, cd one directory and type "ls".
954 is the equivalent of "dir/w".
967 - Copy the following:
1003 \protected_separator
1005 Go back to the INSTALLDIR
1009 \protected_separator
1011 \protected_separator
1016 \protected_separator
1022 \protected_separator
1027 \protected_separator
1029 Run the configure Program
1033 \protected_separator
1035 \protected_separator
1040 \protected_separator
1041 The "./" is important because your current directory is NOT in your path.
1046 \protected_separator
1047 Under DOS, your current directory was implicitly always the first entry
1052 \protected_separator
1058 \protected_separator
1063 \protected_separator
1069 \protected_separator
1071 \protected_separator
1076 \protected_separator
1081 \protected_separator
1082 This process takes quite some time under Win 32.
1087 \protected_separator
1092 \protected_separator
1094 Install the Newly Built Software
1098 \protected_separator
1100 \protected_separator
1105 \protected_separator
1110 \protected_separator
1111 This will partially install the software into the /usr/local directories
1116 \protected_separator
1118 \protected_separator
1119 What it actually doing is copying the .c, .h and
1123 \protected_separator
1124 library files to directories under /usr/local/share.
1129 \protected_separator
1134 \protected_separator
1135 It will NOT be able to install the actual programs (binaries) because
1139 \protected_separator
1140 it does not know programs on Win32 systems have ".exe" extensions.
1145 \protected_separator
1146 For example, it tries to install sdcc instead of sdcc.exe.
1151 \protected_separator
1156 \protected_separator
1157 After the automated part is finished, you must manually copy the binaries:
1162 \protected_separator
1164 \protected_separator
1166 \protected_separator
1167 (This is the bin directory in your INSTALLDIR)
1171 \protected_separator
1173 \protected_separator
1178 \protected_separator
1183 \protected_separator
1185 Make sure /usr/local/bin is in Your PATH
1189 \protected_separator
1196 bin to your path however your Win32 system allows.
1197 \protected_separator
1202 \protected_separator
1203 example you may add it to the PATH statement in autoexec.bat.
1208 \protected_separator
1213 \protected_separator
1215 \protected_separator
1216 If you have any questions send them to me or post them
1220 \protected_separator
1226 \begin_inset LatexCommand \label{Compiling}
1233 Single Source file projects.
1234 \begin_inset LatexCommand \label{One Source File}
1241 For single source file projects the process is very simple.
1242 Compile your programs with the following command
1250 The above command will compile ,assemble and link your source file.
1251 Output files are as follows.
1256 sourcefile.asm - Assembler source file created by the compiler
1261 sourcefile.lst - Assembler listing file created by the Assembler
1266 sourcefile.rst - Assembler listing file updated with linkedit information
1267 , created by linkage editor
1272 sourcefile.sym - symbol listing for the sourcefile, created by the assembler.
1277 sourcefile.rel - Object file created by the assembler, input to Linkage editor.
1282 sourcefile.map - The memory map for the load module, created by the Linker.
1287 sourcefile.<ihx | s19> - The load module : ihx - Intel hex format (default
1288 ), s19 - Motorola S19 format when compiler option --out-fmt-s19 is used.
1291 Projects with multiple source files.
1294 SDCC can compile only ONE file at a time.
1295 Let us for example assume that you have a project containing the following
1301 foo1.c ( contains some functions )
1306 foo2.c (contains some more functions)
1311 foomain.c (contains more functions and the function main)
1314 The first two files will need to be compiled separately with the commands
1327 Then compile the source file containing main and link the other files together
1328 with the following command.
1333 sdcc foomain.c foo1.rel foo2.rel
1340 can be separately compiled as well
1350 sdcc foomain.rel foo1.rel foo2.rel
1353 The file containing the main function MUST be the FIRST file specified in
1354 the command line , since the linkage editor processes file in the order
1355 they are presented to it.
1358 Projects with additional libraries.
1361 Some reusable routines may be compiled into a library, see the documentation
1362 for the assembler and linkage editor in the directory
1364 SDCCDIR/asxxxx/asxhtm.htm
1366 this describes how to create a
1370 library file, the libraries created in this manner may be included using
1371 the command line, make sure you include the -L <library-path> option to
1372 tell the linker where to look for these files.
1373 Here is an example, assuming you have the source file
1390 sdcc foomain.c foolib.lib -L mylib
1397 ' must be an absolute path name.
1400 The view of the way the linkage editor processes the library files, it is
1401 recommended that you put each source routine in a separate file and combine
1402 them using the .lib file.
1403 For an example see the standard library file 'libsdcc.lib' in the directory
1407 Command Line options
1408 \begin_inset LatexCommand \label{Command Line Options}
1421 \begin_inset LatexCommand \label{--model-large}
1429 Generate code for Large model programs see section Memory Models for more
1431 If this option is used all source files in the project should be compiled
1433 In addition the standard library routines are compiled with small model
1434 , they will need to be recompiled.
1449 \begin_inset LatexCommand \label{--model-small}
1453 Generate code for Small Model programs see section Memory Models for more
1455 This is the default model.
1471 \begin_inset LatexCommand \label{--stack-auto}
1475 All functions in the source file will be compiled as
1480 the parameters and local variables will be allocated on the stack.
1481 see section Parameters and Local Variables for more details.
1482 If this option is used all source files in the project should be compiled
1496 \begin_inset LatexCommand \label{--xstack}
1500 Uses a pseudo stack in the first 256 bytes in the external ram for allocating
1501 variables and passing parameters.
1502 See section on external stack for more details.
1514 \begin_inset LatexCommand \label{--nogcse}
1518 Will not do global subexpression elimination, this option may be used when
1519 the compiler creates undesirably large stack/data spaces to store compiler
1521 A warning message will be generated when this happens and the compiler
1522 will indicate the number of extra bytes it allocated.
1523 It recommended that this option NOT be used , #pragma NOGCSE can be used
1524 to turn off global subexpression elimination for a given function only.
1536 \begin_inset LatexCommand \label{--noinvariant}
1540 Will not do loop invariant optimizations, this may be turned off for reasons
1541 explained for the previous option .
1542 For more details of loop optimizations performed see section Loop Invariants.It
1543 recommended that this option NOT be used , #pragma NOINVARIANT can be used
1544 to turn off invariant optimizations for a given function only.
1556 \begin_inset LatexCommand \label{--noinduction}
1560 Will not do loop induction optimizations, see section Strength reduction
1561 for more details.It recommended that this option NOT be used , #pragma NOINDUCTI
1562 ON can be used to turn off induction optimizations for given function only.
1574 \begin_inset LatexCommand \label{--nojtbound}
1578 Will not generate boundary condition check when switch statements are implement
1579 ed using jump-tables.
1580 See section Switch Statements for more details.It recommended that this
1581 option NOT be used , #pragma NOJTBOUND can be used to turn off boundary
1582 checking for jump tables for a given function only.
1595 \begin_inset LatexCommand \label{--noloopreverse}
1599 Will not do loop reversal optimization
1611 \begin_inset LatexCommand \label{--noregparms}
1615 By default the first parameter is passed using global registers (DPL,DPH,B,ACC).
1616 This option will disable parameter passing using registers.
1617 NOTE: if your program uses the 16/32 bit support routines (for multiplication/d
1618 ivision) these library routines will need to be recompiled with the --noregparms
1626 --callee-saves function1[,function2][,function3]....
1632 \begin_inset LatexCommand \label{--callee-saves}
1636 The compiler by default uses a caller saves convention for register saving
1637 across function calls, however this can cause unneccessary register pushing
1638 & popping when calling small functions from larger functions.
1639 This option can be used to switch the register saving convention for the
1640 function names specified.
1641 The compiler will not save registers when calling these functions, extra
1642 code will be generated at the entry & exit for these functions to save
1643 & restore the registers used by these functions, this can SUBSTANTIALLY
1644 reduce code & improve run time performance of the generated code.
1645 In future the compiler (with interprocedural analysis) will be able to
1646 determine the appropriate scheme to use for each function call.
1647 DO NOT use this option for built-in functions such as _muluint..., if this
1648 option is used for a library function the appropriate library function
1649 needs to be recompiled with the same option.
1650 If the project consists of multiple source files then all the source file
1651 should be compiled with the same --callee-saves option string.
1652 Also see Pragma Directive
1653 \begin_inset LatexCommand \ref{Pragmaa}
1658 \begin_inset LatexCommand \ref{pragma callee-saves}
1672 \begin_inset LatexCommand \label{--debug}
1676 When this option is used the compiler will generate debug information ,
1677 that can be used with the SDCDB.
1678 The debug information is collected in a file with .cdb extension.
1679 For more information see documentation for SDCDB.
1692 \begin_inset LatexCommand \label{--regextend}
1696 This option will cause the compiler to define pseudo registers , if this
1697 option is used, all source files in the project should be compiled with
1699 See section Register Extension for more details.
1712 \begin_inset LatexCommand \label{--compile-only}
1716 will compile and assemble the source only, will not call the linkage editor.
1728 \begin_inset LatexCommand \label{--xram-loc}
1732 <Value> The start location of the external ram, default value is 0.
1733 The value entered can be in Hexadecimal or Decimal format .eg.
1734 --xram-loc 0x8000 or --xram-loc 32768.
1747 \begin_inset LatexCommand \label{--code-loc}
1751 <Value> The start location of the code segment , default value 0.
1752 Note when this option is used the interrupt vector table is also relocated
1753 to the given address.
1754 The value entered can be in Hexadecimal or Decimal format .eg.
1755 --code-loc 0x8000 or --code-loc 32768.
1767 \begin_inset LatexCommand \label{--stack-loc}
1771 <Value> The initial value of the stack pointer.
1772 The default value of the stack pointer is 0x07 if only register bank 0
1773 is used, if other register banks are used then the stack pointer is initialized
1774 to the location above the highest register bank used.
1776 if register banks 1 & 2 are used the stack pointer will default to location
1778 The value entered can be in Hexadecimal or Decimal format .eg.
1779 --stack-loc 0x20 or --stack-loc 32.
1780 If all four register banks are used the stack will be placed after the
1781 data segment (equivalent to --stack-after-data)
1793 \begin_inset LatexCommand \label{--stack-after-data}
1797 This option will cause the stack to be located in the internal ram after
1811 \begin_inset LatexCommand \label{--data-loc}
1815 <Value> The start location of the internal ram data segment, the default
1816 value is 0x30.The value entered can be in Hexadecimal or Decimal format
1818 --data-loc 0x20 or --data-loc 32.
1830 \begin_inset LatexCommand \label{--idata-loc}
1834 <Value> The start location of the indirectly addressable internal ram, default
1836 The value entered can be in Hexadecimal or Decimal format .eg.
1837 --idata-loc 0x88 or --idata-loc 136.
1847 \begin_inset LatexCommand \label{--peep-file}
1854 <filename> This option can be used to use additional rules to be used by
1855 the peep hole optimizer.
1856 See section Peep Hole optimizations for details on how to write these rules.
1869 \begin_inset LatexCommand \label{--lib-path}
1873 <absolute path to additional libraries> This option is passed to the linkage
1874 editor, additional libraries search path.
1875 The path name must be absolute.
1876 Additional library files may be specified in the command line .
1877 See section Compiling programs for more details.
1884 \begin_inset LatexCommand \label{-I}
1891 The additional location where the pre processor will look for <..h> or
1892 \begin_inset Quotes eld
1896 \begin_inset Quotes erd
1911 \begin_inset LatexCommand \label{-D}
1915 Command line definition of macros.
1916 Passed to the pre processor.
1928 \begin_inset LatexCommand \label{-E}
1932 Run only the C preprocessor.
1933 Preprocess all the C source files specified and output the results to standard
1944 \begin_inset LatexCommand \label{-M}
1951 Tell the preprocessor to output a rule suitable for make describing the
1952 dependencies of each object file.
1953 For each source file, the preprocessor outputs one make-rule whose target
1954 is the object file name for that source file and whose dependencies are
1955 all the files `#include'd in it.
1956 This rule may be a single line or may be continued with `
1958 '-newline if it is long.
1959 The list of rules is printed on standard output instead of the preprocessed
1973 \begin_inset LatexCommand \label{-C}
1977 Tell the preprocessor not to discard comments.
1978 Used with the `-E' option.
1990 \begin_inset LatexCommand \label{-MM}
1994 Like `-M' but the output mentions only the user header files included with
1996 System header files included with `#include <file>' are omitted.
2008 \begin_inset LatexCommand \label{-Aquestion(answer)}
2012 Assert the answer answer for question, in case it is tested with a preprocessor
2013 conditional such as `#if #question(answer)'.
2014 `-A-' disables the standard asser- tions that normally describe the target
2027 \begin_inset LatexCommand \label{-Aquestion}
2031 (answer) Assert the answer answer for question, in case it is tested with
2032 a preprocessor conditional such as `#if #question(answer)'.
2033 `-A-' disables the standard assertions that normally describe the target
2046 \begin_inset LatexCommand \label{-Umacro}
2050 Undefine macro macro.
2051 `-U' options are evaluated after all `-D' options, but before any `-include'
2052 and `-imac- ros' options.
2064 \begin_inset LatexCommand \label{-dM}
2068 Tell the preprocessor to output only a list of the mac- ro definitions
2069 that are in effect at the end of prepro- cessing.
2070 Used with the `-E' option.
2082 \begin_inset LatexCommand \label{-dD}
2086 Tell the preprocessor to pass all macro definitions into the output, in
2087 their proper sequence in the rest of the output.
2099 \begin_inset LatexCommand \label{-dN}
2103 Like `-dD' except that the macro arguments and contents are omitted.
2104 Only `#define name' is included in the output.
2116 \begin_inset LatexCommand \label{-S}
2120 Stop after the stage of compilation proper; do not as- semble.
2121 The output is an assembler code file for the input file specified.
2127 -Wa asmOption[,asmOption]
2131 Pass the asmOption to the assembler
2137 -Wl linkOption[,linkOption]
2141 Pass the linkOption to the linker.
2154 \begin_inset LatexCommand \label{--int-long-rent}
2158 Integer (16 bit) and long (32 bit) libraries have been compiled as reentrant.
2159 Note by default these libraries are compiled as non-reentrant.
2160 See section Installation for more details.
2173 \begin_inset LatexCommand \label{--cyclomatic}
2177 This option will cause the compiler to generate an information message for
2178 each function in the source file.
2179 The message contains some
2183 information about the function.
2184 The number of edges and nodes the compiler detected in the control flow
2185 graph of the function, and most importantly the
2187 cyclomatic complexity
2189 see section on Cyclomatic Complexity for more details.
2202 \begin_inset LatexCommand \label{--float-reent}
2206 Floating point library is compiled as reentrant.See section Installation
2217 \begin_inset LatexCommand \label{--out-fmt-ihx}
2224 The linker output (final object code) is in Intel Hex format.
2225 (This is the default option).
2238 \begin_inset LatexCommand \label{--out-fmt-s19}
2242 The linker output (final object code) is in Motorola S19 format.
2254 \begin_inset LatexCommand \label{--nooverlay}
2258 The compiler will not overlay parameters and local variables of any function,
2259 see section Parameters and local variables for more details.
2271 \begin_inset LatexCommand \label{--main-return}
2275 This option can be used when the code generated is called by a monitor
2277 The compiler will generate a 'ret' upon return from the 'main' function.
2278 The default option is to lock up i.e.
2279 generate a 'ljmp .' .
2291 \begin_inset LatexCommand \label{--no-peep}
2295 Disable peep-hole optimization.
2307 \begin_inset LatexCommand \label{--peep-asm}
2311 Pass the inline assembler code through the peep hole optimizer.
2312 Can cause unexpected changes to inline assembler code , please go through
2313 the peephole optimizer rules defnied in file 'SDCCpeeph.def' before using
2326 \begin_inset LatexCommand \label{--iram-size}
2330 <Value> Causes the linker to check if the interal ram usage is within limits
2334 The following options are provided for the purpose of retargetting and debugging
2336 These provided a means to dump the intermediate code (iCode) generated
2337 by the compiler in human readable form at various stages of the compilation
2351 \begin_inset LatexCommand \label{--dumpraw}
2356 This option will cause the compiler to dump the intermediate code into
2359 <source filename>.dumpraw
2361 just after the intermediate code has been generated for a function , i.e.
2362 before any optimizations are done.
2363 The basic blocks at this stage ordered in the depth first number, so they
2364 may not be in sequence of execution.
2377 \begin_inset LatexCommand \label{--dumpgcse}
2381 Will create a dump if iCode, after global subexpression elimination, into
2384 <source filename>.dumpgcse.
2396 \begin_inset LatexCommand \label{--dumpdeadcode}
2400 .Will create a dump if iCode, after deadcode elimination, into a file named
2403 <source filename>.dumpdeadcode.
2417 \begin_inset LatexCommand \label{--dumploop}
2421 Will create a dump if iCode, after loop optimizations, into a file named
2424 <source filename>.dumploop.
2438 \begin_inset LatexCommand \label{--dump-range}
2442 Will create a dump if iCode, after live range analysis, into a file named
2445 <source filename>.dumprange.
2459 \begin_inset LatexCommand \label{--dumpregassign}
2463 Will create a dump if iCode, after register assignment , into a file named
2466 <source filename>.dumprassgn.
2479 \begin_inset LatexCommand \label{--dumpall}
2483 Will cause all the above mentioned dumps to be created.
2486 Note that the files created for the dump are appended to each time.
2487 So the files should be deleted manually , before each dump is created.
2491 When reporting bugs, it will be very helpful if you could include these
2492 dumps along with the portion of the code that is causing the problem.
2496 \begin_inset LatexCommand \label{Language Extension}
2504 \begin_inset LatexCommand \label{Storage Classes}
2511 In addition to the ANSI storage classes SDCC allows the following 8051 specific
2513 \layout Subsubsection
2516 \begin_inset LatexCommand \label{xdata}
2523 Variables declared with this storage class will be placed in the extern
2529 storage class for Large Memory model .
2537 xdata unsigned char xduc;
2538 \layout Subsubsection
2541 \begin_inset LatexCommand \label{data}
2552 storage class for Small Memory model.
2553 Variables declared with this storage class will be allocated in the internal
2563 \layout Subsubsection
2566 \begin_inset LatexCommand \label{idata}
2573 Variables declared with this storage class will be allocated into the indirectly
2574 addressable portion of the internal ram of a 8051 .
2582 \layout Subsubsection
2585 \begin_inset LatexCommand \label{bit}
2592 This is a data-type and a storage class specifier.
2593 When a variable is declared as a bit , it is allocated into the bit addressable
2600 \layout Subsubsection
2603 \begin_inset LatexCommand \label{sfr / sbit}
2610 Like the bit keyword,
2614 signifies both a data-type and storage class, they are used to describe
2615 the special function registers and special bit variables of a 8051.
2630 /* special function register P0 at location 0x80 */
2641 \begin_inset LatexCommand \label{Optimizations}
2648 SDCC performs a a host of standard optimizations in addition to some MCU
2649 specific optimizations.
2653 Sub-expression elimination
2654 \begin_inset LatexCommand \label{Sub-expression Elimination}
2665 common subexpression elimination.
2686 will be translated to
2698 Some subexpressions are not as obvious as the above example.
2711 In this case the address arithmetic
2715 will be computed only once; the equivalent code in C would be.
2727 The compiler will try to keep these temporary variables in registers.
2730 Dead-Code elimination.
2731 \begin_inset LatexCommand \label{Dead-code elimination}
2748 \protected_separator
2750 \protected_separator
2754 \protected_separator
2756 \protected_separator
2758 \protected_separator
2760 \protected_separator
2762 \protected_separator
2766 \protected_separator
2768 \protected_separator
2769 global = 1; /* dead store */
2772 \protected_separator
2774 \protected_separator
2778 \protected_separator
2780 \protected_separator
2784 \protected_separator
2786 \protected_separator
2787 global = 3; /* unreachable */
2797 int global; void f ()
2800 \protected_separator
2802 \protected_separator
2806 \protected_separator
2808 \protected_separator
2810 \protected_separator
2814 \protected_separator
2821 \begin_inset LatexCommand \label{Copy-Propagation}
2836 \protected_separator
2838 \protected_separator
2840 \protected_separator
2844 \protected_separator
2846 \protected_separator
2848 \protected_separator
2852 \protected_separator
2854 \protected_separator
2856 \protected_separator
2860 \protected_separator
2862 \protected_separator
2864 \protected_separator
2878 \protected_separator
2880 \protected_separator
2884 \protected_separator
2886 \protected_separator
2890 \protected_separator
2892 \protected_separator
2896 \protected_separator
2898 \protected_separator
2904 Note: the dead stores created by this copy propagation will be eliminated
2905 by dead-code elimination .
2909 \begin_inset LatexCommand \label{Loop Optimizations}
2916 Two types of loop optimizations are done by SDCC loop invariant lifting
2917 and strength reduction of loop induction variables.In addition to the strength
2918 reduction the optimizer marks the induction variables and the register
2919 allocator tries to keep the induction variables in registers for the duration
2921 Because of this preference of the register allocator , loop induction optimizat
2922 ion causes an increase in register pressure, which may cause unwanted spilling
2923 of other temporary variables into the stack / data space .
2924 The compiler will generate a warning message when it is forced to allocate
2925 extra space either on the stack or data space.
2926 If this extra space allocation is undesirable then induction optimization
2927 can be eliminated either for the entire source file ( with --noinduction
2928 option) or for a given function only (#pragma NOINDUCTION).
2929 \layout Subsubsection
2932 \begin_inset LatexCommand \label{Loop Invariant}
2944 for (i = 0 ; i < 100 ; i ++)
2947 \protected_separator
2949 \protected_separator
2951 \protected_separator
2962 for ( i = 0; i < 100; i++ ) f += itemp;
2965 As mentioned previously some loop invariants are not as apparent, all static
2966 address computations are also moved out of the loop.
2967 \layout Subsubsection
2969 Strength reduction :
2970 \begin_inset LatexCommand \label{Strength Reduction}
2977 This optimization substitutes an expression by a cheaper expression.
2985 for (i=0;i < 100; i++) ar[i*5] = i*3;
2997 for (i=0;i< 100;i++) {
3000 \protected_separator
3002 \protected_separator
3004 \protected_separator
3005 ar[itemp1] = itemp2;
3008 \protected_separator
3010 \protected_separator
3012 \protected_separator
3016 \protected_separator
3018 \protected_separator
3020 \protected_separator
3026 The more expensive multiplication is changed to a less expensive addition.
3027 \layout Subsubsection
3030 \begin_inset LatexCommand \label{Loop reversing}
3037 This optimization is done to reduce the overhead of checking loop boundaries
3038 for every iteration.
3039 Some simple loops can be reversed and implemented using a
3040 \begin_inset Quotes eld
3043 decrement and jump if not zero
3044 \begin_inset Quotes erd
3048 SDCC checks for the following criterion to determine if a loop is reversible
3049 (note: more sophisticated compiers use data-dependency analysis to make
3050 this determination, SDCC uses a more simple minded analysis).
3053 The 'for' loop is of the form
3056 \begin_inset Quotes eld
3059 for ( <symbol> = <expression> ; <sym> [< | <=] <expression> ; [<sym>++ |
3063 \protected_separator
3065 \protected_separator
3067 \protected_separator
3069 \protected_separator
3071 \protected_separator
3073 \protected_separator
3075 \protected_separator
3077 \begin_inset Quotes erd
3083 The <for body> does not contain
3084 \begin_inset Quotes eld
3088 \begin_inset Quotes erd
3092 \begin_inset Quotes erd
3098 All goto's are contained within the loop.
3101 No function calls within the loop.
3104 The loop control variable <sym> is not assigned any value within the loop
3107 The loop control variable does NOT participate in any arithmetic operation
3111 There are NO switch statements in the loop.
3114 Note djnz instruction can be used for 8-bit values ONLY, therefore it is
3115 advantageous to declare loop control symbols as either 'char' or 'short',
3116 ofcourse this may not be possible on all situations.
3119 Algebraic simplifications:
3120 \begin_inset LatexCommand \label{Algebraic Simplifications}
3127 SDCC does numerous algebraic simplifications, the following is a small sub-set
3128 of these optimizations.
3139 i = j + 0 ; /* changed to */ i = j;
3141 i /= 2; /* changed to */ i >>= 1;
3143 i = j - j ; /* changed to */ i = 0;
3145 i = j / 1 ; /* changed to */ i = j;
3148 Note the subexpressions given above are generally introduced by macro expansions
3149 or as a result of copy/constant propagation.
3152 'switch' statements.
3153 \begin_inset LatexCommand \label{Switch Statement}
3160 SDCC changes switch statements to jump tables when the following conditions
3165 The case labels are in numerical sequence , the labels need not be in order,
3166 and the starting number need not be one or zero.
3175 \protected_separator
3177 \protected_separator
3179 \protected_separator
3181 \protected_separator
3183 \protected_separator
3185 \protected_separator
3187 \protected_separator
3189 \protected_separator
3191 \protected_separator
3193 \protected_separator
3195 \protected_separator
3197 \protected_separator
3199 \protected_separator
3204 \protected_separator
3206 \protected_separator
3208 \protected_separator
3210 \protected_separator
3212 \protected_separator
3214 \protected_separator
3216 \protected_separator
3218 \protected_separator
3220 \protected_separator
3222 \protected_separator
3224 \protected_separator
3226 \protected_separator
3228 \protected_separator
3234 \protected_separator
3236 \protected_separator
3238 \protected_separator
3240 \protected_separator
3242 \protected_separator
3244 \protected_separator
3246 \protected_separator
3248 \protected_separator
3250 \protected_separator
3252 \protected_separator
3254 \protected_separator
3256 \protected_separator
3258 \protected_separator
3264 \protected_separator
3266 \protected_separator
3268 \protected_separator
3270 \protected_separator
3272 \protected_separator
3274 \protected_separator
3276 \protected_separator
3278 \protected_separator
3280 \protected_separator
3282 \protected_separator
3284 \protected_separator
3286 \protected_separator
3288 \protected_separator
3294 \protected_separator
3296 \protected_separator
3298 \protected_separator
3300 \protected_separator
3302 \protected_separator
3304 \protected_separator
3306 \protected_separator
3308 \protected_separator
3310 \protected_separator
3312 \protected_separator
3314 \protected_separator
3316 \protected_separator
3318 \protected_separator
3323 \protected_separator
3325 \protected_separator
3327 \protected_separator
3329 \protected_separator
3331 \protected_separator
3333 \protected_separator
3335 \protected_separator
3337 \protected_separator
3339 \protected_separator
3341 \protected_separator
3343 \protected_separator
3345 \protected_separator
3347 \protected_separator
3349 \protected_separator
3351 \protected_separator
3353 \protected_separator
3355 \protected_separator
3357 \protected_separator
3361 Both the above switch statements will be implemented using a jump-table.
3364 The number of case labels is at least three, since it takes two conditional
3365 statements to handle the boundary conditions.
3368 The number of case labels is less than 84, since each label takes 3 bytes
3369 and a jump-table can be utmost 256 bytes long.
3373 Switch statements which have gaps in the numeric sequence or those that
3374 have more that 84 case labels can be split into more than one switch statement
3375 for efficient code generation.
3412 If the above switch statement is broken down into two switch statements
3453 then both the switch statements will be implemented using jump-tables whereas
3454 the unmodified switch statement will not be .
3457 bit-shifting operations.
3458 \begin_inset LatexCommand \label{bit shifting}
3465 Bit shifting is one of the most frequently used operation in embedded programmin
3467 SDCC tries to implement bit-shift operations in the most efficient way
3489 generates the following code.
3503 In general SDCC will never setup a loop if the shift count is known.
3535 Note that SDCC stores numbers in
3541 \layout Subsubsection
3544 \begin_inset LatexCommand \label{bit rotation}
3551 A special case of the bit-shift operation is bit rotation, SDCC recognizes
3552 the following expression to be a left bit-rotation.
3562 i = ( ( i << 1) | ( i >> 7));
3567 will generate the following code.
3579 SDCC uses pattern matching on the parse tree to determine this operation
3580 .Variations of this case will also be recognized as bit-rotation i.e
3582 i = ((i >> 7) | (i << 1));
3584 /* left-bit rotation */
3588 \begin_inset LatexCommand \label{Highest Order Bit}
3595 It is frequently required to obtain the highest order bit of an integral
3596 type (int,long,short or char types).
3597 SDCC recognizes the following expression to yield the highest order bit
3598 and generates optimized code for it.
3612 \protected_separator
3614 \protected_separator
3616 \protected_separator
3621 \protected_separator
3623 \protected_separator
3625 \protected_separator
3626 hob = (gint >> 15) & 1;
3629 \protected_separator
3631 \protected_separator
3633 \protected_separator
3640 Will generate the following code.
3646 \protected_separator
3648 \protected_separator
3650 \protected_separator
3652 \protected_separator
3654 \protected_separator
3656 \protected_separator
3658 \protected_separator
3660 \protected_separator
3662 \protected_separator
3664 \protected_separator
3666 \protected_separator
3668 \protected_separator
3670 \protected_separator
3672 \protected_separator
3674 \protected_separator
3676 \protected_separator
3678 \protected_separator
3680 \protected_separator
3682 \protected_separator
3684 \protected_separator
3686 \protected_separator
3688 \protected_separator
3690 \protected_separator
3692 \protected_separator
3694 \protected_separator
3696 \protected_separator
3698 \protected_separator
3700 \protected_separator
3702 \protected_separator
3706 \protected_separator
3708 \protected_separator
3710 \protected_separator
3712 \protected_separator
3714 \protected_separator
3716 \protected_separator
3718 \protected_separator
3720 \protected_separator
3722 \protected_separator
3724 \protected_separator
3726 \protected_separator
3728 \protected_separator
3730 \protected_separator
3732 \protected_separator
3734 \protected_separator
3736 \protected_separator
3738 \protected_separator
3740 \protected_separator
3742 \protected_separator
3744 \protected_separator
3746 \protected_separator
3748 \protected_separator
3750 \protected_separator
3752 \protected_separator
3754 \protected_separator
3756 \protected_separator
3760 \protected_separator
3762 \protected_separator
3764 \protected_separator
3766 \protected_separator
3768 \protected_separator
3770 \protected_separator
3772 \protected_separator
3774 \protected_separator
3776 \protected_separator
3778 \protected_separator
3780 \protected_separator
3782 \protected_separator
3784 \protected_separator
3786 \protected_separator
3788 \protected_separator
3790 \protected_separator
3792 \protected_separator
3794 \protected_separator
3796 \protected_separator
3798 \protected_separator
3800 \protected_separator
3802 \protected_separator
3804 \protected_separator
3806 \protected_separator
3808 \protected_separator
3810 \protected_separator
3812 \protected_separator
3814 \protected_separator
3816 \protected_separator
3820 \protected_separator
3822 \protected_separator
3824 \protected_separator
3826 \protected_separator
3828 \protected_separator
3830 \protected_separator
3832 \protected_separator
3834 \protected_separator
3836 \protected_separator
3838 \protected_separator
3840 \protected_separator
3842 \protected_separator
3844 \protected_separator
3846 \protected_separator
3848 \protected_separator
3850 \protected_separator
3852 \protected_separator
3854 \protected_separator
3856 \protected_separator
3858 \protected_separator
3860 \protected_separator
3862 \protected_separator
3864 \protected_separator
3866 \protected_separator
3868 \protected_separator
3870 \protected_separator
3872 \protected_separator
3874 \protected_separator
3876 \protected_separator
3880 \protected_separator
3882 \protected_separator
3884 \protected_separator
3886 \protected_separator
3888 \protected_separator
3890 \protected_separator
3892 \protected_separator
3894 \protected_separator
3896 \protected_separator
3898 \protected_separator
3900 \protected_separator
3902 \protected_separator
3904 \protected_separator
3906 \protected_separator
3908 \protected_separator
3910 \protected_separator
3912 \protected_separator
3914 \protected_separator
3916 \protected_separator
3918 \protected_separator
3920 \protected_separator
3922 \protected_separator
3924 \protected_separator
3926 \protected_separator
3928 \protected_separator
3930 \protected_separator
3932 \protected_separator
3934 \protected_separator
3936 \protected_separator
3940 \protected_separator
3942 \protected_separator
3944 \protected_separator
3946 \protected_separator
3948 \protected_separator
3950 \protected_separator
3952 \protected_separator
3954 \protected_separator
3956 \protected_separator
3958 \protected_separator
3960 \protected_separator
3962 \protected_separator
3964 \protected_separator
3966 \protected_separator
3968 \protected_separator
3970 \protected_separator
3972 \protected_separator
3974 \protected_separator
3976 \protected_separator
3978 \protected_separator
3980 \protected_separator
3982 \protected_separator
3984 \protected_separator
3986 \protected_separator
3988 \protected_separator
3990 \protected_separator
3994 Variations of this case however will NOT be recognized .
3995 It is a standard C expression , so I heartily recommend this be the only
3996 way to get the highest order bit, (it is portable).
3997 Of course it will be recognized even if it is embedded in other expressions.
4007 xyz = gint + ((gint >> 15) & 1);
4010 will still be recognized.
4013 Peep-hole optimizer.
4014 \begin_inset LatexCommand \label{Peep-Hole}
4021 The compiler uses a rule based , pattern matching and re-writing mechanism
4022 for peep-hole optimization .
4027 a peep-hole optimizer by Christopher W.
4028 Fraser (cwfraser@microsoft.com).
4029 A default set of rules are compiled into the compiler, additional rules
4030 may be added with the --peep-file <filename> option.
4031 The rule language is best illustrated with examples.
4040 mov a,%1 } by { mov %1,a }
4043 The above rule will the following assembly sequence
4061 Note: All occurrences of a '%n' ( pattern variable ) must denote the same
4063 With the above rule, the assembly sequence
4073 will remain unmodified.
4074 Other special case optimizations may be added by the user (via --peep-file
4076 some variants of the 8051 MCU allow only 'AJMP' and 'ACALL' , the following
4077 two rules will change all 'LJMP' & 'LCALL' to 'AJMP' & 'ACALL'.
4082 replace { lcall %1 } by { acall %1 }
4084 replace { ljmp %1 } by { ajmp %1 }
4087 The inline-assembler' code is also passed through the peep hole optimizer,
4088 thus the peephole optimizer can also be used as an assembly level macro
4090 The rules themselves are MCU dependent whereas the rule language infra-structur
4091 e is MCU independent.
4092 Peephole optimization rules for other MCU can be easily programmed using
4096 The syntax for a rule is as follows ,
4101 rule := replace [ restart ] '{' <assembly sequence> '
4106 \protected_separator
4108 \protected_separator
4110 \protected_separator
4112 \protected_separator
4114 \protected_separator
4116 \protected_separator
4118 \protected_separator
4120 \protected_separator
4122 \protected_separator
4124 \protected_separator
4126 \protected_separator
4128 \protected_separator
4130 \protected_separator
4132 \protected_separator
4138 \protected_separator
4140 \protected_separator
4142 \protected_separator
4144 \protected_separator
4146 \protected_separator
4148 \protected_separator
4150 \protected_separator
4152 \protected_separator
4154 \protected_separator
4156 \protected_separator
4158 \protected_separator
4160 \protected_separator
4162 \protected_separator
4164 \protected_separator
4166 \protected_separator
4168 \protected_separator
4169 <assembly sequence> '
4174 \protected_separator
4176 \protected_separator
4178 \protected_separator
4180 \protected_separator
4182 \protected_separator
4184 \protected_separator
4186 \protected_separator
4188 \protected_separator
4190 \protected_separator
4192 \protected_separator
4194 \protected_separator
4196 \protected_separator
4198 \protected_separator
4200 \protected_separator
4201 '}' [if <functionName> ] '
4205 <assembly sequence> := assembly instruction (each instruction including
4206 labels must be on a separate line).
4207 \protected_separator
4209 \protected_separator
4213 The optimizer will apply to the rules one by one from the top in the sequence
4214 of their appearance, it will terminate when all rules are exhausted.
4219 ' option is specified, then the optimizer will start matching the rules
4220 again from the top, this option for a rule is expensive (performance),
4221 it is intended to be used in situations where a transformation will trigger
4222 the same rule again.
4223 A good example of this the following rule.
4239 Note that the replace pattern cannot be a blank, but can be a comment line.
4244 ' option only the inner most 'pop' 'push' pair would be eliminated.
4275 ' option the rule will be applied again to the resulting code and the all
4280 pairs will be eliminated to yield
4290 A conditional function can be attached to a rule.
4291 Attaching rules are somewhat more involved, let me illustrate this with
4300 \protected_separator
4302 \protected_separator
4304 \protected_separator
4310 \protected_separator
4312 \protected_separator
4314 \protected_separator
4317 %2:} if labelInRange
4320 The optimizer does a look-up of a function name table defined in function
4333 ', if it finds a corresponding entry the function is called.
4334 Note there can be no parameters specified for these functions, in this
4339 ' is crucial, since the function
4343 expects to find the label in that particular variable (the hash table containin
4344 g the variable bindings is passed as a parameter).
4345 If you want to code more such functions , take a close look at the function
4350 and the calling mechanism in source file
4355 I know this whole thing is a little kludgey , may be some day we will have
4357 If you are looking at this file, you will also see the default rules that
4358 are compiled into the compiler, you can your own rules in the default set
4359 there if you get tired of specifying the
4367 \begin_inset LatexCommand \label{Pointers}
4374 SDCC allows (via language extensions) pointers to explicitly point to any
4375 of the memory spaces of the 8051.
4376 In addition to the explicit pointers, the compiler also allows a
4380 class of pointers which can be used to point to any of the memory spaces.
4384 Pointer declaration examples.
4389 /* pointer physically in xternal ram pointing to object in internal ram
4392 data unsigned char * xdata p;
4399 /* pointer physically in code rom pointing to data in xdata space */
4401 xdata unsigned char * code p;
4408 /* pointer physically in code space pointing to data in code space */
4410 code unsigned char * code p;
4414 /* the folowing is a generic pointer physically located in xdata space */
4419 Well you get the idea.
4420 For compatibility with the previous version of the compiler, the following
4421 syntax for pointer declaration is also supported.
4422 Note the above examples will be portable to other commercially available
4428 unsigned char _xdata *ucxdp; /* pointer to data in external ram */
4431 \protected_separator
4432 *ucdp ; /* pointer to data in internal ram */
4435 \protected_separator
4436 *uccp ; /* pointer to data in R/O code space */
4438 unsigned char _idata *uccp;
4439 \protected_separator
4440 /* pointer to upper 128 bytes of ram */
4443 All unqualified pointers are treated as 3 - byte '_generic' pointers.
4444 These type of pointers can also to be explicitly declared.
4449 unsigned char _generic *ucgp;
4452 The highest order byte of the generic pointers contains the data space informati
4454 Assembler support routines are called whenever data is stored or retrieved
4455 using _generic pointers.
4456 These are useful for developing reusable library routines.
4457 Explicitly specifying the pointer type will generate the most efficient
4459 Pointers declared using a mixture of OLD/NEW style could have unpredictable
4463 Parameters & Local Variables
4464 \begin_inset LatexCommand \label{Auto Variables}
4471 Automatic (local) variables and parameters to functions can either be placed
4472 on the stack or in data-space.
4473 The default action of the compiler is to place these variables in the internal
4474 RAM ( for small model) or external RAM (for Large model).
4475 They can be placed on the stack either by using the
4479 compiler option or by using the 'reentrant' keyword in the function declaration.
4490 unsigned short foo( short i) reentrant {
4498 Note that when the parameters & local variables are declared in the internal/ext
4499 ernal ram the functions are non-reentrant.
4500 Since stack space on 8051 is limited the
4508 option should be used sparingly.
4509 Note the reentrant keyword just means that the parameters & local variables
4510 will be allocated to the stack, it DOES NOT mean that the function is register
4514 When compiled with the default option (i.e.
4515 non-reentrant ), local variables can be assigned storage classes and absolute
4528 unsigned short foo() {
4531 \protected_separator
4533 \protected_separator
4534 xdata unsigned short i;
4537 \protected_separator
4539 \protected_separator
4543 \protected_separator
4545 \protected_separator
4546 data at 0x31 unsiged short j;
4554 In the above example the variable
4558 will be allocated in the external ram,
4562 in bit addressable space and
4567 When compiled with the
4571 or when a function is declared as
4575 local variables cannot be assigned storage classes or absolute addresses.
4578 Parameters however are not allowed any storage class, (storage classes for
4579 parameters will be ignored), their allocation is governed by the memory
4580 model in use , and the reentrancy options.
4584 \begin_inset LatexCommand \label{Overlaying}
4591 For non-reentrant functions SDCC will try to reduce internal ram space usage
4592 by overlaying parameters and local variables of a function (if possible).
4593 Parameters and local variables of a function will be allocated to an overlayabl
4594 e segment if the function has
4596 no other function calls and the function is non-reentrant and the memory
4600 If an explicit storage class is specified for a local variable , it will
4604 Note that the compiler (not the linkage editor) makes the decision for overlayin
4606 Functions that are called from an interrupt service routine should be preceded
4607 by a #pragma NOOVERLAY if they are not reentrant Along the same lines the
4608 compiler does not do any processing with the inline assembler code so the
4609 compiler might incorrectly assign local variables and parameters of a function
4610 into the overlay segment if the only function call from a function is from
4611 inline assembler code, it is safe to use the #pragma NOOVERLAY for functions
4612 which call other functions using inline assembler code.
4615 Parameters and Local variables of functions that contain 16 or 32 bit multiplica
4616 tion or division will NOT be overlayed since these are implemented using
4629 void set_error( unsigned short errcd)
4634 \protected_separator
4636 \protected_separator
4643 void some_isr () interrupt 2 using 1
4648 \protected_separator
4650 \protected_separator
4655 \protected_separator
4657 \protected_separator
4661 \protected_separator
4663 \protected_separator
4670 In the above example the parameter
4678 would be assigned to the overlayable segment (if the #pragma NOOVERLAY
4679 was not present) , this could cause unpredictable runtime behavior.
4680 The pragma NOOVERLAY ensures that the parameters and local variables for
4681 the function are NOT overlayed.
4685 \begin_inset LatexCommand \label{Critical}
4692 A special keyword may be associated with a function declaring it as '
4697 SDCC will generate code to disable all interrupts upon entry to a critical
4698 function and enable them back before returning .
4699 Note that nesting critical functions may cause unpredictable results.
4720 The critical attribute maybe used with other attributes like
4725 Absolute addressing.
4726 \begin_inset LatexCommand \label{Absolute Addressing}
4733 Data items can be assigned an absolute address with the
4737 keyword, in addition to a storage class.
4746 xdata at 0x8000 unsigned char PORTA_8255 ;
4749 In the above example the
4753 will be allocated to the location 0x8000 of the external ram.
4757 Note that is this feature is provided to give the programmer access to
4761 devices attached to the controller.
4762 The compiler does not actually reserve any space for variables declared
4763 in this way (they are implemented with an equate in the assembler), thus
4764 it is left to the programmer to make sure there are no overlaps with other
4765 variables that are declared without the absolute address, the assembler
4766 listing file (.lst) and the linker output files (<filename>.rst) and (<filename>.m
4767 ap) are a good places to look for such overlaps.
4770 Absolute address can be specified for variables in all storage classes.
4783 The above example will allocate the variable at offset 0x02 in the bit-addressab
4785 There is no real advantage to assigning absolute addresses to variables
4786 in this manner , unless you want strict control over all the variables
4790 Interrupt Service Routines
4791 \begin_inset LatexCommand \label{Interrupt Service Rouines}
4798 SDCC allows interrupt service routines to be coded in C, with some extended
4804 void timer_isr (void) interrupt 2 using 1
4814 The number following the 'interrupt' keyword is the interrupt number this
4815 routine will service.
4816 The compiler will insert a call to this routine in the interrupt vector
4817 table for the interrupt number specified.
4818 The 'using' keyword is used to tell the compiler to use the specified register
4819 bank (8051 specific) when generating code for this function.
4820 Note that when some function is called from an interrupt service routine
4821 it should be preceded by a #pragma NOOVERLAY (if it is not reentrant) .
4822 A special note here, int (16 bit) and long (32 bit) integer division, multiplic
4823 ation & modulus operations are implemented using external support routines
4824 developed in ANSI-C, if an interrupt service routine needs to do any of
4825 these operations then the support routines (as mentioned in a following
4826 section) will have to recompiled using the --stack-auto option and the
4827 source file will need to be compiled using the --int-long-rent compiler
4831 If you have multiple source files in your project, interrupt service routines
4832 can be present in any of them, but a prototype of the isr MUST be present
4833 in the file that contains the function
4840 Interrupt Numbers and the corresponding address & descriptions for the Standard
4841 8051 are listed below.
4842 SDCC will automatically adjust the interrupt vector table to the maximum
4843 interrupt number specified.
4847 \protected_separator
4849 \protected_separator
4851 \protected_separator
4853 \protected_separator
4855 \protected_separator
4857 \protected_separator
4859 \protected_separator
4861 \protected_separator
4863 \protected_separator
4865 \protected_separator
4867 \protected_separator
4869 \protected_separator
4871 \protected_separator
4873 \protected_separator
4875 \protected_separator
4877 \protected_separator
4879 \protected_separator
4881 \protected_separator
4885 \protected_separator
4887 \protected_separator
4889 \protected_separator
4891 \protected_separator
4893 \protected_separator
4895 \protected_separator
4897 \protected_separator
4899 \protected_separator
4901 \protected_separator
4903 \protected_separator
4905 \protected_separator
4907 \protected_separator
4909 \protected_separator
4911 \protected_separator
4913 \protected_separator
4915 \protected_separator
4917 \protected_separator
4919 \protected_separator
4921 \protected_separator
4923 \protected_separator
4925 \protected_separator
4927 \protected_separator
4929 \protected_separator
4931 \protected_separator
4933 \protected_separator
4935 \protected_separator
4937 \protected_separator
4939 \protected_separator
4941 \protected_separator
4943 \protected_separator
4947 \protected_separator
4949 \protected_separator
4951 \protected_separator
4953 \protected_separator
4955 \protected_separator
4957 \protected_separator
4959 \protected_separator
4961 \protected_separator
4963 \protected_separator
4965 \protected_separator
4967 \protected_separator
4969 \protected_separator
4971 \protected_separator
4973 \protected_separator
4975 \protected_separator
4977 \protected_separator
4979 \protected_separator
4981 \protected_separator
4983 \protected_separator
4985 \protected_separator
4987 \protected_separator
4989 \protected_separator
4991 \protected_separator
4993 \protected_separator
4995 \protected_separator
4997 \protected_separator
4999 \protected_separator
5001 \protected_separator
5003 \protected_separator
5005 \protected_separator
5007 \protected_separator
5009 \protected_separator
5011 \protected_separator
5015 \protected_separator
5017 \protected_separator
5019 \protected_separator
5021 \protected_separator
5023 \protected_separator
5025 \protected_separator
5027 \protected_separator
5029 \protected_separator
5031 \protected_separator
5033 \protected_separator
5035 \protected_separator
5037 \protected_separator
5039 \protected_separator
5041 \protected_separator
5043 \protected_separator
5045 \protected_separator
5047 \protected_separator
5049 \protected_separator
5051 \protected_separator
5053 \protected_separator
5055 \protected_separator
5057 \protected_separator
5059 \protected_separator
5061 \protected_separator
5063 \protected_separator
5065 \protected_separator
5067 \protected_separator
5069 \protected_separator
5071 \protected_separator
5073 \protected_separator
5077 \protected_separator
5079 \protected_separator
5081 \protected_separator
5083 \protected_separator
5085 \protected_separator
5087 \protected_separator
5089 \protected_separator
5091 \protected_separator
5093 \protected_separator
5095 \protected_separator
5097 \protected_separator
5099 \protected_separator
5101 \protected_separator
5103 \protected_separator
5105 \protected_separator
5107 \protected_separator
5109 \protected_separator
5111 \protected_separator
5113 \protected_separator
5115 \protected_separator
5117 \protected_separator
5119 \protected_separator
5121 \protected_separator
5123 \protected_separator
5125 \protected_separator
5127 \protected_separator
5129 \protected_separator
5131 \protected_separator
5133 \protected_separator
5135 \protected_separator
5137 \protected_separator
5139 \protected_separator
5143 \protected_separator
5145 \protected_separator
5147 \protected_separator
5149 \protected_separator
5151 \protected_separator
5153 \protected_separator
5155 \protected_separator
5157 \protected_separator
5159 \protected_separator
5161 \protected_separator
5163 \protected_separator
5165 \protected_separator
5167 \protected_separator
5169 \protected_separator
5171 \protected_separator
5173 \protected_separator
5175 \protected_separator
5177 \protected_separator
5179 \protected_separator
5181 \protected_separator
5183 \protected_separator
5185 \protected_separator
5187 \protected_separator
5189 \protected_separator
5191 \protected_separator
5193 \protected_separator
5195 \protected_separator
5197 \protected_separator
5199 \protected_separator
5201 \protected_separator
5203 \protected_separator
5205 \protected_separator
5207 \protected_separator
5211 If the interrupt service routine is defined without a register bank or with
5212 register bank 0 (using 0), the compiler will save the registers used by
5213 itself on the stack (upon entry and restore them at exit), however if such
5214 an interrupt service routine calls another function then the entire register
5215 bank will be saved on the stack.
5216 This scheme may be advantageous for small interrupt service routines which
5217 have low register usage.
5220 If the interrupt service routine is defined to be using a specific register
5222 \begin_inset Quotes eld
5226 \begin_inset Quotes erd
5230 \begin_inset Quotes erd
5234 \begin_inset Quotes erd
5238 \begin_inset Quotes eld
5242 \begin_inset Quotes erd
5245 are save and restored, if such an interrupt service routine calls another
5246 function (using another register bank) then the entire register bank of
5247 the called function will be saved on the stack.
5248 This scheme is recommended for larger interrupt service routines.
5251 Calling other functions from an interrupt service routine is not recommended
5252 avoid it if possible.
5256 \begin_inset LatexCommand \label{Startup}
5263 The compiler inserts a jump to the C routine
5265 _sdcc__external__startup()
5267 at the start of the CODE area.
5268 This routine can be found in the file
5270 SDCCDIR/sdcc51lib/_startup.c
5272 , by default this routine returns 0, if this routine returns a non-zero
5273 value , the static & global variable initialization will be skipped and
5274 the function main will be invoked, other wise static & global variables
5275 will be initialized before the function main is invoked.
5278 Inline assembler code.
5279 \begin_inset LatexCommand \label{Inline}
5286 SDCC allows the use of in-line assembler with a few restriction as regards
5288 All labels defined within inline assembler code HAS TO BE of the
5292 where nnnn is a number less than 100 (which implies a limit of utmost 100
5293 inline assembler labels
5298 It is strongly recommended that each assembly instruction (including labels)
5299 be placed in a separate line ( as the example shows).
5306 command line option is used, the inline assembler code will be passed through
5307 the peephole optimizer, this might cause some unexpected changes in the
5308 inline assembler code, please go throught the peephole optimizer rules
5309 defined in file 'SDCCpeeph.def' carefully before using this option.
5322 \protected_separator
5324 \protected_separator
5326 \protected_separator
5328 \protected_separator
5330 \protected_separator
5336 \protected_separator
5338 \protected_separator
5340 \protected_separator
5342 \protected_separator
5344 \protected_separator
5350 The inline assembler code can contain any valid code understood by the assembler
5351 (this includes any assembler directives and comment lines ) .
5352 The compiler does not do any validation of the code within the
5361 Inline assembler code cannot reference any C-Labels however it can reference
5362 labels defined by the inline assembler.
5380 \protected_separator
5382 \protected_separator
5384 \protected_separator
5385 ; some assembler code
5388 \protected_separator
5390 \protected_separator
5396 /* some more c code */
5399 \protected_separator
5400 /* inline assembler cannot reference this label */
5405 \protected_separator
5407 \protected_separator
5408 $0003: ;label (can be reference by inline assembler only)
5418 In other words inline assembly code can access labels defined in inline
5420 The same goes the other way, ie.
5421 labels defines in inline assembly CANNOT be accessed by C statements.
5424 int (16 bit) and long (32 bit ) support.
5425 \begin_inset LatexCommand \label{int and long}
5432 For signed & unsigned int (16 bit) and long (32 bit) variables, division,
5433 multiplication and modulus operations are implemented by support routines.
5434 These support routines are all developed in ANSI-C to facilitate porting
5436 The following files contain the described routine, all of them can be found
5437 in the directory SDCCDIR/sdcc51lib
5442 _mulsint.c - signed 16 bit multiplication (calls _muluint)
5447 _muluint.c - unsigned 16 bit multiplication
5452 _divsint.c - signed 16 bit division (calls _divuint)
5457 _divuint.c - unsigned 16 bit division.
5462 _modsint.c - signed 16 bit modulus (call _moduint)
5467 _moduint.c - unsigned 16 bit modulus.
5472 _mulslong.c - signed 32 bit multiplication (calls _mululong)
5477 _mululong.c - unsigned32 bit multiplication.
5482 _divslong.c - signed 32 division (calls _divulong)
5487 _divulong.c - unsigned 32 division.
5492 _modslong.c - signed 32 bit modulus (calls _modulong).
5497 _modulong.c - unsigned 32 bit modulus.
5500 All these routines are compiled as non-reentrant and small model.
5501 Since they are compiled as non-reentrant, interrupt service routines should
5502 not do any of the above operations, if this unavoidable then the above
5503 routines will need to ne compiled with the --stack-auto option, after which
5504 the source program will have to be compiled with --int-long-rent option.
5507 Floating point support
5508 \begin_inset LatexCommand \label{Float}
5515 SDCC supports IEEE (single precision 4bytes) floating point numbers.The floating
5516 point support routines are derived from gcc's floatlib.c and consists of
5517 the following routines.
5523 _fsadd.c - add floating point numbers.
5528 _fssub.c - subtract floating point numbers
5533 _fsdiv.c - divide floating point numbers
5538 _fsmul.c - multiply floating point numbers
5543 _fs2uchar.c - convert floating point to unsigned char
5548 _fs2char.c - convert floating point to signed char.
5553 _fs2uint.c - convert floating point to unsigned int.
5558 _fs2int.c - convert floating point to signed int.
5563 _fs2ulong.c - convert floating point to unsigned long.
5568 _fs2long.c - convert floating point to signed long.
5573 _uchar2fs.c - convert unsigned char to floating point
5578 _char2fs.c - convert char to floating point number
5583 _uint2fs.c - convert unsigned int to floating point
5588 _int2fs.c - convert int to floating point numbers
5593 _ulong2fs.c - convert unsigned long to floating point number
5598 _long2fs.c - convert long to floating point number.
5601 Note if all these routines are used simultaneously the data space might
5603 For serious floating point usage it is strongly recommended that the Large
5604 model be used (in which case the floating point routines mentioned above
5605 will need to recompiled with the --model-Large option).
5609 \begin_inset LatexCommand \label{Memory Models}
5616 SDCC allows two memory models, modules compiled with different memory models
5617 should be combined together, the results would be unpredictable.
5618 The support routines supplied with the compiler are compiled in small-model
5619 by default, and will need to be recompiled using the large model if the
5620 large model is used.
5621 In general the use of the large model is discouraged.
5624 When the large model is used all variables declared without a storage class
5625 will be allocated into the external ram, this includes all parameters and
5626 local variables (for non-reentrant functions).
5627 When the small model is used variables without storage class are allocated
5628 in the internal ram.
5631 Judicious usage of the processor specific storage classes and the 'reentrant'
5632 function type will yield much more efficient code, than using the large-model.
5633 Several optimizations are disabled when the program is compiled using the
5634 large model, it is therefore strongly recommdended that the small model
5635 be used unless absolutely required.
5638 Defines created by the compiler.
5639 \begin_inset LatexCommand \label{Defines.}
5646 The compiler creates the following #defines .
5649 SDCC - this Symbol is always defined.
5652 SDCC_STACK_AUTO - this symbol is defined when --stack-auto option is used.
5655 SDCC_MODEL_SMALL - when small model is used.
5658 SDCC_MODEL_LARGE - when --model-large is used.
5661 SDCC_USE_XSTACK - when --xstack option is used.
5665 \begin_inset LatexCommand \label{Pragmaa}
5672 SDCC supports the following
5677 This directives are applicable only at a function level.
5685 \begin_inset LatexCommand \label{pragma save}
5689 - this will save all the current options .
5697 \begin_inset LatexCommand \label{pragma restore}
5701 - will restore the saved options from the last save.
5702 Note that SAVES & RESTOREs cannot be nested.
5703 SDCC uses the same buffer to save the options each time a SAVE is called.
5711 \begin_inset LatexCommand \label{pragma nogcse}
5715 - will stop global subexpression elimination.
5723 \begin_inset LatexCommand \label{pragma noinduction}
5727 - will stop loop induction optimizations .
5735 \begin_inset LatexCommand \label{pragma nojtbound}
5739 - will not generate code for boundary value checking , when switch statements
5740 are turned into jump-tables.
5748 \begin_inset LatexCommand \label{pragma nooverlay}
5752 - the compiler will not overlay the parameters and local variables of a
5761 \begin_inset LatexCommand \label{pragma noloopreverse}
5765 - Will not do loop reversal optimization
5770 EXCLUDE NONE | {acc[,b[,dpl[,dph]]]
5773 \begin_inset LatexCommand \label{pragma exclude}
5777 - The exclude pragma disables generation of pair of push/pop instruction
5778 in ISR function (using interrupt keyword).
5779 The directive should be placed immediately before the ISR function definition
5780 and it affects ALL ISR functions following it.
5781 To enable the normal register saving for ISR functions use
5782 \begin_inset Quotes eld
5785 #pragma EXCLUDE none
5786 \begin_inset Quotes erd
5794 CALLEE-SAVES function1[,function2[,function3...]]
5797 \begin_inset LatexCommand \label{pragma callee-saves}
5801 - The compiler by default uses a caller saves convention for register saving
5802 across function calls, however this can cause unneccessary register pushing
5803 & popping when calling small functions from larger functions.
5804 This option can be used to switch the register saving convention for the
5805 function names specified.
5806 The compiler will not save registers when calling these functions, extra
5807 code will be generated at the entry & exit for these functions to save
5808 & restore the registers used by these functions, this can SUBSTANTIALLY
5809 reduce code & improve run time performance of the generated code.
5810 In future the compiler (with interprocedural analysis) will be able to
5811 determine the appropriate scheme to use for each function call.
5813 \begin_inset LatexCommand \ref{--callee-saves}
5817 command line option is used, the function names specified in #pragma CALLEE-SAV
5818 ES is appended to the list of functions specified inthe command line.
5821 The pragma's are intended to be used to turn-off certain optimizations which
5822 might cause the compiler to generate extra stack / data space to store
5823 compiler generated temporary variables.
5824 This usually happens in large functions.
5825 Pragma directives should be used as shown in the following example, they
5826 are used to control options & optimizations for a given function; pragmas
5835 a function, placing pragma's inside a function body could have unpredictable
5847 \protected_separator
5848 /* save the current settings */
5850 #pragma NOGCSE /* turnoff global subexpression elimination */
5852 #pragma NOINDUCTION /* turn off induction optimizations */
5859 \protected_separator
5861 \protected_separator
5866 \protected_separator
5868 \protected_separator
5872 \protected_separator
5874 \protected_separator
5880 #pragma RESTORE /* turn the optimizations back on */
5883 The compiler will generate a warning message when extra space is allocated.
5884 It is strongly recommended that the SAVE and RESTORE pragma's be used when
5885 changing options for a function.
5889 \begin_inset LatexCommand \label{Library}
5896 The following library routines are provided for your convenience.
5905 - Contains the following functions printf & sprintf these routines are developed
5908 Martijn van Balen <balen@natlab.research.philips.com>.
5914 %[flags][width][b|B|l|L]type
5920 \protected_separator
5922 \protected_separator
5924 \protected_separator
5926 \protected_separator
5928 \protected_separator
5930 \protected_separator
5932 \protected_separator
5934 \protected_separator
5936 \protected_separator
5938 \protected_separator
5940 \protected_separator
5942 \protected_separator
5944 \protected_separator
5946 \protected_separator
5948 \protected_separator
5950 \protected_separator
5952 \protected_separator
5953 left justify output in specified field width
5956 \protected_separator
5958 \protected_separator
5960 \protected_separator
5962 \protected_separator
5964 \protected_separator
5966 \protected_separator
5968 \protected_separator
5970 \protected_separator
5972 \protected_separator
5974 \protected_separator
5976 \protected_separator
5978 \protected_separator
5980 \protected_separator
5982 \protected_separator
5984 \protected_separator
5986 \protected_separator
5988 \protected_separator
5990 \protected_separator
5992 \protected_separator
5994 \protected_separator
5996 \protected_separator
5998 \protected_separator
6000 \protected_separator
6001 prefix output with +/- sign if output is signed type
6004 \protected_separator
6006 \protected_separator
6008 \protected_separator
6010 \protected_separator
6012 \protected_separator
6014 \protected_separator
6016 \protected_separator
6018 \protected_separator
6020 \protected_separator
6022 \protected_separator
6024 \protected_separator
6026 \protected_separator
6028 \protected_separator
6030 \protected_separator
6032 \protected_separator
6034 \protected_separator
6036 \protected_separator
6038 \protected_separator
6040 \protected_separator
6041 prefix output with a blank if it's a signed positive value
6044 \protected_separator
6046 \protected_separator
6048 \protected_separator
6050 \protected_separator
6052 \protected_separator
6054 \protected_separator
6056 \protected_separator
6058 \protected_separator
6060 \protected_separator
6062 \protected_separator
6064 \protected_separator
6066 \protected_separator
6068 \protected_separator
6070 \protected_separator
6072 \protected_separator
6074 \protected_separator
6076 \protected_separator
6078 \protected_separator
6079 specifies minimum number of characters outputted for numbers
6082 \protected_separator
6084 \protected_separator
6086 \protected_separator
6088 \protected_separator
6090 \protected_separator
6092 \protected_separator
6094 \protected_separator
6096 \protected_separator
6098 \protected_separator
6100 \protected_separator
6102 \protected_separator
6104 \protected_separator
6106 \protected_separator
6108 \protected_separator
6110 \protected_separator
6112 \protected_separator
6114 \protected_separator
6116 \protected_separator
6118 \protected_separator
6120 \protected_separator
6122 \protected_separator
6124 \protected_separator
6126 \protected_separator
6128 \protected_separator
6130 \protected_separator
6135 \protected_separator
6137 \protected_separator
6139 \protected_separator
6141 \protected_separator
6143 \protected_separator
6145 \protected_separator
6147 \protected_separator
6149 \protected_separator
6151 \protected_separator
6153 \protected_separator
6155 \protected_separator
6157 \protected_separator
6159 \protected_separator
6161 \protected_separator
6163 \protected_separator
6165 \protected_separator
6167 \protected_separator
6169 \protected_separator
6171 \protected_separator
6173 \protected_separator
6175 \protected_separator
6177 \protected_separator
6179 \protected_separator
6181 \protected_separator
6183 \protected_separator
6184 - For numbers, spaces are added on the left when needed.
6188 \protected_separator
6190 \protected_separator
6192 \protected_separator
6194 \protected_separator
6196 \protected_separator
6198 \protected_separator
6200 \protected_separator
6202 \protected_separator
6204 \protected_separator
6206 \protected_separator
6208 \protected_separator
6210 \protected_separator
6212 \protected_separator
6214 \protected_separator
6216 \protected_separator
6218 \protected_separator
6220 \protected_separator
6222 \protected_separator
6224 \protected_separator
6226 \protected_separator
6228 \protected_separator
6230 \protected_separator
6232 \protected_separator
6234 \protected_separator
6236 \protected_separator
6238 \protected_separator
6240 \protected_separator
6241 If width starts with a zero character, zeroes and used
6244 \protected_separator
6246 \protected_separator
6248 \protected_separator
6250 \protected_separator
6252 \protected_separator
6254 \protected_separator
6256 \protected_separator
6258 \protected_separator
6260 \protected_separator
6262 \protected_separator
6264 \protected_separator
6266 \protected_separator
6268 \protected_separator
6270 \protected_separator
6272 \protected_separator
6274 \protected_separator
6276 \protected_separator
6278 \protected_separator
6280 \protected_separator
6282 \protected_separator
6284 \protected_separator
6286 \protected_separator
6288 \protected_separator
6290 \protected_separator
6292 \protected_separator
6294 \protected_separator
6296 \protected_separator
6301 \protected_separator
6303 \protected_separator
6305 \protected_separator
6307 \protected_separator
6309 \protected_separator
6311 \protected_separator
6313 \protected_separator
6315 \protected_separator
6317 \protected_separator
6319 \protected_separator
6321 \protected_separator
6323 \protected_separator
6325 \protected_separator
6327 \protected_separator
6329 \protected_separator
6331 \protected_separator
6333 \protected_separator
6335 \protected_separator
6337 \protected_separator
6339 \protected_separator
6341 \protected_separator
6343 \protected_separator
6345 \protected_separator
6347 \protected_separator
6349 \protected_separator
6350 - For strings, spaces are are added on the left or right (when
6353 \protected_separator
6355 \protected_separator
6357 \protected_separator
6359 \protected_separator
6361 \protected_separator
6363 \protected_separator
6365 \protected_separator
6367 \protected_separator
6369 \protected_separator
6371 \protected_separator
6373 \protected_separator
6375 \protected_separator
6377 \protected_separator
6379 \protected_separator
6381 \protected_separator
6383 \protected_separator
6385 \protected_separator
6387 \protected_separator
6389 \protected_separator
6391 \protected_separator
6393 \protected_separator
6395 \protected_separator
6397 \protected_separator
6399 \protected_separator
6401 \protected_separator
6403 \protected_separator
6405 \protected_separator
6406 flag '-' is used) when needed.
6410 \protected_separator
6412 \protected_separator
6414 \protected_separator
6416 \protected_separator
6418 \protected_separator
6420 \protected_separator
6422 \protected_separator
6424 \protected_separator
6426 \protected_separator
6428 \protected_separator
6430 \protected_separator
6432 \protected_separator
6434 \protected_separator
6436 \protected_separator
6438 \protected_separator
6440 \protected_separator
6442 \protected_separator
6444 \protected_separator
6446 \protected_separator
6448 \protected_separator
6450 \protected_separator
6452 \protected_separator
6454 \protected_separator
6456 \protected_separator
6458 \protected_separator
6462 \protected_separator
6464 \protected_separator
6466 \protected_separator
6468 \protected_separator
6470 \protected_separator
6472 \protected_separator
6474 \protected_separator
6476 \protected_separator
6478 \protected_separator
6480 \protected_separator
6482 \protected_separator
6484 \protected_separator
6486 \protected_separator
6488 \protected_separator
6490 \protected_separator
6492 \protected_separator
6494 \protected_separator
6496 \protected_separator
6498 \protected_separator
6500 \protected_separator
6501 byte argument (used by d, u, o, x, X)
6504 \protected_separator
6506 \protected_separator
6508 \protected_separator
6510 \protected_separator
6512 \protected_separator
6514 \protected_separator
6516 \protected_separator
6518 \protected_separator
6520 \protected_separator
6522 \protected_separator
6524 \protected_separator
6526 \protected_separator
6528 \protected_separator
6530 \protected_separator
6532 \protected_separator
6534 \protected_separator
6536 \protected_separator
6538 \protected_separator
6540 \protected_separator
6542 \protected_separator
6543 long argument (used by d, u, o, x, X)
6546 \protected_separator
6548 \protected_separator
6550 \protected_separator
6552 \protected_separator
6554 \protected_separator
6556 \protected_separator
6558 \protected_separator
6560 \protected_separator
6562 \protected_separator
6564 \protected_separator
6566 \protected_separator
6568 \protected_separator
6570 \protected_separator
6572 \protected_separator
6574 \protected_separator
6576 \protected_separator
6578 \protected_separator
6582 \protected_separator
6584 \protected_separator
6586 \protected_separator
6588 \protected_separator
6590 \protected_separator
6592 \protected_separator
6594 \protected_separator
6596 \protected_separator
6598 \protected_separator
6600 \protected_separator
6602 \protected_separator
6604 \protected_separator
6606 \protected_separator
6608 \protected_separator
6610 \protected_separator
6612 \protected_separator
6614 \protected_separator
6616 \protected_separator
6618 \protected_separator
6620 \protected_separator
6622 \protected_separator
6624 \protected_separator
6626 \protected_separator
6627 unsigned decimal number
6630 \protected_separator
6632 \protected_separator
6634 \protected_separator
6636 \protected_separator
6638 \protected_separator
6640 \protected_separator
6642 \protected_separator
6644 \protected_separator
6646 \protected_separator
6648 \protected_separator
6650 \protected_separator
6652 \protected_separator
6654 \protected_separator
6656 \protected_separator
6658 \protected_separator
6660 \protected_separator
6662 \protected_separator
6664 \protected_separator
6666 \protected_separator
6668 \protected_separator
6670 \protected_separator
6672 \protected_separator
6674 \protected_separator
6675 unsigned octal number
6678 \protected_separator
6680 \protected_separator
6682 \protected_separator
6684 \protected_separator
6686 \protected_separator
6688 \protected_separator
6690 \protected_separator
6692 \protected_separator
6694 \protected_separator
6696 \protected_separator
6698 \protected_separator
6700 \protected_separator
6702 \protected_separator
6704 \protected_separator
6706 \protected_separator
6708 \protected_separator
6710 \protected_separator
6712 \protected_separator
6714 \protected_separator
6716 \protected_separator
6718 \protected_separator
6720 \protected_separator
6722 \protected_separator
6723 unsigned hexadecimal number (0-9, a-f)
6726 \protected_separator
6728 \protected_separator
6730 \protected_separator
6732 \protected_separator
6734 \protected_separator
6736 \protected_separator
6738 \protected_separator
6740 \protected_separator
6742 \protected_separator
6744 \protected_separator
6746 \protected_separator
6748 \protected_separator
6750 \protected_separator
6752 \protected_separator
6754 \protected_separator
6756 \protected_separator
6758 \protected_separator
6760 \protected_separator
6762 \protected_separator
6764 \protected_separator
6766 \protected_separator
6768 \protected_separator
6770 \protected_separator
6771 unsigned hexadecimal number (0-9, A-F)
6774 \protected_separator
6776 \protected_separator
6778 \protected_separator
6780 \protected_separator
6782 \protected_separator
6784 \protected_separator
6786 \protected_separator
6788 \protected_separator
6790 \protected_separator
6792 \protected_separator
6794 \protected_separator
6796 \protected_separator
6798 \protected_separator
6800 \protected_separator
6802 \protected_separator
6804 \protected_separator
6806 \protected_separator
6808 \protected_separator
6810 \protected_separator
6812 \protected_separator
6814 \protected_separator
6816 \protected_separator
6818 \protected_separator
6822 \protected_separator
6824 \protected_separator
6826 \protected_separator
6828 \protected_separator
6830 \protected_separator
6832 \protected_separator
6834 \protected_separator
6836 \protected_separator
6838 \protected_separator
6840 \protected_separator
6842 \protected_separator
6844 \protected_separator
6846 \protected_separator
6848 \protected_separator
6850 \protected_separator
6852 \protected_separator
6854 \protected_separator
6856 \protected_separator
6858 \protected_separator
6860 \protected_separator
6862 \protected_separator
6864 \protected_separator
6866 \protected_separator
6867 string (generic pointer)
6870 \protected_separator
6872 \protected_separator
6874 \protected_separator
6876 \protected_separator
6878 \protected_separator
6880 \protected_separator
6882 \protected_separator
6884 \protected_separator
6886 \protected_separator
6888 \protected_separator
6890 \protected_separator
6892 \protected_separator
6894 \protected_separator
6896 \protected_separator
6898 \protected_separator
6900 \protected_separator
6902 \protected_separator
6904 \protected_separator
6906 \protected_separator
6908 \protected_separator
6910 \protected_separator
6912 \protected_separator
6914 \protected_separator
6915 generic pointer (I:data/idata, C:code, X:xdata, P:paged)
6918 \protected_separator
6920 \protected_separator
6922 \protected_separator
6924 \protected_separator
6926 \protected_separator
6928 \protected_separator
6930 \protected_separator
6932 \protected_separator
6934 \protected_separator
6936 \protected_separator
6938 \protected_separator
6940 \protected_separator
6942 \protected_separator
6944 \protected_separator
6946 \protected_separator
6948 \protected_separator
6950 \protected_separator
6952 \protected_separator
6954 \protected_separator
6956 \protected_separator
6958 \protected_separator
6960 \protected_separator
6962 \protected_separator
6963 float (still to be implemented)
6966 Also contains a very simple version of printf (
6971 This simplified version of printf supports only the following formats.
6978 \protected_separator
6980 \protected_separator
6982 \protected_separator
6984 \protected_separator
6986 \protected_separator
6988 \protected_separator
6990 \protected_separator
6992 \protected_separator
6994 \protected_separator
6996 \protected_separator
6998 \protected_separator
7010 \protected_separator
7012 \protected_separator
7014 \protected_separator
7016 \protected_separator
7018 \protected_separator
7020 \protected_separator
7022 \protected_separator
7024 \protected_separator
7026 \protected_separator
7028 \protected_separator
7030 \protected_separator
7032 \protected_separator
7034 \protected_separator
7038 \protected_separator
7040 \protected_separator
7042 \protected_separator
7044 \protected_separator
7046 \protected_separator
7048 \protected_separator
7050 \protected_separator
7052 \protected_separator
7054 \protected_separator
7056 \protected_separator
7058 \protected_separator
7060 \protected_separator
7062 \protected_separator
7064 \protected_separator
7066 \protected_separator
7070 \protected_separator
7072 \protected_separator
7074 \protected_separator
7076 \protected_separator
7078 \protected_separator
7080 \protected_separator
7082 \protected_separator
7084 \protected_separator
7086 \protected_separator
7088 \protected_separator
7090 \protected_separator
7092 \protected_separator
7094 \protected_separator
7096 \protected_separator
7098 \protected_separator
7102 \protected_separator
7104 \protected_separator
7106 \protected_separator
7108 \protected_separator
7110 \protected_separator
7112 \protected_separator
7114 \protected_separator
7116 \protected_separator
7118 \protected_separator
7120 \protected_separator
7122 \protected_separator
7124 \protected_separator
7128 \protected_separator
7130 \protected_separator
7132 \protected_separator
7134 \protected_separator
7136 \protected_separator
7138 \protected_separator
7140 \protected_separator
7142 \protected_separator
7144 \protected_separator
7146 \protected_separator
7148 \protected_separator
7152 \protected_separator
7154 \protected_separator
7156 \protected_separator
7158 \protected_separator
7160 \protected_separator
7162 \protected_separator
7164 \protected_separator
7166 \protected_separator
7168 \protected_separator
7170 \protected_separator
7172 \protected_separator
7176 \protected_separator
7178 \protected_separator
7180 \protected_separator
7182 \protected_separator
7184 \protected_separator
7186 \protected_separator
7188 \protected_separator
7190 \protected_separator
7192 \protected_separator
7194 \protected_separator
7196 \protected_separator
7198 \protected_separator
7200 \protected_separator
7202 \protected_separator
7204 \protected_separator
7206 \protected_separator
7208 \protected_separator
7210 \protected_separator
7214 \protected_separator
7216 \protected_separator
7218 \protected_separator
7220 \protected_separator
7222 \protected_separator
7224 \protected_separator
7226 \protected_separator
7228 \protected_separator
7230 \protected_separator
7232 \protected_separator
7234 \protected_separator
7236 \protected_separator
7238 \protected_separator
7240 \protected_separator
7242 \protected_separator
7244 \protected_separator
7246 \protected_separator
7250 \protected_separator
7252 \protected_separator
7254 \protected_separator
7256 \protected_separator
7258 \protected_separator
7260 \protected_separator
7262 \protected_separator
7264 \protected_separator
7266 \protected_separator
7268 \protected_separator
7270 \protected_separator
7272 \protected_separator
7274 \protected_separator
7276 \protected_separator
7278 \protected_separator
7280 \protected_separator
7282 \protected_separator
7286 \protected_separator
7288 \protected_separator
7290 \protected_separator
7292 \protected_separator
7294 \protected_separator
7296 \protected_separator
7298 \protected_separator
7300 \protected_separator
7302 \protected_separator
7304 \protected_separator
7306 \protected_separator
7308 \protected_separator
7310 \protected_separator
7312 \protected_separator
7316 \protected_separator
7318 \protected_separator
7320 \protected_separator
7322 \protected_separator
7324 \protected_separator
7326 \protected_separator
7328 \protected_separator
7330 \protected_separator
7332 \protected_separator
7334 \protected_separator
7336 \protected_separator
7338 \protected_separator
7340 \protected_separator
7349 , --stack-after-data parameter should be used when using this routine, the
7350 routine also takes about 1K of code space .It also expects an external function
7355 to be present (this can be changed).
7356 When using the %s format the string / pointer should be cast to a generic
7364 \begin_inset Quotes eld
7367 my str %s, my int %d
7370 \begin_inset Quotes erd
7373 ,(char _generic *)mystr,myint);
7383 - contains definition for the following macros to be used for variable parameter
7384 list, note that a function can have a variable parameter list if and only
7385 if it is 'reentrant'
7391 va_list, va_start, va_arg, va_end.
7401 - contains defintion for ANSI
7410 Note in this case setjmp & longjmp can be used between functions executing
7411 within the same register bank, if long jmp is executed from a function
7412 that is using a different register bank from the function issuing the setjmp
7413 function, the results may be unpredictable.
7414 The jump buffer requires 3 bytes of data (the stack pointer & a 16 byte
7415 return address), and can be placed in any address space.
7424 - contains the following functions.
7440 - contains the following functions.
7446 strcpy, strncpy, strcat, strncat, strcmp, strncmp, strchr, strrchr, strspn,
7447 strcspn, strpbrk, strstr, strlen, strtok, memcpy, memcmp, memset.
7457 - contains the following routines.
7463 iscntrl, isdigit, isgraph, islower, isupper, isprint, ispunct, isspace,
7464 isxdigit, isalnum, isalpha.
7474 - The malloc routines are developed by Dmitry S.
7475 Obukhov (dso@usa.net).
7476 These routines will allocate memory from the external ram.
7477 Here is a description on how to use them (as described by the author).
7486 \protected_separator
7488 \protected_separator
7490 \protected_separator
7492 \protected_separator
7494 \protected_separator
7496 \protected_separator
7498 \protected_separator
7500 \protected_separator
7501 #define DYNAMIC_MEMORY_SIZE 0x2000
7504 \protected_separator
7506 \protected_separator
7508 \protected_separator
7510 \protected_separator
7512 \protected_separator
7514 \protected_separator
7516 \protected_separator
7518 \protected_separator
7523 \protected_separator
7525 \protected_separator
7527 \protected_separator
7529 \protected_separator
7531 \protected_separator
7533 \protected_separator
7535 \protected_separator
7537 \protected_separator
7538 unsigned char xdata dynamic_memory_pool[DYNAMIC_MEMORY_SIZE];
7541 \protected_separator
7543 \protected_separator
7545 \protected_separator
7547 \protected_separator
7549 \protected_separator
7551 \protected_separator
7553 \protected_separator
7555 \protected_separator
7556 unsigned char xdata * current_buffer;
7559 \protected_separator
7561 \protected_separator
7563 \protected_separator
7565 \protected_separator
7567 \protected_separator
7569 \protected_separator
7571 \protected_separator
7573 \protected_separator
7578 \protected_separator
7580 \protected_separator
7582 \protected_separator
7584 \protected_separator
7586 \protected_separator
7588 \protected_separator
7590 \protected_separator
7592 \protected_separator
7596 \protected_separator
7598 \protected_separator
7600 \protected_separator
7602 \protected_separator
7604 \protected_separator
7606 \protected_separator
7608 \protected_separator
7610 \protected_separator
7614 \protected_separator
7616 \protected_separator
7618 \protected_separator
7620 \protected_separator
7622 \protected_separator
7624 \protected_separator
7626 \protected_separator
7628 \protected_separator
7630 \protected_separator
7632 \protected_separator
7634 \protected_separator
7636 \protected_separator
7641 \protected_separator
7643 \protected_separator
7645 \protected_separator
7647 \protected_separator
7649 \protected_separator
7651 \protected_separator
7653 \protected_separator
7655 \protected_separator
7657 \protected_separator
7659 \protected_separator
7661 \protected_separator
7663 \protected_separator
7665 \protected_separator
7666 init_dynamic_memory(dynamic_memory_pool,DYNAMIC_MEMORY_SIZE);
7669 \protected_separator
7671 \protected_separator
7673 \protected_separator
7675 \protected_separator
7677 \protected_separator
7679 \protected_separator
7681 \protected_separator
7683 \protected_separator
7685 \protected_separator
7687 \protected_separator
7689 \protected_separator
7691 \protected_separator
7692 //Now it's possible to use malloc.
7696 \protected_separator
7698 \protected_separator
7700 \protected_separator
7702 \protected_separator
7704 \protected_separator
7706 \protected_separator
7708 \protected_separator
7710 \protected_separator
7712 \protected_separator
7714 \protected_separator
7716 \protected_separator
7718 \protected_separator
7723 \protected_separator
7725 \protected_separator
7727 \protected_separator
7729 \protected_separator
7731 \protected_separator
7733 \protected_separator
7735 \protected_separator
7737 \protected_separator
7739 \protected_separator
7741 \protected_separator
7743 \protected_separator
7745 \protected_separator
7746 current_buffer = malloc(0x100);
7749 \protected_separator
7751 \protected_separator
7753 \protected_separator
7755 \protected_separator
7766 - Serial IO routines are also developed by Dmitry S.
7767 Obukhov (dso@usa.net).
7768 These routines are interrupt driven with a 256 byte circular buffer, they
7769 also expect external ram to be present.
7770 Please see documentation in file SDCCDIR/sdcc51lib/serial.c .
7771 Note the header file
7772 \begin_inset Quotes eld
7776 \begin_inset Quotes erd
7779 MUST be included in the file containing the 'main' function.
7788 - Alternate serial routine provided by Wolfgang Esslinger <wolfgang@WiredMinds.co
7789 m> these routines are more compact and faster.
7790 Please see documentation in file SDCCDIR/sdcc51lib/ser.c
7799 - Another alternate set of serial routines provided by Josef Wolf <jw@raven.inka.d
7800 e> , these routines do not use the external ram.
7809 - contains register definitions for a standard 8051
7818 - contains register definitions for 80C552.
7827 - contains min, max and other floating point related stuff.
7830 All library routines are compiled as --model-small , they are all non-reentrant,
7831 if you plan to use the large model or want to make these routines reentrant,
7832 then they will have to be recompiled with the appropriate compiler option.
7835 Have not had time to do the more involved routines like printf, will get
7839 Interfacing with assembly routines.
7840 \begin_inset LatexCommand \label{Interface_asm}
7847 Global registers used for parameter passing.
7850 By default the compiler uses the global registers
7851 \begin_inset Quotes eld
7855 \begin_inset Quotes erd
7858 to pass the first parameter to a routine, the second parameter onwards
7859 is either allocated on the stack (for reentrant routines or --stack-auto
7860 is used) or in the internal / external ram (depending on the memory model).
7862 \layout Subsubsection
7864 Assembler routine non-reentrant
7867 In the following example the function
7871 calls an assembler routine
7875 , which takes two parameters.
7880 extern int asm_func( unsigned short, unsigned short);
7886 \protected_separator
7889 int c_func (unsigned short i, unsigned short j)
7894 \protected_separator
7896 \protected_separator
7898 \protected_separator
7900 \protected_separator
7902 \protected_separator
7904 \protected_separator
7906 \protected_separator
7907 return asm_func(i,j);
7920 \protected_separator
7922 \protected_separator
7924 \protected_separator
7925 return c_func(10,9);
7930 The corresponding assembler function is:-
7936 \protected_separator
7938 \protected_separator
7940 \protected_separator
7942 \protected_separator
7944 \protected_separator
7946 \protected_separator
7948 \protected_separator
7949 .globl _asm_func_PARM_2
7952 \protected_separator
7954 \protected_separator
7956 \protected_separator
7958 \protected_separator
7960 \protected_separator
7962 \protected_separator
7964 \protected_separator
7968 \protected_separator
7970 \protected_separator
7972 \protected_separator
7974 \protected_separator
7976 \protected_separator
7978 \protected_separator
7980 \protected_separator
7984 \protected_separator
7986 \protected_separator
7988 \protected_separator
7990 \protected_separator
7992 \protected_separator
7994 \protected_separator
7996 \protected_separator
7998 \protected_separator
8000 \protected_separator
8002 \protected_separator
8004 \protected_separator
8008 \protected_separator
8010 \protected_separator
8012 \protected_separator
8014 \protected_separator
8016 \protected_separator
8018 \protected_separator
8020 \protected_separator
8026 \protected_separator
8028 \protected_separator
8030 \protected_separator
8032 \protected_separator
8034 \protected_separator
8036 \protected_separator
8038 \protected_separator
8040 \protected_separator
8042 \protected_separator
8044 \protected_separator
8046 \protected_separator
8050 \protected_separator
8052 \protected_separator
8054 \protected_separator
8056 \protected_separator
8058 \protected_separator
8060 \protected_separator
8062 \protected_separator
8064 \protected_separator
8066 \protected_separator
8068 \protected_separator
8070 \protected_separator
8074 \protected_separator
8076 \protected_separator
8078 \protected_separator
8080 \protected_separator
8082 \protected_separator
8084 \protected_separator
8086 \protected_separator
8088 \protected_separator
8090 \protected_separator
8092 \protected_separator
8094 \protected_separator
8098 \protected_separator
8100 \protected_separator
8102 \protected_separator
8104 \protected_separator
8106 \protected_separator
8108 \protected_separator
8110 \protected_separator
8112 \protected_separator
8114 \protected_separator
8116 \protected_separator
8118 \protected_separator
8122 \protected_separator
8124 \protected_separator
8126 \protected_separator
8128 \protected_separator
8130 \protected_separator
8132 \protected_separator
8134 \protected_separator
8138 Note here that the return values are placed in 'dpl' - One byte return value,
8139 'dpl' LSB & 'dph' MSB for two byte values.
8140 'dpl', 'dph' and 'b' for three byte values (generic pointers) and 'dpl','dph','
8141 b' & 'acc' for four byte values.
8144 The parameter naming convention is
8146 _<function_name>_PARM_<n>,
8148 where n is the parameter number starting from 1, and counting from the
8150 The first parameter is passed in
8151 \begin_inset Quotes eld
8155 \begin_inset Quotes erd
8158 for One bye parameter,
8159 \begin_inset Quotes eld
8163 \begin_inset Quotes erd
8167 \begin_inset Quotes eld
8171 \begin_inset Quotes erd
8175 \begin_inset Quotes eld
8179 \begin_inset Quotes erd
8186 varaible name for the second parameter will be _<function_name>_PARM_2.
8189 Assemble the assembler routine with the following command.
8192 asx8051 -losg asmfunc.asm
8195 Then compile and link the assembler routine to the C source file with the
8199 sdcc cfunc.c asmfunc.rel
8200 \layout Subsubsection
8202 Assembler routine is reentrant
8205 In this case the second parameter onwards will be passed on the stack ,
8206 the parameters are pushed from right to left i.e.
8207 after the call the left most parameter will be on the top of the stack.
8213 extern int asm_func( unsigned short, unsigned short);
8219 \protected_separator
8225 int c_func (unsigned short i, unsigned short j) reentrant
8230 \protected_separator
8232 \protected_separator
8234 \protected_separator
8236 \protected_separator
8238 \protected_separator
8240 \protected_separator
8242 \protected_separator
8243 return asm_func(i,j);
8256 \protected_separator
8258 \protected_separator
8260 \protected_separator
8261 return c_func(10,9);
8266 The corresponding assembler routine is.
8272 \protected_separator
8274 \protected_separator
8276 \protected_separator
8278 \protected_separator
8280 \protected_separator
8282 \protected_separator
8284 \protected_separator
8290 \protected_separator
8292 \protected_separator
8294 \protected_separator
8296 \protected_separator
8298 \protected_separator
8300 \protected_separator
8302 \protected_separator
8304 \protected_separator
8308 \protected_separator
8310 \protected_separator
8312 \protected_separator
8314 \protected_separator
8316 \protected_separator
8318 \protected_separator
8320 \protected_separator
8322 \protected_separator
8326 \protected_separator
8328 \protected_separator
8330 \protected_separator
8332 \protected_separator
8334 \protected_separator
8336 \protected_separator
8338 \protected_separator
8340 \protected_separator
8342 \protected_separator
8346 \protected_separator
8348 \protected_separator
8350 \protected_separator
8352 \protected_separator
8354 \protected_separator
8356 \protected_separator
8358 \protected_separator
8360 \protected_separator
8364 \protected_separator
8366 \protected_separator
8368 \protected_separator
8370 \protected_separator
8372 \protected_separator
8374 \protected_separator
8376 \protected_separator
8378 \protected_separator
8382 \protected_separator
8384 \protected_separator
8386 \protected_separator
8388 \protected_separator
8390 \protected_separator
8392 \protected_separator
8394 \protected_separator
8396 \protected_separator
8400 \protected_separator
8402 \protected_separator
8404 \protected_separator
8406 \protected_separator
8408 \protected_separator
8410 \protected_separator
8412 \protected_separator
8414 \protected_separator
8418 \protected_separator
8420 \protected_separator
8422 \protected_separator
8424 \protected_separator
8426 \protected_separator
8428 \protected_separator
8430 \protected_separator
8432 \protected_separator
8436 \protected_separator
8438 \protected_separator
8440 \protected_separator
8442 \protected_separator
8444 \protected_separator
8446 \protected_separator
8448 \protected_separator
8450 \protected_separator
8454 \protected_separator
8456 \protected_separator
8458 \protected_separator
8460 \protected_separator
8462 \protected_separator
8464 \protected_separator
8466 \protected_separator
8468 \protected_separator
8472 \protected_separator
8474 \protected_separator
8476 \protected_separator
8478 \protected_separator
8480 \protected_separator
8482 \protected_separator
8484 \protected_separator
8486 \protected_separator
8490 \protected_separator
8492 \protected_separator
8494 \protected_separator
8496 \protected_separator
8498 \protected_separator
8500 \protected_separator
8502 \protected_separator
8504 \protected_separator
8508 \protected_separator
8510 \protected_separator
8512 \protected_separator
8514 \protected_separator
8516 \protected_separator
8518 \protected_separator
8520 \protected_separator
8522 \protected_separator
8526 \protected_separator
8528 \protected_separator
8530 \protected_separator
8532 \protected_separator
8534 \protected_separator
8536 \protected_separator
8538 \protected_separator
8540 \protected_separator
8544 \protected_separator
8546 \protected_separator
8548 \protected_separator
8550 \protected_separator
8552 \protected_separator
8554 \protected_separator
8556 \protected_separator
8558 \protected_separator
8562 \protected_separator
8564 \protected_separator
8566 \protected_separator
8568 \protected_separator
8570 \protected_separator
8572 \protected_separator
8574 \protected_separator
8578 The compiling and linking procedure remains the same, however note the extra
8579 entry & exit linkage required for the assembler code, _bp is the stack
8580 frame pointer and is used to compute the offset into the stack for parameters
8581 and local variables.
8584 With --noregparms option.
8587 When the source is compiled with --noregparms option , space is allocated
8588 for each of the parameters passed to a routine.
8589 \layout Subsubsection
8591 Assembler routine non-reentrant.
8594 In the following example the function
8598 calls an assembler routine
8602 , which takes two parameters.
8607 extern int asm_func( unsigned short, unsigned short);
8613 \protected_separator
8616 int c_func (unsigned short i, unsigned short j)
8621 \protected_separator
8623 \protected_separator
8625 \protected_separator
8627 \protected_separator
8629 \protected_separator
8631 \protected_separator
8633 \protected_separator
8634 return asm_func(i,j);
8647 \protected_separator
8649 \protected_separator
8651 \protected_separator
8652 return c_func(10,9);
8657 The corresponding assembler function is:-
8663 \protected_separator
8665 \protected_separator
8667 \protected_separator
8669 \protected_separator
8671 \protected_separator
8673 \protected_separator
8675 \protected_separator
8676 .globl _asm_func_PARM_1
8679 \protected_separator
8681 \protected_separator
8683 \protected_separator
8685 \protected_separator
8687 \protected_separator
8689 \protected_separator
8691 \protected_separator
8692 .globl _asm_func_PARM_2
8695 \protected_separator
8697 \protected_separator
8699 \protected_separator
8701 \protected_separator
8703 \protected_separator
8705 \protected_separator
8707 \protected_separator
8711 \protected_separator
8713 \protected_separator
8715 \protected_separator
8717 \protected_separator
8719 \protected_separator
8721 \protected_separator
8723 \protected_separator
8727 \protected_separator
8729 \protected_separator
8731 \protected_separator
8733 \protected_separator
8735 \protected_separator
8737 \protected_separator
8739 \protected_separator
8741 \protected_separator
8743 \protected_separator
8745 \protected_separator
8749 \protected_separator
8751 \protected_separator
8753 \protected_separator
8755 \protected_separator
8757 \protected_separator
8759 \protected_separator
8761 \protected_separator
8763 \protected_separator
8765 \protected_separator
8767 \protected_separator
8769 \protected_separator
8773 \protected_separator
8775 \protected_separator
8777 \protected_separator
8779 \protected_separator
8781 \protected_separator
8783 \protected_separator
8785 \protected_separator
8791 \protected_separator
8793 \protected_separator
8795 \protected_separator
8797 \protected_separator
8799 \protected_separator
8801 \protected_separator
8803 \protected_separator
8805 \protected_separator
8807 \protected_separator
8809 \protected_separator
8811 \protected_separator
8815 \protected_separator
8817 \protected_separator
8819 \protected_separator
8821 \protected_separator
8823 \protected_separator
8825 \protected_separator
8827 \protected_separator
8829 \protected_separator
8831 \protected_separator
8833 \protected_separator
8835 \protected_separator
8839 \protected_separator
8841 \protected_separator
8843 \protected_separator
8845 \protected_separator
8847 \protected_separator
8849 \protected_separator
8851 \protected_separator
8853 \protected_separator
8855 \protected_separator
8857 \protected_separator
8859 \protected_separator
8863 \protected_separator
8865 \protected_separator
8867 \protected_separator
8869 \protected_separator
8871 \protected_separator
8873 \protected_separator
8875 \protected_separator
8877 \protected_separator
8879 \protected_separator
8881 \protected_separator
8883 \protected_separator
8887 \protected_separator
8889 \protected_separator
8891 \protected_separator
8893 \protected_separator
8895 \protected_separator
8897 \protected_separator
8899 \protected_separator
8903 Note here that the return values are placed in 'dpl' - One byte return value,
8904 'dpl' LSB & 'dph' MSB for two byte values.
8905 'dpl', 'dph' and 'b' for three byte values (generic pointers) and 'dpl','dph','
8906 b' & 'acc' for four byte values.
8909 The parameter naming convention is
8911 _<function_name>_PARM_<n>,
8913 where n is the parameter number starting from 1, and counting from the
8920 left-most parameter name will be _<function_name>_PARM_1.
8923 Assemble the assembler routine with the following command.
8926 asx8051 -losg asmfunc.asm
8929 Then compile and link the assembler routine to the C source file with the
8933 sdcc cfunc.c asmfunc.rel
8934 \layout Subsubsection
8936 Assembler routine is reentrant.
8939 In this case the parameters will be passed on the stack , the parameters
8940 are pushed from right to left i.e.
8941 after the call the left most parameter will be on the top of the stack.
8947 extern int asm_func( unsigned short, unsigned short);
8953 \protected_separator
8959 int c_func (unsigned short i, unsigned short j) reentrant
8964 \protected_separator
8966 \protected_separator
8968 \protected_separator
8970 \protected_separator
8972 \protected_separator
8974 \protected_separator
8976 \protected_separator
8977 return asm_func(i,j);
8990 \protected_separator
8992 \protected_separator
8994 \protected_separator
8995 return c_func(10,9);
9000 The corresponding assembler routine is.
9006 \protected_separator
9008 \protected_separator
9010 \protected_separator
9012 \protected_separator
9014 \protected_separator
9016 \protected_separator
9018 \protected_separator
9024 \protected_separator
9026 \protected_separator
9028 \protected_separator
9030 \protected_separator
9032 \protected_separator
9034 \protected_separator
9036 \protected_separator
9038 \protected_separator
9042 \protected_separator
9044 \protected_separator
9046 \protected_separator
9048 \protected_separator
9050 \protected_separator
9052 \protected_separator
9054 \protected_separator
9056 \protected_separator
9060 \protected_separator
9062 \protected_separator
9064 \protected_separator
9066 \protected_separator
9068 \protected_separator
9070 \protected_separator
9072 \protected_separator
9074 \protected_separator
9078 \protected_separator
9080 \protected_separator
9082 \protected_separator
9084 \protected_separator
9086 \protected_separator
9088 \protected_separator
9090 \protected_separator
9092 \protected_separator
9096 \protected_separator
9098 \protected_separator
9100 \protected_separator
9102 \protected_separator
9104 \protected_separator
9106 \protected_separator
9108 \protected_separator
9110 \protected_separator
9114 \protected_separator
9116 \protected_separator
9118 \protected_separator
9120 \protected_separator
9122 \protected_separator
9124 \protected_separator
9126 \protected_separator
9128 \protected_separator
9132 \protected_separator
9134 \protected_separator
9136 \protected_separator
9138 \protected_separator
9140 \protected_separator
9142 \protected_separator
9144 \protected_separator
9146 \protected_separator
9150 \protected_separator
9152 \protected_separator
9154 \protected_separator
9156 \protected_separator
9158 \protected_separator
9160 \protected_separator
9162 \protected_separator
9164 \protected_separator
9168 \protected_separator
9170 \protected_separator
9172 \protected_separator
9174 \protected_separator
9176 \protected_separator
9178 \protected_separator
9180 \protected_separator
9182 \protected_separator
9186 \protected_separator
9188 \protected_separator
9190 \protected_separator
9192 \protected_separator
9194 \protected_separator
9196 \protected_separator
9198 \protected_separator
9200 \protected_separator
9204 \protected_separator
9206 \protected_separator
9208 \protected_separator
9210 \protected_separator
9212 \protected_separator
9214 \protected_separator
9216 \protected_separator
9218 \protected_separator
9222 \protected_separator
9224 \protected_separator
9226 \protected_separator
9228 \protected_separator
9230 \protected_separator
9232 \protected_separator
9234 \protected_separator
9236 \protected_separator
9240 \protected_separator
9242 \protected_separator
9244 \protected_separator
9246 \protected_separator
9248 \protected_separator
9250 \protected_separator
9252 \protected_separator
9254 \protected_separator
9258 \protected_separator
9260 \protected_separator
9262 \protected_separator
9264 \protected_separator
9266 \protected_separator
9268 \protected_separator
9270 \protected_separator
9272 \protected_separator
9276 \protected_separator
9278 \protected_separator
9280 \protected_separator
9282 \protected_separator
9284 \protected_separator
9286 \protected_separator
9288 \protected_separator
9290 \protected_separator
9294 \protected_separator
9296 \protected_separator
9298 \protected_separator
9300 \protected_separator
9302 \protected_separator
9304 \protected_separator
9306 \protected_separator
9308 \protected_separator
9312 \protected_separator
9314 \protected_separator
9316 \protected_separator
9318 \protected_separator
9320 \protected_separator
9322 \protected_separator
9324 \protected_separator
9328 The compiling and linking procedure remains the same, however note the extra
9329 entry & exit linkage required for the assembler code, _bp is the stack
9330 frame pointer and is used to compute the offset into the stack for parameters
9331 and local variables.
9335 \begin_inset LatexCommand \label{xstack}
9342 The external stack is located at the start of the external ram segment ,
9343 and is 256 bytes in size.
9344 When --xstack option is used to compile the program , the parameters and
9345 local variables of all reentrant functions are allocated in this area.
9346 This option is provided for programs with large stack space requirements.
9347 When used with the --stack-auto option, all parameters and local variables
9348 are allocated on the external stack (note support libraries will need to
9349 be recompiled with the same options).
9352 The compiler outputs the higher order address byte of the external ram segment
9353 into PORT P2, therefore when using the External Stack option, this port
9354 MAY NOT be used by the application program.
9358 \begin_inset LatexCommand \label{ANSI_Compliance}
9365 Deviations from the compliancy.
9368 functions are not always reentrant.
9371 structures cannot be assigned values directly, cannot be passed as function
9372 parameters or assigned to each other and cannot be a return value from
9397 s1 = s2 ; /* is invalid in SDCC although allowed in ANSI */
9407 struct s foo1 (struct s parms) /* is invalid in SDCC although allowed in
9417 return rets;/* is invalid in SDCC although allowed in ANSI */
9422 'long long' (64 bit integers) not supported.
9425 'double' precision floating point not supported.
9428 integral promotions are suppressed.
9429 What does this mean ? The compiler will not implicitly promote an integer
9430 expression to a higher order integer, exception is an assignment or parameter
9446 Old K&R style function declarations are NOT allowed.
9451 foo( i,j) /* this old style of function declarations */
9453 int i,j; /* are valid in ANSI ..
9454 not valid in SDCC */
9464 functions declared as pointers must be dereferenced during the call.
9477 \protected_separator
9479 \protected_separator
9484 \protected_separator
9486 \protected_separator
9487 /* has to be called like this */
9490 \protected_separator
9492 \protected_separator
9493 (*foo)();/* ansi standard allows calls to be made like 'foo()' */
9496 Cyclomatic Complexity
9497 \begin_inset LatexCommand \label{Cyclomatic}
9504 Cyclomatic complexity of a function is defined as the number of independent
9505 paths the program can take during execution of the function.
9506 This is an important number since it defines the number test cases you
9507 have to generate to validate the function .
9508 The accepted industry standard for complexity number is 10, if the cyclomatic
9509 complexity reported by SDCC exceeds 10 you should think about simplification
9510 of the function logic.
9513 Note that the complexity level is not related to the number of lines of
9515 Large functions can have low complexity, and small functions can have large
9517 SDCC uses the following formula to compute the complexity.
9522 complexity = (number of edges in control flow graph) -
9525 \protected_separator
9527 \protected_separator
9529 \protected_separator
9531 \protected_separator
9533 \protected_separator
9535 \protected_separator
9537 \protected_separator
9538 (number of nodes in control flow graph) + 2;
9541 Having said that the industry standard is 10, you should be aware that in
9542 some cases it may unavoidable to have a complexity level of less than 10.
9543 For example if you have switch statement with more than 10 case labels,
9544 each case label adds one to the complexity level.
9545 The complexity level is by no means an absolute measure of the algorithmic
9546 complexity of the function, it does however provide a good starting point
9547 for which functions you might look at for further optimization.
9551 \begin_inset LatexCommand \label{Tips}
9558 Here are a few guide-lines that will help the compiler generate more efficient
9559 code, some of the tips are specific to this compiler others are generally
9560 good programming practice.
9563 Use the smallest data type to represent your data-value.
9564 If it is known in advance that the value is going to be less than 256 then
9565 use a 'short' or 'char' instead of an 'int'.
9568 Use unsigned when it is known in advance that the value is not going to
9570 This helps especially if you are doing division or multiplication.
9573 NEVER jump into a LOOP.
9576 Declare the variables to be local whenever possible, especially loop control
9577 variables (induction).
9580 Since the compiler does not do implicit integral promotion, the programmer
9581 should do an explicit cast when integral promotion is required.
9584 Reducing the size of division , multiplication & modulus operations can
9585 reduce code size substantially.
9586 Take the following code for example.
9592 foobar( unsigned int p1, unsigned char ch)
9597 \protected_separator
9599 \protected_separator
9601 \protected_separator
9603 \protected_separator
9604 unsigned char ch1 = p1 % ch ;
9607 \protected_separator
9609 \protected_separator
9611 \protected_separator
9613 \protected_separator
9615 \protected_separator
9617 \protected_separator
9619 \protected_separator
9621 \protected_separator
9627 For the modulus operation the variable ch will be promoted to unsigned int
9628 first then the modulus operation will be performed (this will lead to a
9629 call to a support routine).
9630 If the code is changed to
9635 foobar( unsigned int p1, unsigned char ch)
9640 \protected_separator
9642 \protected_separator
9644 \protected_separator
9646 \protected_separator
9647 unsigned char ch1 = (unsigned char)p1 % ch ;
9650 \protected_separator
9652 \protected_separator
9654 \protected_separator
9656 \protected_separator
9658 \protected_separator
9660 \protected_separator
9662 \protected_separator
9664 \protected_separator
9670 It would substantially reduce the code generated (future versions of the
9671 compiler will be smart enough to detect such optimization oppurtunities).
9677 Notes from an USER ( Trefor@magera.freeserve.co.uk )
9680 The 8051 family of micro controller have a minimum of 128 bytes of internal
9681 memory which is structured as follows
9684 - Bytes 00-1F - 32 bytes to hold up to 4 banks of the registers R7 to R7
9688 - Bytes 20-2F - 16 bytes to hold 128 bit variables and
9691 - Bytes 30-7F - 60 bytes for general purpose use.
9694 Normally the SDCC compiler will only utilise the first bank of registers,
9695 but it is possible to specify that other banks of registers should be used
9696 in interrupt routines.
9697 By default, the compiler will place the stack after the last bank of used
9699 if the first 2 banks of registers are used, it will position the base of
9700 the internal stack at address 16 (0X10).
9701 This implies that as the stack grows, it will use up the remaining register
9702 banks, and the 16 bytes used by the 128 bit variables, and 60 bytes for
9703 general purpose use.
9706 By default, the compiler uses the 60 general purpose bytes to hold "near
9708 The compiler/optimiser may also declare some Local Variables in this area
9713 If any of the 128 bit variables are used, or near data is being used then
9714 care needs to be taken to ensure that the stack does not grow so much that
9715 it starts to over write either your bit variables or "near data".
9716 There is no runtime checking to prevent this from happening.
9719 The amount of stack being used is affected by the use of the "internal stack"
9720 to save registers before a subroutine call is made, - --stack-auto will
9721 declare parameters and local variables on the stack - the number of nested
9725 If you detect that the stack is over writing you data, then the following
9727 --xstack will cause an external stack to be used for saving registers and
9728 (if --stack-auto is being used) storing parameters and local variables.
9729 However this will produce more and code which will be slower to execute.
9733 --stack-loc will allow you specify the start of the stack, i.e.
9734 you could start it after any data in the general purpose area.
9735 However this may waste the memory not used by the register banks and if
9736 the size of the "near data" increases, it may creep into the bottom of
9740 --stack-after-data, similar to the --stack-loc, but it automatically places
9741 the stack after the end of the "near data".
9742 Again this could waste any spare register space.
9745 --data-loc allows you to specify the start address of the near data.
9746 This could be used to move the "near data" further away from the stack
9747 giving it more room to grow.
9748 This will only work if no bit variables are being used and the stack can
9749 grow to use the bit variable space.
9755 If you find that the stack is over writing your bit variables or "near data"
9756 then the approach which best utilised the internal memory is to position
9757 the "near data" after the last bank of used registers or, if you use bit
9758 variables, after the last bit variable by using the --data-loc, e.g.
9759 if two register banks are being used and no data variables, --data-loc
9760 16, and - use the --stack-after-data option.
9763 If bit variables are being used, another method would be to try and squeeze
9764 the data area in the unused register banks if it will fit, and start the
9765 stack after the last bit variable.
9768 Retargetting for other MCUs.
9769 \begin_inset LatexCommand \label{Retargetting}
9776 The issues for retargetting the compiler are far too numerous to be covered
9778 What follows is a brief description of each of the seven phases of the
9779 compiler and its MCU dependency.
9782 Parsing the source and building the annotated parse tree.
9783 This phase is largely MCU independent (except for the language extensions).
9784 Syntax & semantic checks are also done in this phase , along with some
9785 initial optimizations like back patching labels and the pattern matching
9786 optimizations like bit-rotation etc.
9789 The second phase involves generating an intermediate code which can be easy
9790 manipulated during the later phases.
9791 This phase is entirely MCU independent.
9792 The intermediate code generation assumes the target machine has unlimited
9793 number of registers, and designates them with the name iTemp.
9794 The compiler can be made to dump a human readable form of the code generated
9795 by using the --dumpraw option.
9798 This phase does the bulk of the standard optimizations and is also MCU independe
9800 This phase can be broken down into several sub-phases.
9804 Break down intermediate code (iCode) into basic blocks.
9807 Do control flow & data flow analysis on the basic blocks.
9810 Do local common subexpression elimination, then global subexpression elimination
9813 dead code elimination
9819 if loop optimizations caused any changes then do 'global subexpression eliminati
9820 on' and 'dead code elimination' again.
9824 This phase determines the live-ranges; by live range I mean those iTemp
9825 variables defined by the compiler that still survive after all the optimization
9827 Live range analysis is essential for register allocation, since these computati
9828 on determines which of these iTemps will be assigned to registers, and for
9832 Phase five is register allocation.
9833 There are two parts to this process .
9837 The first part I call 'register packing' (for lack of a better term) .
9838 In this case several MCU specific expression folding is done to reduce
9842 The second part is more MCU independent and deals with allocating registers
9843 to the remaining live ranges.
9844 A lot of MCU specific code does creep into this phase because of the limited
9845 number of index registers available in the 8051.
9849 The Code generation phase is (unhappily), entirely MCU dependent and very
9850 little (if any at all) of this code can be reused for other MCU.
9851 However the scheme for allocating a homogenized assembler operand for each
9852 iCode operand may be reused.
9855 As mentioned in the optimization section the peep-hole optimizer is rule
9856 based system, which can reprogrammed for other MCUs.
9860 \begin_inset LatexCommand \label{Bugs}
9867 Shoot of an email to 'sandeep.dutta@usa.net', as a matter of principle I always
9868 reply to all email's sent to me.
9869 Bugs will be fixed ASAP.
9870 When reporting a bug , it is useful to include a small snippet of code
9871 that is causing the problem, if possible compile your program with the
9872 --dumpall option and send the dump files along with the bug report.
9875 SDCDB - Source level debugger.
9878 SDCC is distributed with a source level debugger.
9879 The debugger uses a command line interface, the command repertoire of the
9880 debugger has been kept as close to gdb ( the GNU debugger) as possible.
9881 The configuration and build process of the compiler see Installation
9882 \begin_inset LatexCommand \ref{Installation}
9886 also builds and installs the debugger in the target directory specified
9887 during configuration.
9888 The debugger allows you debug BOTH at the C source and at the ASM source
9892 Compiling for debugging.
9899 option must be specified for all files for which debug information is to
9901 The complier generates a
9905 file for each of these files.
9906 The linker updates the
9910 file with the address information.
9911 This .cdb is used by the debugger .
9914 How the debugger works.
9921 option is specified the compiler generates extra symbol information some
9922 of which are put into the the assembler source and some are put into the
9923 .cdb file, the linker updates the .cdb file with the address information
9925 The debugger reads the symbolic information generated by the compiler &
9926 the address information generated by the linker.
9927 It uses the SIMULATOR (Daniel's S51) to execute the program, the program
9928 execution is controlled by the debugger.
9929 When a command is issued for the debugger, it translates it into appropriate
9930 commands for the simulator .
9933 Starting the debugger.
9936 The debugger can be started using the following command line.
9937 (Assume the file you are debugging has
9946 The debugger will look for the following files.
9949 foo.c - the source file.
9952 foo.cdb - the debugger symbol information file.
9955 foo.ihx - the intel hex format object file.
9958 Command line options.
9961 --directory=<source file directory> this option can used to specify the
9962 directory search list.
9963 The debugger will look into the directory list specified for source , cdb
9965 The items in the directory list must be separated by ':' , e.g.
9966 if the source files can be in the directories /home/src1 and /home/src2,
9967 the --directory option should be --directory=/home/src1:/home/src2 .
9968 Note there can be no spaces in the option.
9972 -cd <directory> - change to the <directory>.
9975 -fullname - used by GUI front ends.
9978 -cpu <cpu-type> - this argument is passed to the simulator please see the
9979 simulator docs for details.
9982 -X <Clock frequency > this options is passed to the simulator please see
9983 simulator docs for details.
9986 -s <serial port file> passed to simulator see simulator docs for details.
9989 -S <serial in,out> passed to simulator see simulator docs for details.
9995 As mention earlier the command interface for the debugger has been deliberately
9996 kept as close the GNU debugger gdb , as possible, this will help int integratio
9997 n with existing graphical user interfaces (like ddd, xxgdb or xemacs) existing
9998 for the GNU debugger.
9999 \layout Subsubsection
10001 break [line | file:line | function | file:function]
10004 Set breakpoint at specified line or function.
10009 sdcdb>break foo.c:100
10011 sdcdb>break funcfoo
10013 sdcdb>break foo.c:funcfoo
10014 \layout Subsubsection
10016 clear [line | file:line | function | file:function ]
10019 Clear breakpoint at specified line or function.
10024 sdcdb>clear foo.c:100
10026 sdcdb>clear funcfoo
10028 sdcdb>clear foo.c:funcfoo
10029 \layout Subsubsection
10034 Continue program being debugged, after breakpoint.
10035 \layout Subsubsection
10040 Execute till the end of the current function.
10041 \layout Subsubsection
10046 Delete breakpoint number 'n'.
10047 If used without any option clear ALL user defined break points.
10048 \layout Subsubsection
10050 info [break | stack | frame | registers ]
10053 info break - list all breakpoints
10056 info stack - show the function call stack.
10059 info frame - show information about the current execution frame.
10062 info registers - show content of all registers.
10063 \layout Subsubsection
10068 Step program until it reaches a different source line.
10069 \layout Subsubsection
10074 Step program, proceeding through subroutine calls.
10075 \layout Subsubsection
10080 Start debugged program.
10081 \layout Subsubsection
10086 Print type information of the variable.
10087 \layout Subsubsection
10092 print value of variable.
10093 \layout Subsubsection
10098 load the given file name.
10099 Note this is an alternate method of loading file for debugging.
10100 \layout Subsubsection
10105 print information about current frame.
10106 \layout Subsubsection
10111 Toggle between C source & assembly source.
10112 \layout Subsubsection
10114 ! simulator command
10117 Send the string following '!' to the simulator, the simulator response is
10119 Note the debugger does not interpret the command being sent to the simulator,
10120 so if a command like 'go' is sent the debugger can loose its execution
10121 context and may display incorrect values.
10122 \layout Subsubsection
10129 My name is Bobby Brown"
10132 Interfacing with XEmacs.
10135 Two files are (in emacs lisp) are provided for the interfacing with XEmacs,
10144 These two files can be found in the $(prefix)/bin directory after the installat
10146 These files need to be loaded into XEmacs for the interface to work, this
10147 can be done at XEmacs startup time by inserting the following into your
10152 file (which can be found in your HOME directory)
10154 (load-file sdcdbsrc.el)
10156 [ .xemacs is a lisp file so the () around the command is REQUIRED), the files
10157 can also be loaded dynamically while XEmacs is running, set the environment
10162 to the installation bin directory [$(prefix)/bin], then enter the following
10165 ESC-x load-file sdcdbsrc .
10168 To start the interface enter the following command
10172 , you will prompted to enter the file name to be debugged.
10176 The command line options that are passed to the simulator directly are bound
10177 to default values in the file
10181 the variables are listed below these values maybe changed as required.
10184 sdcdbsrc-cpu-type '51
10187 sdcdbsrc-frequency '11059200
10190 sdcdbsrc-serial nil
10193 The following is a list of key mapping for the debugger interface.
10197 \protected_separator
10202 ;; Current Listing ::
10205 \protected_separator
10207 \protected_separator
10209 \protected_separator
10211 \protected_separator
10213 \protected_separator
10215 \protected_separator
10217 \protected_separator
10219 \protected_separator
10221 \protected_separator
10223 \protected_separator
10225 \protected_separator
10227 \protected_separator
10229 \protected_separator
10231 \protected_separator
10233 \protected_separator
10235 \protected_separator
10237 \protected_separator
10239 \protected_separator
10241 \protected_separator
10243 \protected_separator
10245 \protected_separator
10247 \protected_separator
10249 \protected_separator
10251 \protected_separator
10253 \protected_separator
10255 \protected_separator
10257 \protected_separator
10259 \protected_separator
10261 \protected_separator
10263 \protected_separator
10265 \protected_separator
10267 \protected_separator
10269 \protected_separator
10271 \protected_separator
10273 \protected_separator
10275 \protected_separator
10277 \protected_separator
10281 \protected_separator
10283 \protected_separator
10285 \protected_separator
10287 \protected_separator
10289 \protected_separator
10291 \protected_separator
10293 \protected_separator
10295 \protected_separator
10297 \protected_separator
10299 \protected_separator
10301 \protected_separator
10303 \protected_separator
10305 \protected_separator
10307 \protected_separator
10309 \protected_separator
10311 \protected_separator
10313 \protected_separator
10315 \protected_separator
10317 \protected_separator
10319 \protected_separator
10321 \protected_separator
10323 \protected_separator
10325 \protected_separator
10327 \protected_separator
10329 \protected_separator
10331 \protected_separator
10333 \protected_separator
10335 \protected_separator
10337 \protected_separator
10339 \protected_separator
10341 \protected_separator
10343 \protected_separator
10345 \protected_separator
10347 \protected_separator
10349 \protected_separator
10351 \protected_separator
10353 \protected_separator
10359 \protected_separator
10361 \protected_separator
10363 \protected_separator
10365 \protected_separator
10367 \protected_separator
10369 \protected_separator
10371 \protected_separator
10373 \protected_separator
10375 \protected_separator
10377 \protected_separator
10379 \protected_separator
10381 \protected_separator
10383 \protected_separator
10385 \protected_separator
10386 sdcdb-next-from-src
10387 \protected_separator
10389 \protected_separator
10391 \protected_separator
10393 \protected_separator
10395 \protected_separator
10397 \protected_separator
10399 \protected_separator
10401 \protected_separator
10403 \protected_separator
10405 \protected_separator
10409 \protected_separator
10411 \protected_separator
10413 \protected_separator
10415 \protected_separator
10417 \protected_separator
10419 \protected_separator
10421 \protected_separator
10423 \protected_separator
10425 \protected_separator
10427 \protected_separator
10429 \protected_separator
10431 \protected_separator
10433 \protected_separator
10435 \protected_separator
10436 sdcdb-back-from-src
10437 \protected_separator
10439 \protected_separator
10441 \protected_separator
10443 \protected_separator
10445 \protected_separator
10447 \protected_separator
10449 \protected_separator
10451 \protected_separator
10453 \protected_separator
10455 \protected_separator
10459 \protected_separator
10461 \protected_separator
10463 \protected_separator
10465 \protected_separator
10467 \protected_separator
10469 \protected_separator
10471 \protected_separator
10473 \protected_separator
10475 \protected_separator
10477 \protected_separator
10479 \protected_separator
10481 \protected_separator
10483 \protected_separator
10485 \protected_separator
10486 sdcdb-cont-from-src
10487 \protected_separator
10489 \protected_separator
10491 \protected_separator
10493 \protected_separator
10495 \protected_separator
10497 \protected_separator
10499 \protected_separator
10501 \protected_separator
10503 \protected_separator
10505 \protected_separator
10506 SDCDB continue command
10509 \protected_separator
10511 \protected_separator
10513 \protected_separator
10515 \protected_separator
10517 \protected_separator
10519 \protected_separator
10521 \protected_separator
10523 \protected_separator
10525 \protected_separator
10527 \protected_separator
10529 \protected_separator
10531 \protected_separator
10533 \protected_separator
10535 \protected_separator
10536 sdcdb-step-from-src
10537 \protected_separator
10539 \protected_separator
10541 \protected_separator
10543 \protected_separator
10545 \protected_separator
10547 \protected_separator
10549 \protected_separator
10551 \protected_separator
10553 \protected_separator
10555 \protected_separator
10559 \protected_separator
10561 \protected_separator
10563 \protected_separator
10565 \protected_separator
10567 \protected_separator
10569 \protected_separator
10571 \protected_separator
10573 \protected_separator
10575 \protected_separator
10577 \protected_separator
10579 \protected_separator
10581 \protected_separator
10583 \protected_separator
10585 \protected_separator
10586 sdcdb-whatis-c-sexp
10587 \protected_separator
10589 \protected_separator
10591 \protected_separator
10593 \protected_separator
10595 \protected_separator
10597 \protected_separator
10599 \protected_separator
10601 \protected_separator
10603 \protected_separator
10605 \protected_separator
10606 SDCDB ptypecommand for data at
10609 \protected_separator
10611 \protected_separator
10613 \protected_separator
10615 \protected_separator
10617 \protected_separator
10619 \protected_separator
10621 \protected_separator
10623 \protected_separator
10625 \protected_separator
10627 \protected_separator
10629 \protected_separator
10631 \protected_separator
10633 \protected_separator
10635 \protected_separator
10637 \protected_separator
10639 \protected_separator
10641 \protected_separator
10643 \protected_separator
10645 \protected_separator
10647 \protected_separator
10649 \protected_separator
10651 \protected_separator
10653 \protected_separator
10655 \protected_separator
10657 \protected_separator
10659 \protected_separator
10661 \protected_separator
10663 \protected_separator
10665 \protected_separator
10667 \protected_separator
10669 \protected_separator
10671 \protected_separator
10673 \protected_separator
10675 \protected_separator
10677 \protected_separator
10679 \protected_separator
10681 \protected_separator
10683 \protected_separator
10685 \protected_separator
10687 \protected_separator
10689 \protected_separator
10691 \protected_separator
10695 \protected_separator
10697 \protected_separator
10699 \protected_separator
10701 \protected_separator
10703 \protected_separator
10705 \protected_separator
10707 \protected_separator
10709 \protected_separator
10711 \protected_separator
10713 \protected_separator
10715 \protected_separator
10717 \protected_separator
10719 \protected_separator
10721 \protected_separator
10723 \protected_separator
10725 \protected_separator
10727 \protected_separator
10729 \protected_separator
10731 \protected_separator
10733 \protected_separator
10735 \protected_separator
10737 \protected_separator
10739 \protected_separator
10741 \protected_separator
10743 \protected_separator
10745 \protected_separator
10747 \protected_separator
10749 \protected_separator
10750 SDCDB Delete all breakpoints if no arg
10753 \protected_separator
10755 \protected_separator
10757 \protected_separator
10759 \protected_separator
10761 \protected_separator
10763 \protected_separator
10765 \protected_separator
10767 \protected_separator
10769 \protected_separator
10771 \protected_separator
10773 \protected_separator
10775 \protected_separator
10777 \protected_separator
10779 \protected_separator
10781 \protected_separator
10783 \protected_separator
10785 \protected_separator
10787 \protected_separator
10789 \protected_separator
10791 \protected_separator
10793 \protected_separator
10795 \protected_separator
10797 \protected_separator
10799 \protected_separator
10801 \protected_separator
10803 \protected_separator
10805 \protected_separator
10807 \protected_separator
10809 \protected_separator
10811 \protected_separator
10813 \protected_separator
10815 \protected_separator
10817 \protected_separator
10819 \protected_separator
10821 \protected_separator
10823 \protected_separator
10825 \protected_separator
10827 \protected_separator
10829 \protected_separator
10831 \protected_separator
10833 \protected_separator
10835 \protected_separator
10837 \protected_separator
10839 \protected_separator
10841 \protected_separator
10843 \protected_separator
10844 given or delete arg (C-u arg x)
10847 \protected_separator
10849 \protected_separator
10851 \protected_separator
10853 \protected_separator
10855 \protected_separator
10857 \protected_separator
10859 \protected_separator
10861 \protected_separator
10863 \protected_separator
10865 \protected_separator
10867 \protected_separator
10869 \protected_separator
10871 \protected_separator
10873 \protected_separator
10875 \protected_separator
10877 \protected_separator
10879 \protected_separator
10881 \protected_separator
10883 \protected_separator
10885 \protected_separator
10887 \protected_separator
10889 \protected_separator
10891 \protected_separator
10893 \protected_separator
10895 \protected_separator
10897 \protected_separator
10899 \protected_separator
10901 \protected_separator
10903 \protected_separator
10904 SDCDB Display current frame if no arg,
10907 \protected_separator
10909 \protected_separator
10911 \protected_separator
10913 \protected_separator
10915 \protected_separator
10917 \protected_separator
10919 \protected_separator
10921 \protected_separator
10923 \protected_separator
10925 \protected_separator
10927 \protected_separator
10929 \protected_separator
10931 \protected_separator
10933 \protected_separator
10935 \protected_separator
10937 \protected_separator
10939 \protected_separator
10941 \protected_separator
10943 \protected_separator
10945 \protected_separator
10947 \protected_separator
10949 \protected_separator
10951 \protected_separator
10953 \protected_separator
10955 \protected_separator
10957 \protected_separator
10959 \protected_separator
10961 \protected_separator
10963 \protected_separator
10965 \protected_separator
10967 \protected_separator
10969 \protected_separator
10971 \protected_separator
10973 \protected_separator
10975 \protected_separator
10977 \protected_separator
10979 \protected_separator
10981 \protected_separator
10983 \protected_separator
10985 \protected_separator
10987 \protected_separator
10989 \protected_separator
10991 \protected_separator
10993 \protected_separator
10995 \protected_separator
10997 \protected_separator
10998 given or display frame arg
11001 \protected_separator
11003 \protected_separator
11005 \protected_separator
11007 \protected_separator
11009 \protected_separator
11011 \protected_separator
11013 \protected_separator
11015 \protected_separator
11017 \protected_separator
11019 \protected_separator
11021 \protected_separator
11023 \protected_separator
11025 \protected_separator
11027 \protected_separator
11029 \protected_separator
11031 \protected_separator
11033 \protected_separator
11035 \protected_separator
11037 \protected_separator
11039 \protected_separator
11041 \protected_separator
11043 \protected_separator
11045 \protected_separator
11047 \protected_separator
11049 \protected_separator
11051 \protected_separator
11053 \protected_separator
11055 \protected_separator
11057 \protected_separator
11059 \protected_separator
11061 \protected_separator
11063 \protected_separator
11065 \protected_separator
11067 \protected_separator
11069 \protected_separator
11071 \protected_separator
11073 \protected_separator
11075 \protected_separator
11077 \protected_separator
11079 \protected_separator
11081 \protected_separator
11083 \protected_separator
11085 \protected_separator
11087 \protected_separator
11089 \protected_separator
11093 \protected_separator
11095 \protected_separator
11097 \protected_separator
11099 \protected_separator
11101 \protected_separator
11103 \protected_separator
11105 \protected_separator
11107 \protected_separator
11109 \protected_separator
11111 \protected_separator
11113 \protected_separator
11115 \protected_separator
11117 \protected_separator
11119 \protected_separator
11120 sdcdbsrc-goto-sdcdb
11121 \protected_separator
11123 \protected_separator
11125 \protected_separator
11127 \protected_separator
11129 \protected_separator
11131 \protected_separator
11133 \protected_separator
11135 \protected_separator
11137 \protected_separator
11139 \protected_separator
11140 Goto the SDCDB output buffer
11143 \protected_separator
11145 \protected_separator
11147 \protected_separator
11149 \protected_separator
11151 \protected_separator
11153 \protected_separator
11155 \protected_separator
11157 \protected_separator
11159 \protected_separator
11161 \protected_separator
11163 \protected_separator
11165 \protected_separator
11167 \protected_separator
11169 \protected_separator
11171 \protected_separator
11173 \protected_separator
11175 \protected_separator
11177 \protected_separator
11179 \protected_separator
11181 \protected_separator
11183 \protected_separator
11185 \protected_separator
11187 \protected_separator
11189 \protected_separator
11191 \protected_separator
11192 SDCDB print command for data at
11195 \protected_separator
11197 \protected_separator
11199 \protected_separator
11201 \protected_separator
11203 \protected_separator
11205 \protected_separator
11207 \protected_separator
11209 \protected_separator
11211 \protected_separator
11213 \protected_separator
11215 \protected_separator
11217 \protected_separator
11219 \protected_separator
11221 \protected_separator
11223 \protected_separator
11225 \protected_separator
11227 \protected_separator
11229 \protected_separator
11231 \protected_separator
11233 \protected_separator
11235 \protected_separator
11237 \protected_separator
11239 \protected_separator
11241 \protected_separator
11243 \protected_separator
11245 \protected_separator
11247 \protected_separator
11249 \protected_separator
11251 \protected_separator
11253 \protected_separator
11255 \protected_separator
11257 \protected_separator
11259 \protected_separator
11261 \protected_separator
11263 \protected_separator
11265 \protected_separator
11267 \protected_separator
11269 \protected_separator
11271 \protected_separator
11273 \protected_separator
11275 \protected_separator
11277 \protected_separator
11281 \protected_separator
11283 \protected_separator
11285 \protected_separator
11287 \protected_separator
11289 \protected_separator
11291 \protected_separator
11293 \protected_separator
11295 \protected_separator
11297 \protected_separator
11299 \protected_separator
11301 \protected_separator
11303 \protected_separator
11305 \protected_separator
11307 \protected_separator
11308 sdcdbsrc-goto-sdcdb
11309 \protected_separator
11311 \protected_separator
11313 \protected_separator
11315 \protected_separator
11317 \protected_separator
11319 \protected_separator
11321 \protected_separator
11323 \protected_separator
11325 \protected_separator
11327 \protected_separator
11328 Goto the SDCDB output buffer
11331 \protected_separator
11333 \protected_separator
11335 \protected_separator
11337 \protected_separator
11339 \protected_separator
11341 \protected_separator
11343 \protected_separator
11345 \protected_separator
11347 \protected_separator
11349 \protected_separator
11351 \protected_separator
11353 \protected_separator
11355 \protected_separator
11357 \protected_separator
11359 \protected_separator
11361 \protected_separator
11363 \protected_separator
11365 \protected_separator
11367 \protected_separator
11369 \protected_separator
11371 \protected_separator
11373 \protected_separator
11375 \protected_separator
11377 \protected_separator
11379 \protected_separator
11381 \protected_separator
11383 \protected_separator
11385 \protected_separator
11387 \protected_separator
11389 \protected_separator
11390 Toggles Sdcdbsrc mode (turns it off)
11395 \protected_separator
11397 \protected_separator
11399 \protected_separator
11401 \protected_separator
11403 \protected_separator
11405 \protected_separator
11407 \protected_separator
11409 \protected_separator
11410 sdcdb-finish-from-src
11411 \protected_separator
11413 \protected_separator
11415 \protected_separator
11417 \protected_separator
11419 \protected_separator
11421 \protected_separator
11423 \protected_separator
11425 \protected_separator
11426 SDCDB finish command
11431 \protected_separator
11433 \protected_separator
11435 \protected_separator
11437 \protected_separator
11439 \protected_separator
11441 \protected_separator
11443 \protected_separator
11445 \protected_separator
11447 \protected_separator
11449 \protected_separator
11451 \protected_separator
11453 \protected_separator
11455 \protected_separator
11457 \protected_separator
11459 \protected_separator
11461 \protected_separator
11463 \protected_separator
11465 \protected_separator
11467 \protected_separator
11469 \protected_separator
11471 \protected_separator
11473 \protected_separator
11475 \protected_separator
11477 \protected_separator
11479 \protected_separator
11481 \protected_separator
11482 Set break for line with point
11485 \protected_separator
11487 \protected_separator
11489 \protected_separator
11491 \protected_separator
11493 \protected_separator
11495 \protected_separator
11497 \protected_separator
11499 \protected_separator
11501 \protected_separator
11503 \protected_separator
11505 \protected_separator
11507 \protected_separator
11509 \protected_separator
11511 \protected_separator
11513 \protected_separator
11515 \protected_separator
11517 \protected_separator
11519 \protected_separator
11521 \protected_separator
11523 \protected_separator
11525 \protected_separator
11527 \protected_separator
11529 \protected_separator
11531 \protected_separator
11533 \protected_separator
11535 \protected_separator
11536 Toggle Sdcdbsrc mode
11539 \protected_separator
11541 \protected_separator
11543 \protected_separator
11545 \protected_separator
11547 \protected_separator
11549 \protected_separator
11551 \protected_separator
11553 \protected_separator
11555 \protected_separator
11557 \protected_separator
11559 \protected_separator
11561 \protected_separator
11563 \protected_separator
11565 \protected_separator
11567 \protected_separator
11569 \protected_separator
11571 \protected_separator
11573 \protected_separator
11575 \protected_separator
11577 \protected_separator
11579 \protected_separator
11581 \protected_separator
11590 \begin_inset LatexCommand \label{Conclusion}
11597 SDCC is a large project , the compiler alone (without the Assembler Package
11598 , Preprocessor & garbage collector) is about 40,000 lines of code (blank
11600 As with any project of this size there are bound to be bugs, I am more
11601 than willing to work to fix these bugs , of course all the source code
11602 is included with the package.
11606 Where does it go from here ? I am planning to target the Atmel AVR 8-bit
11607 MCUs which seems to have a lot of users.
11608 I am also planning to include an alias analysis system with this compiler
11609 (it does not currently have one).
11613 \begin_inset LatexCommand \label{Acknowledgements}
11620 Alan Baldwin (baldwin@shop-pdp.kent.edu) - Initial version of ASXXXX & ASLINK.
11624 John Hartman (jhartman@compuserve.com) - Porting ASXXX & ASLINK for 8051
11628 Obukhov (dso@usa.net) - malloc & serial i/o routines.
11632 Daniel Drotos <drdani@mazsola.iit.uni-miskolc.hu> - for his Freeware simulator
11635 Jans J Boehm(boehm@sgi.com) and Alan J Demers - Conservative garbage collector
11639 Malini Dutta(malini_dutta@hotmail.com) - my wife for her patience and support.
11642 Unknown - for the GNU C - preprocessor.
11645 Appendix A: The Z80 and gbz80 port
11648 2.2.0 can target both the Zilog Z80 and the Nintendo Gameboy's Z80-like gbz80.
11649 The port is incomplete - long support is incomplete (mul, div and mod are
11650 unimplimented), and both float and bitfield support is missing, but apart
11651 from that the code generated is correct.
11654 As always, the code is the authoritave reference - see z80/ralloc.c and z80/gen.c.
11655 The stack frame is similar to that generated by the IAR Z80 compiler.
11656 IX is used as the base pointer, HL is used as a temporary register, and
11657 BC and DE are available for holding varibles.
11658 IY is currently unusued.
11659 Return values are stored in HL.
11660 One bad side effect of using IX as the base pointer is that a functions
11661 stack frame is limited to 127 bytes - this will be fixed in a later version.bc
11668 \begin_inset LatexCommand \index{}