\begin_layout Date
\size normal
-SDCC 2.8.2
+SDCC 2.8.5
\size footnotesize
\newline
-$Date:: $
+$Date: 2008-11-16#$
\newline
-$Revision$
+$Revision: 5272$
\end_layout
\begin_layout Standard
\end_layout
\begin_layout Itemize
-in older versions, the preprocessor was always called with -std=c99 regardless
- of the --std-xxx setting.
- This is no longer true, and can cause compilation failures on code built
- with --std-c89 but using c99 preprocessor features, such as one-line (//)
- comments
+in older versions, the preprocessor was always called with
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
\end_layout
+\end_inset
+
+-std-c99
+\begin_inset LatexCommand \index{-\/-std-c99}
+
+\end_inset
+
+
+\series default
+ regardless of the
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
\begin_layout Standard
-\emph on
-<pending: more incompatibilities?>
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-xxx
+\series default
+ setting.
+ This is no longer true, and can cause compilation failures on code built
+ with
+\series bold
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-std-c89
+\begin_inset LatexCommand \index{-\/-std-c89}
+
+\end_inset
+
+
+\series default
+ but using c99 preprocessor features, such as one-line (//) comments
+\end_layout
+
+\begin_layout Itemize
+in versions older then 2.8.4 the pic16 *printf() and printf_tiny() library
+ functions supported undocumented and not standard compliant 'b' binary
+ format specifier ("%b", "%hb" and "%lb").
+ The 'b' specifier is now disabled by default.
+ It can be enabled by defining BINARY_SPECIFIER macro in files device/lib/pic16/
+libc/stdio/vfprintf.c and device/lib/pic16/libc/stdio/printf_tiny.c and recompilin
+g the library.
+\end_layout
+
+\begin_layout Itemize
+in versions older then 2.8.5 the unnamed bitfield structure members participated
+ in initialization, which is not conforming with ISO/IEC 9899:1999 standard
+ (see section Section 6.7.8 Initialization, clause 9)
+\newline
+
+\newline
+Old behavior, before
+ version 2.8.5:
+\family typewriter
+
+\newline
+\InsetSpace ~
+\InsetSpace ~
+struct {
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+int a : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+char\InsetSpace ~
+ : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+int b : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+} s = {1, 2, 3};
+\family default
+
+\newline
+
+\family typewriter
+/* s.a = 1, s.b = 3 */
+\family default
+
+\newline
+
+\newline
+New behavior:
+\family typewriter
+
+\newline
+\InsetSpace ~
+\InsetSpace ~
+struct {
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+int a : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+char\InsetSpace ~
+ : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+\InsetSpace ~
+int b : 2;
+\newline
+\InsetSpace ~
+\InsetSpace ~
+} s = {1, 2};
+\family default
+
+\newline
+
+\family typewriter
+/* s.a = 1, s.b = 2 */
\end_layout
\begin_layout Section
Lower runtime footprint.
\end_layout
+\begin_layout List
+\labelwidthstring 00.00.0000
+-
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-without-ccache Do not use ccache even if available
+\end_layout
+
\begin_layout Standard
Furthermore the environment variables CC, CFLAGS, ...
the tools and their arguments can be influenced.
\end_layout
\begin_layout Standard
+\noindent
Currently supported devices include:
\end_layout
\end_layout
\begin_layout Standard
+\noindent
An up-to-date list of currently supported devices can be obtained via
\family typewriter
sdcc -mpic14 -phelp foo.c
\end_layout
\begin_layout Standard
-18F: 2220, 2221, 2320, 2321, 2331, 2420, 2423, 2431, 2455, 2480, 24j10
+18F: 2220, 2221, 2320, 2321, 2331, 2410, 2420, 2423, 2431, 2450, 2455, 2480,
+ 24j10
\end_layout
\begin_layout Standard
-18F: 2520, 2523, 2525, 2550, 2580, 2585, 25j10, 2620, 2680, 2682, 2685
+18F: (2510,) 2515, 2520, 2523, 2525, 2550, 2580, 2585, 25j10, 2610, 2620,
+ 2680, 2682, 2685
\end_layout
\begin_layout Standard
-18F: 4220, 4221, 4320, 4321, 4331, 4420, 4423, 4431, 4455, 4480, 44j10
+18F: 4220, 4221, 4320, 4321, 4331, 4410, 4420, 4423, 4431, 4450, 4455, 4480,
+ 44j10
\end_layout
\begin_layout Standard
-18F: 4520, 4523, 4525, 4550, 4580, 4585, 45j10, 4620, 4680, 4682, 4685
+18F: 4510, 4515, 4520, 4523, 4525, 4550, 4580, 4585, 45j10, 4610, 4620,
+ 4680, 4682, 4685
\end_layout
\begin_layout Standard
-18F: 6520, 6585, 6620, 6680, 6720
+18F: 6520, 6585, 6620, 6680, 66j60, 66j65, 6720, 67j60
\end_layout
\begin_layout Standard
-18F: 8520, 8585, 8620, 8680, 8720
+18F: 8520, 8585, 8620, 8680, 86j60, 86j65, 8720, 87j60
\end_layout
\begin_layout Standard
-A list of supported devices is also available via '
+18F: 96j60, 96j65, 97j60
+\end_layout
+
+\begin_layout Standard
+\noindent
+An up-to-date list of supported devices is also available via '
\family typewriter
sdcc -mpic16 -plist
\family default
\end_layout
\begin_layout Standard
+\noindent
In addition the following macros are defined when calling assembler:
\end_layout
\end_layout
\begin_layout Standard
+\noindent
This feature allows for linking with specific libraries withoug having to
explicit name them in the command line.
Note that the
\begin_layout Subsection
Libraries
+\begin_inset LatexCommand \label{sub:pic16Libraries}
+
+\end_inset
+
+
\end_layout
\begin_layout Standard
\end_layout
\begin_layout Standard
+\noindent
Libraries are created with gplib which is part of the gputils package
\begin_inset LatexCommand \url{http://sourceforge.net/projects/gputils}
\begin_layout Standard
Before using SDCC/pic16 there are some libraries that need to be compiled.
- This process is not done automatically by SDCC since not all users use
- SDCC for pic16 projects.
- So each user should compile the libraries separately.
-\end_layout
-
-\begin_layout Standard
-The steps to compile the pic16 libraries under Linux and Mac OS X are:
+ 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):
\end_layout
\begin_layout LyX-Code
\end_layout
\begin_layout LyX-Code
-./configure
-\end_layout
-
-\begin_layout LyX-Code
-make
+./configure.gnu
\end_layout
\begin_layout LyX-Code
su -c 'make install' # install the libraries, you need the root password
\end_layout
+\begin_layout LyX-Code
+cd ../..
+\end_layout
+
\begin_layout Standard
If you need to install the headers too, do:
\end_layout
su -c 'make install' # install the headers, you need the root password
\end_layout
-\begin_layout Standard
-There exist a special target to build the I/O libraries.
- This target is not automatically build because it will build the I/O library
- for
-\emph on
-every
-\emph default
- supported device.
- This way building will take quite a lot of time.
- Users are advised to edit the
-\series bold
-device/lib/pic16/pics.build
-\series default
- file and then execute:
-\end_layout
-
-\begin_layout LyX-Code
-make lib-io
-\end_layout
-
\begin_layout Subsection
Adding New Devices to the Port
\end_layout
\begin_layout Standard
Adding support for a new 16
\begin_inset ERT
-status open
+status collapsed
\begin_layout Standard
\family typewriter
/path/to/sdcc/device/lib/pic16/pics.all
\family default
- (and
-\family typewriter
-.build
-\family default
-).
+
\newline
Note: No 18f prefix here!
\end_layout
\begin_layout Enumerate
-Set up the I/O library by doing
-\series bold
-one
-\series default
- of the following:
-\end_layout
-
-\begin_deeper
-\begin_layout Enumerate
-Adjust
+Edit
\family typewriter
-/path/to/sdcc/device/lib/pic16/libio/*.ignore
-\family default
+/path/to/sdcc/device/include/pic16/adc.h
+\newline
+\family default
+Add the new devices to the correct ADC style class (depending on the number
+ of ADC channels).
\newline
-Add your DEVICE if it does not compile in
+Do not touch
\family typewriter
-adc
+adc.h
\family default
-,
+ if the device does not offer any ADC at all.
+\end_layout
+
+\begin_layout Enumerate
+Edit
\family typewriter
-i2c
+/path/to/sdcc/device/include/pic16/pic18fregs.h
\family default
-, or
+
+\newline
+The file format is self-explanatory, just add
+\newline
+
\family typewriter
-usart
+#elif defined(picDEVICE)
+\newline
+#
+\begin_inset ERT
+status collapsed
+
+\begin_layout Standard
+
+
+\backslash
+
+\backslash
+
+\end_layout
+
+\end_inset
+
+include <picDEVICE.h>
\family default
-.
+
+\newline
+at the right place (keep the file sorted, please).
\end_layout
\begin_layout Enumerate
-Adjust
+Edit
\family typewriter
-/path/to/sdcc/device/include/pic16/adc.h
+/path/to/sdcc/device/include/pic16devices.txt
\newline
\family default
-Add the new devices to the correct ADC style class.
+Copy and modify an existing entry or create a new one and insert it at the
+ correct place (keep the file sorted, please).
\end_layout
-\end_deeper
\begin_layout Enumerate
-Edit
+Add the device to
\family typewriter
-/path/to/sdcc/device/include/pic16/pic18fregs.h
+/path/to/sdcc/device/lib/pic16/libdev/Makefile.am
\family default
-.
- The file format is self-explanatory, just add
+
\newline
+Copy an existing entry and adjust the device name.
+\end_layout
+\begin_layout Enumerate
+Add the device to
\family typewriter
-#elif defined(picDEVICE)
-\newline
-# include <picDEVICE.h>
+/path/to/sdcc/device/lib/pic16/libio/Makefile.am
\family default
\newline
-at the right place (keep it sorted).
+Copy the record from the 18f2220 and adjust the device name.
+\newline
+If the new device
+ does not offer ADC, I
+\begin_inset Formula $^{\text{2}}$
+\end_inset
+
+C, and/or (E)USART functionality as assumed by the library, remove the lines
+ with references to
+\family typewriter
+adc/*.c
+\family default
+,
+\family typewriter
+usart/*.c
+\family default
+, or
+\family typewriter
+usart/*.c
+\family default
+, respectively.
\end_layout
\begin_layout Enumerate
-Edit
+Update
\family typewriter
-/path/to/sdcc/device/include/pic16devices.txt
+libdev/Makefile.in
+\family default
+ and
+\family typewriter
+libio/Makefile.in
+\family default
+ using
\newline
+\family typewriter
+./bootstrap.sh
\family default
-Copy and modify an existing entry or create a new one and insert it at the
- correct place (keep the file sorted).
+
+\newline
+in
+\family typewriter
+/path/to/sdcc/device/lib/pic16
+\family default
+.
\end_layout
\begin_layout Enumerate
-Recompile the pic16 libraries.
+Recompile the pic16 libraries as described in
+\begin_inset LatexCommand \ref{sub:pic16Libraries}
+
+\end_inset
+
+.
\end_layout
\begin_layout Subsection
\end_layout
\begin_layout Standard
+\noindent
\noun on
Large
\end_layout
\begin_layout Standard
+\noindent
Generic pointer are read and written with a set of library functions which
read/write 1, 2, 3, 4 bytes.
\end_layout
\end_layout
\begin_layout Standard
+\noindent
\align center
\begin_inset Tabular
<lyxtabular version="3" rows="2" columns="7">
\end_layout
\begin_layout Standard
+\noindent
Currently implemented there are 3 types of streams defined:
\end_layout
\begin_layout Standard
+\noindent
\align center
\begin_inset Tabular
<lyxtabular version="3" rows="4" columns="4">
\end_layout
\begin_layout Standard
+\noindent
The stream identifiers are declared as macros in the stdio.h header.
\end_layout
\begin_layout Standard
+\noindent
In the libc library there exist the functions that are used to write to
each of the above streams.
These are
\end_layout
\begin_layout Standard
+\noindent
The prototypes for these names are defined in the header file
\emph on
signal.h
\end_layout
\begin_layout Standard
+\noindent
In order to simplify signal handling, a number of macros is provided:
\end_layout
Known Bugs
\end_layout
+\begin_layout Subsubsection
+Extended Instruction Set
+\end_layout
+
+\begin_layout Standard
+The PIC16 port emits code which is incompatible with the extended instruction
+ set available with many newer devices.
+ Make sure to always explicitly disable it, usually using
+\end_layout
+
+\begin_layout Standard
+
+\family typewriter
+static __code char __at(__CONFIG4L) conf4l = /* more flags & */ _XINST_OFF_4L;
+\end_layout
+
\begin_layout Standard
-The PIC16 Port currently does not pass SDCC's regression test
+\noindent
+Some devices (namely 18f2455, 18f2550, 18f4455, and 18f4550) use _ENHCPU_OFF_4L
+ instead of _XINST_OFF_4L.
+\end_layout
+
+\begin_layout Subsubsection
+Regression Tests
+\end_layout
+
+\begin_layout Standard
+The PIC16 port currently passes most but not all of the tests in SDCC's
+ regression test
\begin_inset LatexCommand \index{Regression test (PIC16)}
\end_inset
\end_inset
-) and thus the snapshot build regression tests for the PIC16 target are
- currently disabled for all hosts
-\emph on
-.
+), thus no automatic regression tests are currently performed for the PIC16
+ target.
\end_layout
\begin_layout Chapter