2.34.11.0171

Product: 

RKit-STM8 2.34.11.0171 (Released 2011/06/20)
--------------------------------------------

New supported microcontrollers:

. STM8AF526, STM8AF528, STM8AF52A
. STM8AF612
. STM8AF622, STM8AF624, STM8AF626, STM8AF628, STM8AF62A
. STM8L151C2, STM8L151K2, STM8L151G2, STM8L151F2
. STM8L151C3, STM8L151K3, STM8L151G3, STM8L151F3
. STM8S207K8

Improvements:

. ST Visual Develop projects (*.stw) can be imported.
. Inline keyword is now supported by the C compiler.
. Build-in support for IEC60335 Class B (CRC checking, RAM ranges).
. Improved far code/data access by compiler.
. Speed optimization for trigonometric functions.
. Compiler provides a fix for the STM8 bug in interrupted divisions. Fix
is automatically applied on interrupt with divisions. The compiler
pragma CLEANIRQDIVFLAG forces fix for interrupts with calls.
. Upgraded the ST firmware libraries to the latest released versions.

Fixes:

. The 'far' qualifier was not applied to typedef'ed variables.
. Compiler engineering fixes.
. Corrected RAM and EEPROM sizes for STM8S207SB, STM8S208x6, STM8S208x8
and STM8S208SB.
. In linker, gaps after absolute segments weren't filled (GAP directive)
and some gaps used to be filled more than once!
. Assembler didn't support LDF direct memory access from/to A register.
. The STM8 simulator was counting 2 cycles instead of 1 for the NOP
instruction. Note that the ST7 simulator correctly handles NOP as a
2-cycle instruction.
. EEPROM variables weren't supported by debugger.
. Symbol file name wasn't correct when including files in source.

RKit-STM8 2.32.10.0307 (Released 2010/11/03)
--------------------------------------------

New supported microcontrollers:

. STM8S208R6, STM8S208C6, STM8S208S6
. STM8S208R8, STM8S208C8, STM8S208S8

. STM8L151R6 (32k flash, with LCD)
. STM8L151C8 (without LCD, 48 pins)
. STM8L151R8 (without LCD, 64 pins)
. STM8L151M8 (without LCD, 80 pins)
. STM8L152R6 (32k flash, without LCD)
. STM8L152C8 (with LCD, 48 pins)
. STM8L152R8 (with LCD, 64 pins)
. STM8L152M8 (with LCD, 80 pins)
. STM8L162R8 (with AES, 64 pins)
. STM8L162M8 (with AES, 80 pins)

Improvements:

. The 16x16 -> 32 fast long multiplication is now automatically
activated for both signed and unsigned operands.
. Some speed optimizations for faster touch sensing measurement.
. The ^= operator has been optimized in order to use the optimal BCPL
assembly operator for single-bit operations.
. The dynamic memory manager (malloc, calloc, realloc, free) is now
properly documented in the RCSTM8 Compiler Manual.
. The SP rollover mechanism is now fully implemented in the STM8
simulator.
. Compiler provides an error message when an absolute variable is
declared above 0xFFFF but isn't far code.

Fixes:

. Some compiler engineering fixes: The O(3) optimization level could
produce invalid code in rare situations.
. The assembler could generate invalid debug information when under
ST Visual Develop.
. The option byte OPT7 of the 'OPTION' peripheral in the debugger
was incorrectly decoded, resulting in 'wait states' bit being wrong.
. In C function parameters, const attribute used to be lost when used
with arrays.
. Absolute variables larger than 32KB weren't properly stored in the
object file (compiler).

RKit-STM8 2.30.10.0175 (Released 2010/06/28)
--------------------------------------------

New supported platform:

. Open4-STM8L (also referenced as ST product EvoPrimer-STM8L15).

Improvements:

. In speed optimized mode, the compiler now emits 32-bit aligned
functions instead of 16 bit. This provides faster execution as the
STM8 fetches flash through a 32-bit bus.
. Each C run-time function is now in its own segment, which helps the
linker make best use of the code space.
. C run-time library has been further optimized for speed.
. 1-byte segments can now be located in byte-spaced holes left over by
16-bit aligned segments.
. The assembler now supports DWORD segment alignment mode (32-bit).

Fixes:

. In SRC mode (compile through assembly) the interrupt vectors were not
always properly located.
. In SRC mode the source lines were not correctly displayed in the
disassembly window.
. In speed optimization mode, the functions were not aligned on DWORD
when using SRC mode for inline assembler.
. Slight engineering fixes on compiler and assembler.
. hbit does not generate 'Multiple public definitions' error anymore.
. log(infinity) now properly returns infinity (IEEE754).
. realloc(ptr, 0) now frees ptr.
. While linking inram functions with overlayed segments, the RMUNCALLED
linker directive was failing.
. OMF2ELF wasn't properly supporting self-refercing structures.
. ST7 programs without use of the RTL library used to freeze OMF2ELF.
. Compiler optimization pass used to remove POP CC instruction.

RKit-STM8 2.28.10.0092 (Released 2010/04/27)
--------------------------------------------

Improvements:

. The Compiler directive STRUCT_OPT make it possible to handle unnamed
fields within struct/unions.

For example:

struct s
{
char a;
union
{
struct
{
char b_hi8;
char b_lo8;
} bytes;
unsigned short b_16;
} dummy2;
} mystruct;

mystruct.b_hi8 = 42; // Shortcut for mystruct.dummy2.bytes.b_hi8
mystruct.b_16++; // Shortcut for mystruct.dummy2.b_16

. Common sub-expressions optimizations are now more aggressive in SPEED
compilation mode. Note that speed-optimized code may be a little bit
bigger with this new compiler version.
. The context save in interrupt handlers has been optimized in both code
size and execution speed.
. EEPROM variables which do not have an initializer will not be
programmed anymore. This makes it easy to keep backup data in EEPROM
even if the Flash must be reprogrammed.
. The enum size can now automatically extend from 8 to 16 bits. For
example when using 'enum { VAL1 = 0x1234, VAL2 = 0x5678 } myenum;' the
myenum type will have a 16-bits type even if the ENUMTYPE(CHAR)
directive is applied. This feature makes it easy to mix 8 and 16 bit
enumerations in a project.
. A warning C261 will be emitted by the compiler when calling an
absolute function located above address 0xFFFF in SMALL memory model.
. Volatile structures are now handled as volatile even if there is no
lvalue.
. BSET/BRES opcodes are now generated even in optimization levels lower
than O(3). This makes bit handling instructions atomic.
. In SRC mode, the compiler will now display the potential error
messages emitted by the assembler.
. The printf() function now supports denormalized IEEE754 floats as
input (treating them as null values).
. The assembler input line length has been extended to allow code lines
up to 16KB long.
. The linker now handles specific optimized versions for printf and
sprintf (when no user-supplied version of the function is available).
. All schematics for REva/Primer/daughterboards are now provided as
searchable pdf files.
. The STM8S105 (hence STM8S-Discovery) specific putchar has been
implemented, so that printf works 'out of the box' with these
derivatives.
. Some STM8S103, STM8L15x peripheral adresses have been corrected,
providing enhanced debugger capabilities when handling peripherals.
. The Ride7 debug sessions now offer advanced modes (do not program
flash before debug, leave option bytes unmodified, clear EEPROM, do
not reprogram EEPROM etc...)
. It is now straightforward to modify EEPROM from the Ride7 debug
interface: Just modify the memory bytes as required and you are done.
. The STM8 debugger now offers session options: erase flash, program
flash, erase EEPROM, program EEPROM, program option bytes, activate
read-on-the-fly debugging, define debugger/core priority on memory
accesses.
. The STM8_pgm command-line programming tool now supports several
RLink connections ('M' option), which offers 'gang programming'.
. It is now possible to use auto-relocation mode for projects that
include assembler files.

Fixes:

. When several definitions of the same union were present, the compiler
was not behaving properly.
. Static variables were not correctly supported when using SRC mode and
inline assembly.
. Common sub-expressions are now available even in LARGESTACK mode.
. Y is not saved/restored anymore in 'trap' handlers.
. Compiler was always mapping interrupt handlers to section 0 (address
below 0xFFFF).
. Some compiler engineering fixes.
. The assembler was not properly generating public and symbols when
located above address 0x10000, causing debugging difficulties.
. Some problems in the STVD debugger have been fixed.
. Assembler was not supporting the LDF mnemonic with the Y operand.
. The linker was not properly sorting segments with identical sizes.
. Constant casts in an array initialization could lead to a linker
error.
. In project with a large number of external variables and functions,
the linker could fail to properly resolve all function fixups.
. The linker was not correctly linking a user-written printf, and was
keeping the optimized version instead.
. The debugger was generating stack underflow messages when debugging
devices with a stack address below 0x1000.
. Debug of code located over address 0xFFFF was not possible.
. Debugger now properly supports debug of RTL routines performing
advanced tricks on SP and PC.
. The ST72361J7 was using incorrect memory mapping (Code start was
0xC000 instead of 0x4000)
. The memory area 0x8000-0x8080 is always reserved for interrupt vectors
on STM8, and cannot be used for storing executable code anymore.

RKit-STM8: 2.26.09.0317 (Released 2009/11/13)
---------------------------------------------

New supported microcontrollers:

. STM8L151x4
. STM8L151x6
. STM8L152x4
. STM8L152x6

New supported boards:

. STM8L152 Daughterboard for REva.
. STM8S105 Daughterboard for REva.
. STM8S903 Daughterboard for REva.
. STM8L1/L2-EVAL from ST Microelectronics
. STM8L1526-EVAL from ST Microelectronics
. STM8S/128-EVAL from ST Microelectronics

Improvements:

. Support for Windows 7.
. Compiler optimization: 'long' variables are now handled indirectly
when possible, which helps generating smaller code.
. Compiler optimization: Handling of shift operators is now more
efficient.
. Various peephole optimizations in the compiler for an overall
generated code size improvement.
. When Compiler output files must be placed in a nonexistent directory,
the Compiler will now create it.
. The linker now supports a FCODE directive that makes it easy to locate
some far code segments at given addresses.
. An OMF2HEX.exe utility is now provided with RKit-STM8. This utility
translates OMF files to HEX or BIN format, and supports files with
code at addresses higher than 0xFFFF.
The older utility OHST7.exe is still provided, but for historical
reasons only, and its use should be replaced by OMF2HEX.exe.
. OMF2ELF sets is_stmt to 0 on statement sequence end.
. debugger: Add option to disable Read-On-The-Fly.
That avoids debugger slowdown or crash with some applications.
. debugger: Add option to give priority to the debugger over the core
for bus accesses.
That avoids debugger slowdown or crash with some applications.

Fixes:

. In STM8 large mode, the C startup was performing a 'JP main' instead
of a 'JPF main'. In cases where the main() function was located above
address 0xFFFF, the program was not able to start.
. (s)printf('%#02x', val) was diplaying an extra leading zero in output.
. Some Compiler engineering fixes (error C041 happening on multiple NOP
optimizations).
. The Y register is not pushed anymore upon interrupt entry, as the
processor automatically performs the push during the interrupt.
. Some Linker engineering fixes (CodeCompressor fixup errors when using
large inram functions with arguments on stack).
. The N and Z flags were not updated by RLWA and RRWA instructions in
the STM8 simulator.
. The compiler improperly managed initialized bit and uninitialized
bit mix.
. STM8 only: %s now accepts strings larger than 256 characters, but
field width and precision are still limited to such value.
. Debugger: Corrected recovery procedure after SWIM com error. This
reduces the probability of burst of errors.
. Under ST Visual Develop, it was not possible to set a breakpoint on
memory adresses above 0x10000. This has been fixed in OMF2ELF.exe.

RKit-STM8: 2.24.09.0238 (Released 2009/08/27)
---------------------------------------------

New supported microcontrollers:

. STM8S903K3
. STM8L151G4
. STM8L151G6

Improvements:

. Changes to project options in Ride (such as optimization level for
instance) now lead to an automatic compilation upon project 'make'. In
previous RKit-STM8 versions it was necessary to perform a 'build', as
'make' was not recompiling files with modified options.

Fixes:

. During verification and read-out of the flash, RLink was not behaving
properly and was emitting errors such as:
Error 304: Communication error: Timeout error reading on USB:
WDU_Transfer() failed:
error 0x20000002 ('Invalid pipe number') RLink operations broken
This problem has been solved and RLink now behaves normally.
. In ST7 mode, data overlays may get removed when using the RMUNCALLED
linker option.
This bug was present in last version (2.22.09.0203) only.

Limitations:

. CodeCompressor is reported as being in evaluation mode in the
'Help | About' box from Ride7, even when using an enterprise suite.
This is a cosmetic bug, as CodeCompressor works as expected anyway.

RKit-STM8: 2.22.09.0203 (Released 2009/07/24)
---------------------------------------------

Improvements:

. Integrates the version 1.1.1 of the STM8S firmware library.
. The toolchain now supports 'inram' functions, which make it easy to
execute functions from RAM (STM8 only), in order to reprogram the
Flash (IAP) or to execute from RAM with Flash disabled (ultra-low
power mode).
. Created the SEGMENTOVERLAY linker directive to optimize inram
functions placement in memory.
. Handling of long arithmetic has been optimized in speed mode.
. Object files are now directly generated by the compiler in SRC mode.
In previous versions, it was necessary to manually call the assembler
after a source file was produced by the compiler in SRC mode.
. The SRC mode is now available in the evaluation version of RKit-STM8,
although the intermediate assembler files are not generated by the
compiler in such a case.

Fixes:

. In STM8 mode, library functions ?C?fptolix, ?C?addix32 and ?C?subix32
could overwrite the Y register.
. 'shortval = (char)shortval' was optimized in little-endian mode,
leading to an invalid result. Same for 'longval = (short)longval'.
. Compiler engineering fixes.
. The linker was not properly handling case sensitivity when using
input command files.
. Restored the start menu shortcut to FoxPrimerGui.exe.
. The assembler was not properly assembling 'LDW Y,(value,Y)' when
value was page0-located. CPW was suffering from the same symptoms.

RKit-STM8: 2.20.09.0161 (Released 2009/06/12)
---------------------------------------------

Improvements:

. Some register names have been changed in the debugger interface in
order to match the ST names.
. The unused linker segments (removed through the linker REMOVEUNCALLED
directive) are not taken into account for computing the ROM size
anymore. This lets the 16KB evaluation version build projects using
the STM8 firmware library.

Fixes:

. In SPEED optimization mode, the ?C?divu3232S compiler library function
could exhibit an invalid fixup error on very large projects. The
library has been corrected appropriately.
. The programmation of STM8L devices with no EEPROM could lead to a
crash in the Ride7 interface.
. When using mode SRC, the assembler was not keeping acurrate location
of PAGE0 data objects, leading to less optimal code. This has been
optimized.
. The STM8 simulator was creating a spurious ST7 EEPROM peripheral.
This could cause some writes to data address 0x48 to be inoperant in
simulation mode.

RKit-STM8: 2.20.09.0139 (Released 2009/05/20)
---------------------------------------------

Improvements:

. The compiler now supports a fast 16-bit x 16-bit -> 32 bit
multiplication.
. The 'dummy read' of a volatile variable in C now generates some code
that loads the variable in the accumulator, generating a memory read.
This makes it easier to handle hardware registers with 'clear-on-read'
or 'modify-on-read' capability.
. The _wfe_() intrinsic function is now available.
. The installer technology has been improved, and is now based on Wix.

Fixes:

. The eeprom-qualified arrays were not properly handled by the compiler.
. Several peephole optimizations leading to invalid code in O(3)
optimization level have been fixed. Most noticeably, the stm8_can.c
file from the ST firmware library was generating an internal error in
the compiler in some optimization modes.
. The SRC mode for inline assembler was not properly handling
uninitialized global variables.
. The omf2elf.exe utility was not properly handling input files with a
path name larger than 127 characters.
. The omf2elf.exe utility is now handling the reset vector space by
default.
This makes it easier to use CodeCompressor under STVD.
. When using typedef on a variable, the near/far attributes were held by
the typedef. Now the near/far attributes are not held by the typedef
anymore.
. Logical tests on bitfields wasn't properly handled.

RKit-STM8: 2.16.0903 (Released 2009/04/02)
------------------------------------------

New supported microcontrollers:

. STM8L101G2
. STM8L101F3
. STM8L101G3
. STM8L101K3

Improvements:

. Major Compiler improvements, mostly in speed mode but also in
the ROM footprint of generated code size.
. The C compiler now has a fast library. Raisonance has been developing
an alternative version of the RCSTM8 C library which offers much
faster operation (typically 40 to 70% speed improvement) at the cost
of a reduced feature set:
- Infinities are not handled. For instance, 1.0 / 0.0 returns 1.0
with the fast float library.
- Overrun/underrun is not checked. For instance, 1e20 / 1e-20 leads
to a result which is not representable in IEEE-754 single
precision, and should therefore be reported as INF. This is
properly handled by the standard float library, but leads to an
invalid result with the fast float library.
- NaN are not handled in the fast float library.
- IEEE rounding is NOT the same as the 8087 FPU, but is a truncate
instead.
This means that the transcendental operations +, -, * and / may
report a result which is slightly different than the standard float
library.
- The '-0.0' value is not supported as input. Most noticeably,
comparing 2 floats respectively holding the 0.0 and -0.0 values
will report the floats as being different.
- X / 0.0 returns X, for any X value.
- Arithmetic is performed on 24-bit mantissas (instead of 32-bits)
for the standard float library.
This may in some cases lead to decreased accuracy (wrong mantissa's
lsb).
In addition to fast IEEE-754 operations, the RCSTM8 fast
floating-point libraries
have some size optimizations in the C library functions, which may
therefore have a slightly larger footprint.
NOTE: The fast floating-point libraries are only available for STM8
and will not be developed for ST7.
In order to use the fast libraries in your projects, you can activate
them through the new 'FASTLIBRARY' linker directive. Alternately this
option os now available directly from Ride7 in your project options.
. The STM8 software simulator now supports all the available STM8
peripherals.
. The C compiler has improved support for EEPROM variables.
. Linker now has support for EEPROMSIZE and EEPROMSTART directives.
These are automatically handled by Ride7.
. The C compiler now generates an error 143 when 2 absolute CODE
segments have the same name.
This can happen if several functions are defined for the same
interrupt number.
. EEPROM programming added with RLink
. STM8_pgm.exe selective erase feature added, to allow erasing only
Flash, EEPROM or Option Bytes
. Devices documentation has been updated

Fixes:

. STM8S10x devices have been corrected (their EEPROM size was incorrect)
. ST72325J and ST72325R/ST72321BR examples have been corrected.
. A C preprocessor problem has been fixed: The ## preprocessor
directive, when present in a macro expansion, was processed AFTER the
macro arguments expansion, although the C standard requires the ## to
be processed BEFORE arguments expansion.
This problem is very unlikely in standard code however.
. Note that the STM8 firmware library distributed by ST has the folowing
problem, duplicated interrupts 20, 21 and 22 should be removed from
the interrupts C file from the examples.
Corrected STM8A and STM8S Firmware Libraries are now available from
the ExamplesSTM8 directory.
The 'v1.0.1-Corrected_examples' directory contains the 'v1.0.1'
library, with the following corrections:
- The asm_functions.asm file has been removed in both Ride7 and STVD
projects.
- The file was required for the GetCC function, which is natively
available in RCSTM8 through the intrinsic function _GetCC_().
- The stm8_it.c file has all interrupt handlers commented. This is
because the interrupts 20, 21 and 22 were defined several times,
causing Linker problems.
Moreover it is a good thing not to define unused interrupt vectors.
- The derivative used in the example is now STM8S208RB instead of
STM8AF6142.
- The compiler options have been corrected for the STVD project.
The optimization is now fully activated.
. ST72325J and ST72325R/ST72321BR examples have been corrected.
. STM8S10x devices have been corrected (their EEPROM size was incorrect)
. Programming of STM8 devices with 32K or less flash corrected
. Option Bytes programming corrected for STM8
. Some speed improvements for the memcpy function.

RKit-STM8: 2.13.0810 (Released 2008/10/24)
------------------------------------------

. Compiler: Major size and speed optimization improvements.
. The compiler now supports the NOPROPAGATION(aggressive) directive,
which devalidates some potentially harmful optimizations.
. Linker has been optimized so that large projects are processed much
faster.
. Corrected an issue that could crash the linker on projects using an
user-provided startup that calls ?C?ZeroData and when there is no
zero-initialized data.
. CodeCompressor can now be run automatically upon project build.
. The DUPLICATESTRING compiler option is now properly activable from the
Ride7 interface.
. The assembler now supports a WORD segment alignment directive. This
provides faster execution of word-aligned functions on STM8 devices.
. Renamed the command-line CodeCompressor to ccompst7_7.exe.
. CodeCompressor now reqyuires the -T(2) command-line option for STM8
activation.

RKit-STM8: 2.10.0000 (Released 2008/07/24)
------------------------------------------

. Operates on Windows Vista 64-bit platforms
. Global variables are not initialized by default when using RKit-STM8.
Globals were initialized by default in previous versions.
. Updated STM8 (ST7) Compiler, Linker and Assembler documentation
. Global data initialization scheme has been modified and is now
optimized in a project-wide way.
CAUTION: In case some of your older projects are using a specific
startup routine, you will need to modify it to match the new datainit
constraints.

. Global variables initialized to 0 are now in a separate segment, so
that their initialization is more efficient.
. A new constant propagation scheme has been implemented, which enables
constant to be propagated even in the presence of selection
instructions (if, while) or iteration instructions (for, switch).
. Common sub-expressions optimizations are fully activated.
. Long and float management is now done through indirect functions where
possible. This means that the compiler now internally handles such
objects by reference (1 or 2 bytes) instead of by value (4 bytes),
leading to shorter compiled code. Note that the library functions are
bigger than in previous Compiler versions though.
. Speed optimization has been improved on long and float management.
. Code generation improvements on most common operators (most noticeably
+ and *)
. Created the __RCSTM8__ and __STM8__ macros.
. The __AUTO__ macro now returns 2 macros when LARGESTACK mode is
activated.

Fixes:

. Now the STM8/ST7 Linker is always case-sensitive when called from
Ride7.
This makes it possible to have 2 variables in a C program named 't'
and 'T' without any conflict.
. Objects with absolute addresses between 0xC0 and 0xFF can now be
created as 'public' in ST7 mode.
. Corrected the computation of far pointer arithmetic. Previously, the
addition of a constant to a far pointer was improperly handled.
. Corrected compiler handling of interrupt handler functions. This
correction was initially implemented in the RCSTM8 patch released on
May 26, 2008.
. Corrected the RESERVE linker directive which previously reserved an
area that was too small by 1 byte.
. When optimizing for speed of execution, use of 'switch' statements can
generate incorrect code.

Rkit-STM8 :2.01.0008 (Released 2008/01/15)
------------------------------------------

. The previous version of the Raisonance RKit-STM8 was limited to Ride6.
It now supports the Ride7 interface.
. The STM8 processor family is now supported. The ST7 family is
supported by the same set of tools. For details about the
STM8-specific features, please refer to the RCST7 Compiler, MAST7
Assembler and RLST7 Linker manuals.
. The RCST7 optimiser for ST7 family has been improved and now generates
smaller code sizes.
. Volatile variables management and optimization propagation has been
enhanced.
. The linker now has the 'rmun' option that automatically removes
uncalled segments. This option is useful when compiling with a library
of functions in which only a limited number of the functions are
required by the user.
Additionally, the linker has now a 'preserve' options that explicitly
forces some segments to be kept during the link phase, even if they
are not called.
. SCI initialization scheme has been modified: No need to call the
_?init_SCI? function anymore. Now putchar takes care of initialization
of its device (SCI or USART). Moreover, the source code for all
putchar versions (adapted to each ST7 or STM8 family) is given along
with the library, so that users can freely modify them if required. No
more default initialization is performed when the SCINAME linker
directive is not defined. Note that if putchar is not used there is no
SCI initialization either.
. STM8 USART support has been implemented into putchar(). In the
simulator the STM8 USART is properly working, but only in super-fast
mode (read and write buffers are always available for reading/writing)
. The float comparison has been corrected so that it is possible to test
specific float values: It is now possible to compare floating-point
values Infinity, -Infinity and NaN (Not-a-number) to other floats.
. BSET/BRES was not properly working on bitfield structures at absolute
addresses. This ST7 bug has been fixed.
. Overlaying the variables in different C subscopes was causing some
stack overlap in case empty scopes (with no local variables) were met.
. The ldiv() function was not working properly in cases the caller was
calling another function returning a structure.
. The segment names exported by the RCST7 Compiler were in lowercase,
potentially causing problems when linking with the CODE feature. Now
the Compiler segment names are always uppercased.
. The static functions used to have their segment name duplicated
(making the map file harder to read)
. The STACK0 directive (for Ultralite devices) was not functional except
when explicitly required in the 'More options' field.
. An array of 'hreg' was causing a crash in the Compiler.

--------------------------------------------------------------------------------
SECTION 3 Known limitations
--------------------------------------------------------------------------------

Project settings
----------------
. Project and file names and paths must not contain special characters
such as comma (','), semicolon (';'), parentheses ('(' or ')').

RBuilder
--------
. Not available for STM8 families.

C Compiler
----------
. The inline assembly file produced by the compiler in SRC mode is
available on the RKit-STM8 Enterprise suite. On Lite and Eval versions
the SRC mode is fully operational, although intermediate assembly
files will not be generated.
. The precision of some math functions is lower than expected. For
instance, pow() does not provide the right lower order bits.
. In printf('%.1f') in a value with figures behind the decimal, the
lowest order character is truncated if it is a 9.
. sizeof('A') is equal to 1. The ISO C90 mandates that it should be
equal to 2. This limitation will not be fixed.
. An interpretation of the ANSI-C standard is not supported: The defect
report #16 submitted to ISO/IEC JTC1/SC22 WG14, and later implemented
into Technical Corrigendum 1 to ISO 9899:1990 (Standard ISO C90) is
not fully supported. On RCSTM8, objects can properly be declared
without knowing their size, but will not be initialized in such cases.
This means that the following translation unit is invalid on RCSTM8:

struct foo x; /* Object x declared, unknown size */
struct foo { int i; }; /* This defines the size for x */
/* x object will not be initialized */

. The vprintf()/vsprintf() functions require that printf()/sprintf()
functions are used in the project. Failing to do so will result in a
linker error 100 : UNRESOLVED EXTERNAL.
. When ANSI mode is activated, global variable initialization is less
optimal. However, it enables incomplete declarations that are
completed later in the C file.

For example:

long l; // Declaration
void main(void)
{
...
}
long l = 3; // Assignment. WORKS ONLY IN 'ANSI' MODE

Linker
------
. In ST7 mode, the atoi(), atol(), atof(), strtol(), strtoul() and
strtod() functions from the RCSTM8 C library require that the internal
putchar is linked together with a project.
This limitation is due to a library size optimization and will NOT be
fixed in the future.
So in a given project, if one of these functions is used but not
putchar, you may encounter the following linker errors:

***ERROR 100 : UNRESOLVED EXTERNAL
SYMBOL : FULLB_SCI(UNGETCHAR)
***ERROR 100 : UNRESOLVED EXTERNAL
SYMBOL : FULLB_SCI(GETCHAR)
***ERROR 100 : UNRESOLVED EXTERNAL
SYMBOL : SCIDR(GETCHAR)
***ERROR 100 : UNRESOLVED EXTERNAL
SYMBOL : SCISR(GETCHAR)

A workaround to this limitation is to add a 'dummy' call to putchar in
a harmless place in your code.
A good place for placing this dummy 'putchar(0)' call is at the bottom
of your main() code.

This limitation (in ST7 mode only) will NOT be fixed.

Library manager
---------------
. The library manager (LIBOMF.exe) can hold a virtually unlimited
number of references within a library file. However, its command-line
handles a maximum of 63 input modules through a single command.
If you need to handle more than 63 files through an ADDX, DELETEX or
EXTRACTX command, you will have to split your commands into several
smaller ones, which take less than 63 modules each.
This limitation will NOT be fixed.

Debugger
--------
. In ST7 mode, if a function argument has the same name as a global
variable, the debugger may confuse the variables.

For example:

unsigned char c = 4;

void myfct(unsigned char c1, unsigned char c2, unsigned char c)
{
... // When debugging here, the 'c' variable may be
// wrong and may show the global 'c' value instead.
}

This problem is NOT present on STM8.

==================End of File===================================================