\tracking_changes false
\output_changes false
\author ""
+\author ""
\end_header
\begin_body
\end_layout
\begin_layout Standard
-into seperate sections/chapters/appendices (it is hard to document PIC or
+into separate sections/chapters/appendices (it is hard to document PIC or
Z80 in
\end_layout
\begin_layout Date
\size normal
-SDCC 2.8.5
+SDCC 2.8.9
\size footnotesize
\newline
-$Date: 2008-11-16#$
+$Date:: $
\newline
-$Revision: 5272$
+$Revision$
\end_layout
\begin_layout Standard
\family sans
\series bold
-"tar -xvzf sdcc-src-yyyymmdd-rrrr.tar.bz2
+"tar -xvjf sdcc-src-yyyymmdd-rrrr.tar.bz2
\begin_inset Quotes srd
\end_inset
\InsetSpace ~
\InsetSpace ~
\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
# cd $HOME
\end_layout
\begin_layout Standard
\family typewriter
-tar -xzf sdcc.src.tar.gz\InsetSpace ~
+tar -xjf sdcc-src-yyyymmdd-rrrr.tar.bz2\InsetSpace ~
# extract source to directory sdcc
\end_layout
\InsetSpace ~
\InsetSpace ~
\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
# put output in sdcc.build
\end_layout
\InsetSpace ~
\InsetSpace ~
\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
# configure is doing all the magic!
\end_layout
file as well.
The library files created with sdcclib are plain text files, so they can
be viewed with a text editor.
- It is not recomended to modify a library file created with sdcclib using
- a text editor, as there are file indexes numbers located accross the file
+ It is not recommended to modify a library file created with sdcclib using
+ a text editor, as there are file indexes numbers located across the file
used by the linker to quickly locate the required module to link.
Once a .rel file (as well as a .adb file) is added to a library using sdcclib,
it can be safely deleted, since all the information required for linking
is embedded in the library file itself.
Library files created using sdcclib are used as described in the preceding
sections.
+\end_layout
+
+\begin_layout Subsection
+Using ar to Create and Manage Libraries
+\begin_inset LatexCommand index
+name "ar"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Support for ar format libraries was introduced in sdcc 2.9.0.
+ Ar is a standard archive managing utility on unices (Linux, Mac OS X, several
+ unix flavors) so it is not included in the sdcc package.
+\series bold
+
+\newline
+
+\newline
+
+\series default
+For Windows platform you can find ar utility in GNU binutils package included
+ in several projects: Cygwin at
+\begin_inset LatexCommand url
+target "http://www.cygwin.com/"
+
+\end_inset
+
+, MinGW at
+\begin_inset LatexCommand url
+target "http://www.mingw.org/"
+
+\end_inset
+
+.
+\series bold
+
+\newline
+
+\newline
+
+\series default
+Both the GNU and BSD ar format variants are suppurated by asxxxx linkers.
+ Ar doesn't understand the asxxxx object file format, so there is a special
+ version of ranlib distributed with sdcc, called asranlib, which produces
+ the ar symbol lookup table.
+\series bold
+
+\newline
+
+\newline
+
+\series default
+To create a library containing asxxxx object files, you should use the following
+ sequence:
+\series bold
+
+\newline
+
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+ar -Sq <library name>.lib <list of .rel files>
+\end_layout
+
+\begin_layout Standard
+
+\family sans
+\series bold
+asranlib <library name>.lib
+\end_layout
+
+\begin_layout Standard
\begin_inset VSpace bigskip
\end_inset
\end_inset
.
- SDCC uses an adapted version of the preprocessor
-\emph on
-cpp
-\emph default
- of the GNU Compiler Collection
+ SDCC uses an adapted version of the GNU Compiler Collection
\begin_inset LatexCommand index
name "gcc (GNU Compiler Collection)"
\end_inset
+ preprocessor
+\emph on
+cpp
+\emph default
(
\emph on
gcc
\end_inset
-), if you need more dedicated options please refer to the GCC\InsetSpace ~
-4.1.1\InsetSpace ~
+).
+ If you need more dedicated options please refer to the GCC\InsetSpace ~
CPP\InsetSpace ~
-Manual
- at
+Manual at
+
\begin_inset LatexCommand htmlurl
target "http://www.gnu.org/software/gcc/onlinedocs/"
\begin_inset LatexCommand index
-name "-L -\\/-lib-path"
+name "-L <path>"
\end_inset
\begin_layout List
\labelwidthstring 00.00.0000
+\series bold
+-v\InsetSpace ~
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-version
+\begin_inset LatexCommand index
+name "-\\/-version"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "-v"
+
+\end_inset
+
+
+\series default
+ displays the sdcc version.
+\end_layout
+
+\begin_layout List
+\labelwidthstring 00.00.0000
+
\series bold
-c\InsetSpace ~
-
\begin_inset LatexCommand index
-name "-c -\\/-compile-only"
+name "-c"
\end_inset
\end_inset
- is specified for a local variable, it will NOT be overlayed.
+ is specified for a local variable, it will NOT be overlaid.
\end_layout
\begin_layout Standard
\end_inset
- will NOT be overlayed since these are implemented using external functions,
+ will NOT be overlaid since these are implemented using external functions,
e.g.:
\end_layout
from an interrupt service routine.
The #pragma\InsetSpace ~
nooverlay ensures that the parameters and local variables for
- the function are NOT overlayed.
+ the function are NOT overlaid.
\begin_inset VSpace bigskip
\end_inset
\end_layout
\begin_layout Standard
-On other architectures which have seperate opcodes for enabling and disabling
+On other architectures which have separate opcodes for enabling and disabling
interrupts you might want to make use of defines with inline assembly
\begin_inset LatexCommand index
name "Assembler routines"
crtstart.asm
\emph default
- and when linking your project explicitely specify
+ and when linking your project explicitly specify
\emph on
crtstart.rel
\emph default
\family typewriter
printf_large.c
\family default
- does not support float (except on ds390).
- To enable this recompile it with the option
+ does not support float
+\begin_inset LatexCommand index
+name "Floating point support"
+
+\end_inset
+
+ (except on ds390), only <NO FLOAT>
+\begin_inset LatexCommand index
+name "<NO FLOAT>"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "printf floating point support"
+
+\end_inset
+
+ will be printed instead of the value.
+ To enable floating point output, recompile it with the option
\emph on
-
\begin_inset ERT
\emph on
-
\begin_inset ERT
-status collapsed
+status open
\begin_layout Standard
\emph default
for the mcs51 port, since this uses a lot of memory.
+ To enable float support for the pic16 targets, see
+\begin_inset LatexCommand ref
+reference "sub:pic16Libraries"
+
+\end_inset
+
+.
\end_layout
\begin_layout Standard
\begin_layout Standard
printf
\begin_inset LatexCommand index
-name "printf"
+name "printf()"
\end_inset
manually, or when there is a secondary, manually defined interrupt vector
table (e.g.
for the autovector feature of the Cypress EZ-USB FX2).
- More elegantly this can be achieved by obmitting the optional interrupt
+ More elegantly this can be achieved by omitting the optional interrupt
number after the interrupt keyword, see section
\begin_inset LatexCommand ref
reference "sub:Interrupt-Service-Routines"
(+ | -) - switch _asm _endasm block preprocessing on / off.
Default is on.
- You use this prama to define multilines of assembly code.
- This will prevent the preprocessor from changing the formating required
+ You use this pragma to define multilines of assembly code.
+ This will prevent the preprocessor from changing the formatting required
by assembly code.
Below is an example on how to use this pragma.
\end_layout
\begin_layout Standard
Functions that need to be in a switched bank must be put in a named segment.
- The name can be mostly anything upto eight characters (e.g.
+ The name can be mostly anything up to eight characters (e.g.
BANK1).
To do this you either use -
\begin_inset ERT
\newline
Due to the way sdcc handles functions, place called functions prior
to calling functions in the file wherever possible: Otherwise sdcc will
- insert unneccessary pagesel directives around the call, believing that
- the called function is externally defined.
+ insert unnecessary pagesel directives around the call, believing that the
+ called function is externally defined.
\end_layout
\begin_layout Enumerate
device/lib/pic/Makefile
\family default
to reflect your device.
- This might even improve performance for smaller devices as unneccesary
+ This might even improve performance for smaller devices as unnecessary
BANKSELs might be removed.
\end_layout
\end_inset
--pstack-model=[model] Used in conjuction with the command above.
+-pstack-model=[model] Used in conjunction with the command above.
Defines the stack model to be used, valid stack models are:
\end_layout
\end_layout
\begin_layout Subsection
-Enviroment Variables
+Environment Variables
\end_layout
\begin_layout Standard
-There is a number of enviromental variables that can be used when running
+There is a number of environmental variables that can be used when running
SDCC to enable certain optimizations or force a specific program behaviour.
these variables are primarily for debugging purposes so they can be enabled/dis
abled at will.
\begin_layout Standard
\noindent
-This feature allows for linking with specific libraries withoug having to
+This feature allows for linking with specific libraries without having to
explicit name them in the command line.
Note that the
\noun on
Before using SDCC/pic16 there are some libraries that need to be compiled.
This process is done automatically if gputils are found at SDCC's compile
time.
- Should you require to rebuild the pic16 libraries manually, these are the
- steps required to do so under Linux or Mac OS X (cygwin might work as well,
- but is untested):
+ Should you require to rebuild the pic16 libraries manually (e.g.
+ in order to enable output of float values
+\begin_inset LatexCommand index
+name "Floating point support"
+
+\end_inset
+
+ via
+\family typewriter
+printf()
+\family default
+, see below), these are the steps required to do so under Linux or Mac OS
+ X (cygwin might work as well, but is untested):
\end_layout
\begin_layout LyX-Code
su -c 'make install' # install the headers, you need the root password
\end_layout
+\begin_layout Subsubsection*
+Output of float values via printf()
+\end_layout
+
+\begin_layout Standard
+The library is normally built without support for displaying float values,
+ only <NO FLOAT>
+\begin_inset LatexCommand index
+name "<NO FLOAT>"
+
+\end_inset
+
+
+\begin_inset LatexCommand index
+name "printf floating point support"
+
+\end_inset
+
+ will appear instead of the value.
+ To change this, rebuild the library as stated above, but call
+\family typewriter
+./configure.gnu --enable-floats
+\family default
+instead of just
+\family typewriter
+./configure.gnu
+\family default
+.
+ Also make sure that at least
+\family typewriter
+libc/stdio/vfprintf.c
+\family default
+ is actually recompiled, e.g.
+ by
+\family typewriter
+touch
+\family default
+ing it after the
+\family typewriter
+configure
+\family default
+ run or deleting its
+\family typewriter
+.o
+\family default
+ file.
+\end_layout
+
+\begin_layout Standard
+The more common appraoch of compiling
+\family typewriter
+vfprintf.c
+\family default
+ manually with
+\family typewriter
+-DUSE_FLOATS=1
+\family default
+ should also work, but is untested.
+\end_layout
+
\begin_layout Subsection
Adding New Devices to the Port
\end_layout
\emph on
Interrupt Vector Address
\emph default
- which points at the genetated ISR.
+ which points at the generated ISR.
This single GOTO instruction is part of an automatically generated
\emph on
interrupt entry point
Address of the specific interrupt.
This is not a problem for the LOW priority interrupts, but it is a problem
for the RESET and the HIGH priority interrupts because code may be written
- at the next interrupt's vector address and cause undeterminate program
+ at the next interrupt's vector address and cause indeterminate program
behaviour if that interrupt is raised.
\begin_inset Foot
status open
buf
\emph default
should normally be a data pointer where the resulting string will be placed.
- No range checking is done so the user should allocate the necessery buffer.
+ No range checking is done so the user should allocate the necessary buffer.
For fprintf and vfprintf
\emph on
fp
\begin_inset Text
\begin_layout Standard
-descritpion
+description
\end_layout
\end_inset
status open
\begin_layout Standard
-Check that the double quotes or an apostroph within the command line survive
+Check that the double quotes or an apostrophe within the command line survive
the LyX tool chain.
- Previously the apostrophs got slanted in the PDF output so a cut and paste
+ Previously the apostrophes got slanted in the PDF output so a cut and paste
did not work.
\end_layout
\end_layout
\begin_layout Itemize
-check that the compilers are not told to supress warnings.
+check that the compilers are not told to suppress warnings.
\end_layout
\begin_layout Itemize
\end_layout
\begin_layout Enumerate
-give back to the public as you are probably at least partially publically
+give back to the public as you are probably at least partially publicly
funded
\end_layout
\begin_layout Enumerate
-give students a chance to publically prove their skills and to possibly
- see a world wide impact
+give students a chance to publicly prove their skills and to possibly see
+ a world wide impact
\end_layout
\begin_layout Standard
\end_layout
\begin_layout Standard
-The latest publically available version of the standard
+The latest publicly available version of the standard
\emph on
ISO/IEC 9899 - Programming languages - C
\emph default