RKit-STM8 Version Release Notes 2017/09/20
Copyright (c) 1995-2017 IoTize S.A.S. All rights reserved.

Raisonance is an IoTize brand

Thank your for choosing Raisonance development tools for your microcontroller

These are the release notes for the Raisonance toolset called RKit-STM8, which
in conjunction with the Ride7 integrated development environment supports
application development for STMicroelectronics’ ST7 and STM8 microcontrollers.

These notes include specific information about RKit-STM8, including current
version, supported device families/sub-families, new features, fixes and known

IoTize S.A.S.
17, Av Jean Kuntzmann
F-38330 Montbonnot - France

Phone: +33(0)476418799
Fax: +33(0)476418168
Web: www.raisonance.com



SECTION 1 General information
A. Supported configurations/platforms
B. Supported microcontrollers

SECTION 2 Version history

SECTION 3 Known limitations

SECTION 4 List of supported devices

SECTION 1 General information

A. Supported configurations/platforms

Raisonance toolsets and Ride7 operate on Windows 10, Windows 8,
Windows 7 and Windows Vista (all 32 and 64-bit).
Other versions of Windows, including Windows 2000, Windows XP,
Windows XP 64-bit and Windows Server, are not supported.
Administrative rights are required in order to install this software.

Only native versions of Windows are supported. Emulators such as VMware,
QEMU, Citrix, Wine, Xen (or others) are not supported.

All software and documentation are provided in English only.

B. Supported microcontrollers

RKit-STM8 offers supports for the following STMicroelectronics families:
. STM8S general purpose microcontrollers,
. STM8L low-power microcontrollers,
. STM8A automotive-grade microcontrollers,
. ST7 general purpose microcontrollers based on the ICC programming
protocol (such as ST72C subfamily).
ST7 devices based on the ISP programming protocol are NOT supported.

A complete list of supported variants in these families is provided in
Ride7 when installed with RKIT-STM8 (including free versions).

C. Supported hardware debugger/programmers

Ride7 with RKit-STM8 drives the following hardware tools for debugging
and programming target microcontrollers:
. RLink: "standard" and "pro" versions of the in-circuit
. REva boards, ST7-Primers, EVO-Primers, Open4. These contain an RLink.

SECTION 2 Version history

RKit-STM8 (Released 2021/05/07)


. The STM8 C library now comes with the snprintf function.
. New showincludes (and opposite noshowincludes) forces the compiler to
display the included files on stdout.


. The compiler used to assign to the including file the last function in
a included file that last closing bracket wasn't followed by anything.
. Compiler engineering fixes.

RKit-STM8 (Released 2017/09/20)

New supported microcontrollers:

. STM8S001J3M3

. STM8L001J3M3
. STM8L050J3M3


. Various compiler generated code optimisations.
. Compiler supports pragma once.
. C11 _Static_assert is implemented.
. Correctly display remaining days of temporary licenses.


. struct S { struct S *b[31]; } *s; s = s->b[0]; used to generate error
message 'Operand is not an l value' while it's a correct expression.
. Improper stack space optimization if single local variable is a long.
. Improper optimization of signed char right shifts with a MUL.

RKit-STM8 (Released 2016/09/29)


. Compiler supports __asm__ statements made of assembly instructions.
. The __attribute__ keyword can be used to speciy special attributes to
C functions (noinline, weak, ...)
. The assembler provides the weak directive.
. Linker supports weak and strong (default) symbols.
. Compiler warning for too large enum values wasn't enough accurate.
. __FLASH__last_used_address__ symbol pointing on last byte occupied by
code on Flash.
. Compiler supports the predefined macro __BASE_FILE__
. New compiler directive nopathinmacros to remove the file path in the
__FILE__ and __BASE_FILE__ predefined macros.
. Compiler supports #warning preprocessor directive.


. Compiler used to improperly generate an error message on unions only
made of bit fields smaller than 8 bits.
. Compiler engineering fixes.
. Simulator used to improperly set the return address to next section
when RET is at 0xFFFF.
. Fixed crash when programming one byte at the EEPROM start address.

RKit-STM8 (Released 2015/09/24)


. Circle_STM8_Mgr.exe crash fixed.
. Corrected compiler warning about enum out of bounds.
. Don't use constant propagation on volatile variables.
. Don't allow absolute functions to be inlined.
. Compiler didn't correctly handle warning C265.
. Inlining of large functions with local jumps greater than 128 bytes
used to jump out of code!
. The compiler SRC mode didn't correctly handle initialized absolute
variable in page0.
. Various compiler optimization regressions fixed.
. Disassembly of CPW X,([shortptr.w],Y) wasn't correct!
. JRxx STM8 instructions with pre-code weren't properly disassembled.
. Cleaner SWIM error recovery and reporting.
. Support of [ptr.e] as CALLF/JPF/LDF operand in the assembler.
. The assembler didn't recognize [longptr.e] and ([longptr.e],Y) (LDF).


. Simulator is faster thanks to compiler switch from Borland C++ to
Visual C++.
. Added Post Link Tool.
. Updated compiler documentation.

RKit-STM8 (Released 2015/04/02)


. Linker used to provide a corrupted build when using an user start-up
and only when 2 externals weren't resolved (no errors).
. Linker didn't support more than one regular expression in segment
. OMF2ELF typedef support.
. Compiler engineering fixes.


. Added the EEPROM directive to the linker to be able to relocate
EEPROM segments.
. Support of the LL suffix for long long constants, but values are
truncated to 32 bits.
. Compiler emits warning when the C11 _Noreturn function specifier isn't
properly used.
. Compiler saves label information for debugger.

RKit-STM8 (Released 2014/10/10)


. Linker switch for case sensitivity was lost in the ST7 case.
. Possible crash of debugger when hovering mouse over comments.
. Last byte of flash wasn't programmed if program size was a multiple of
512 (0x200) plus one.
. The sue_opt option didn't support pointers to struct/union.
. Various compiler engineering fixes.
. Don't use temporary files with fixed names to avoid issues with
parallel compilation.


. Warning when assigning a 'short' enum (1 byte) with a value larger
than 0xFF.
. Warning message when declaring enum values larger than 0xFFFF.

RKit-STM8 (Released 2013/11/20)

New supported microcontrollers:

. STM8AL3136xxSSS
. STM8AL3138xxSSS
. STM8AL3146
. STM8AL3148
. STM8AL3166
. STM8AL3168

. STM8AL3L46
. STM8AL3L48
. STM8AL3L66
. STM8AL3L68


. Compiler engineering fixes.
. I0 and I1 flags in Registers view.
. Instant refresh of CC and flags in Registers view.


. Product Counter feature added in RFlasher: Allows to write a unique
number in each sample during production programming.
. Makefile generation and build through makefile support.

RKit-STM8 (Released 2013/04/23)


. Removed wrong "Possibly incorrect assignment" warning in:
if( ( ptr1 = ptr2 ) != 0 )
. Reset vector in the provided STM8 start-up sample wasn't correct.
. STM8 gets() didn't set the null character at the end of string.
. ST7 gets() used to increment the buffer's pointer twice!
. gets() supports \r as end-of-line character.
. C preprocessor accepts macro empty arguments.
. Assembler creates missing folder when generating listing file.
. CRC ranges over section boundaries weren't properly handled.
. Linker wasn't able to relocate STM8 page0 segments below 0x40.
. Gaps after reserved spaces weren't filled by the linker!
. Linker used to increase reserved code blocks by 8 bytes.
. EEPROM variables weren't properly displayed in the watch window.
. The Memory View didn't display EEPROM variable names.
. Bit variables weren't properly handled under hardware debug.
. Fixed failure to program flash from Ride debug options window if Debug
Output directory wasn't default. The user can tell now which hex file
to program.
. Compiler engineering fixes.


. Support of C99 preprocessing operator _Pragma()
. Added C99 isblank character classification function in ctype.h
. Added C11 char* gets_s(char*,int) a safer gets with size limitation.
. ?getchar can now be redefined by the user.
. scanf and sscanf are now available for the STM8.

RKit-STM8 (Released 2012/12/03)


. When using embedded CRC the gap after the ?PR?STATINIT segment weren't
saved in the generated file
. Possible crash of compiler when building code for absolute functions.
. va_arg now properly handles char.
. C library lstrlen function wasn't correctly implemented for the STM8.
. Don't truncate STM8 far pointers (24 bits) to 16 bits when passing
parameters for '...'
. Switch jump tables weren't compatible with code above 0xFFFF.
. Linker didn't properly set size information for the CRC table records.
. When a linker relocation regular expression used to match an absolute
function, this one was wrongly relocated and process was stopped
leaving some functions matching the expression not relocated.
. Non static structures of 4 or less bytes and containing references
weren't properly initialized.
. Linker FCODE relocation directive wasn't limited to far code segments.
. References to bits 16-24 of a label weren't correctly inlined.
. Fixed compiler crash when dealing with call of myfct(char*,char,char);
. OMF2ELF used to produce corrupted ELF files in case of undefined
imbricated structures.


. Compiler generated code optimisations.
. Compiler supports C99 _Bool type. stdbool.h is also provided.
. Compiler recognizes C99 keyword restrict, but it doesn't have any
action on generated code.
. Compiler supports C11 _Noreturn function specifier. stdnoreturn.h is
also provided.
. Added an error when trying to initialize a bitfield with something
else than a constant.
. _break_() intrinsic is now available (STM8 only).
. Improved error message when testing with == or != the returned value
of a void routine!
. Support of C99 static array indices in function parameters.
. C99 variadic macros are supported.
. stdarg.h implements C99 va_copy

RKit-STM8 (Released 2012/09/18)


. DMA CxCR were missing.
. DMA CxSPR TCIF bit wasn't correctly described.
. Corrected some STM8L101xx peripherals.
. ST7_pgm reports empty hex files.
. ST7_pgm allows programming readonly hex files.
. Compiler engineering fixes.


. New library set relocatable elsewhere than section 0.

RKit-STM8 (Released 2012/07/17)

New supported microcontrollers:

. STM8L051F3
. STM8L052C6
. STM8L052R8
. STM8TL52F4/G4


. dword wasn't recognized by the compiler as an assembler keyword.
. In some cases, a function returning a struct used to overwrite local
variables in stack and/or stacked parameters.
. Compiler used to crash when a binary logical operator operand used to
be a void function.
. An asm statement in a C file could make the compiler crash.
. const unsigned char foo = "foo"[1]; is now correctly handled.
. OMF2HEX utility didn't properly manage code over 64KB when producing
binary (.BIN) files.
. Pointer initialization with multidimensional array item address wasn't


. The BREAK instruction is now disassembled.
. Compiler listing symbol table cosmetic updates.
. Add option Q in STM8_pgm for disabling connection retry in order to
avoid a popup.

RKit-STM8 (Released 2012/03/23)


. The OMF2ELF tool generates debug information compatible with latest
. Compiler engineering fixes.


. The "$(RkitInc)\STM8" directory is now in the list of default include
. Added all STM8 header files available from STMicroelectronics. The
STM8S105K.h and STM8S105C_S.h were noticeably missing.
. Some floating-point functions have been optimized.

RKit-STM8 (Released 2011/11/23)

New supported microcontrollers:

. STM8S003F3
. STM8S003K3
. STM8S005C6
. STM8S005K6
. STM8S007C8
. STM8TL53C4
. STM8TL53G4


. Compiler engineering fixes.


. Implement USB dongle serialization method.
. A full list of supported devices is now available at the end of these
release notes.

RKit-STM8 (Released 2011/09/08)


. The Linker was emitting a warning when an option byte was located at
address 0x487F, although the whole range 0x4800-0x487F should be
available for option bytes.
. The linker didn't properly support filled gaps larger than 64KB.
. Gaps weren't correctly filled by the linker.
. Correct some (un)registration problems on laptop computers.
. Compiler engineering fixes.

RKit-STM8 (Released 2011/07/20)


. Some intrinsic functions such as _nop_() are now kept when inlined.
. Handling of bit-fields in an absolute structure is now correct.
. The 16x16->32 multiplication does not touch the interrupt flags
. The OMF2ELF tool is now able to handle input files with more than
65536 declared types.

RKit-STM8 (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


. 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.


. 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 (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)


. 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
. Compiler provides an error message when an absolute variable is
declared above 0xFFFF but isn't far code.


. 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 (Released 2010/06/28)

New supported platform:

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


. 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).


. 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 (Released 2010/04/27)


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

For example:

struct s
char a;
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
. 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
. 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
. 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.


. 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
. 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: (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


. 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
. 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.


. 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
. 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: (Released 2009/08/27)

New supported microcontrollers:

. STM8S903K3
. STM8L151G4
. STM8L151G6


. 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.


. 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 ( only.


. 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: (Released 2009/07/24)


. 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.


. 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: (Released 2009/06/12)


. 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.


. 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
. 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: (Released 2009/05/20)


. The compiler now supports a fast 16-bit x 16-bit -> 32 bit
. 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.


. 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
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
. Logical tests on bitfields wasn't properly handled.

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

New supported microcontrollers:

. STM8L101G2
. STM8L101F3
. STM8L101G3
. STM8L101K3


. 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
This means that the transcendental operations +, -, * and / may
report a result which is slightly different than the standard float
- 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
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
. 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


. 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 <ridedir>\Examples\STM8 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
- 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
- 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
. 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

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

. 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


. Now the STM8/ST7 Linker is always case-sensitive when called from
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
. 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

Supported ST7 subfamilies
. ST7 devices based on the ISP protocol (such as ST72C subfamily) are
NOT supported by RKit-STM8. Only ST7 devices based on the ICC protocol
are supported.
Please contact the support if you need to work with an ISP-based ST7.

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

. 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.
. The sprintf() function requires that the putchar() function is present
in the project. Failing to have it will result in a
linker error 100 : UNRESOLVED EXTERNAL.
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.
. 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

. 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:


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.

. 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.

SECTION 4 List of supported devices

ST7 devices

ST7LITE02 ST72260G1 ST72324BJ2 ST72521M9
ST7LITE05 ST72262G1 ST72324BJ4 ST72521R6
ST7LITE09 ST72262G2 ST72324BJ6 ST72521R9
ST7LITE10 ST72264G1 ST72324BK2 ST72561AR4
ST7LITE10b ST72264G2 ST72324BK4 ST72561AR6
ST7LITE15 ST72321J7 ST72324BK6 ST72561AR7
ST7LITE15b ST72321J9 ST72325AR9 ST72561AR9
ST7LITE19 ST72321R6 ST72325J4 ST72561J4
ST7LITE19b ST72321R9 ST72325J6 ST72561J6
ST7LITE20 ST72321BAR6 ST72325J7 ST72561J7
ST7LITE25 ST72321BAR7 ST72325J9 ST72561J9
ST7LITE29 ST72321BAR9 ST72325K4 ST72561K4
ST7LITE30 ST72321BJ6 ST72325K6 ST72561K6
ST7LITE35 ST72321BJ7 ST72325R9 ST72561K7
ST7LITE39 ST72321BJ9 ST72340K2 ST72561K9
ST7LITE49 ST72321BK6 ST72340K4 ST72561R9
ST7LITE49M ST72321BR6 ST72340S2 ST7260E1
ST7LITES2 ST72321BR7 ST72340S4 ST7260E2
ST7LITES5 ST72321BR9 ST72344K2 ST7260K1
ST7LITEU02 ST72324J2 ST72344K4 ST7260K2
ST7LITEU05 ST72324J4 ST72344S2 ST7263BE2
ST7LITEU09 ST72324J6 ST72344S4 ST7263BE6
ST7LITEUS2 ST72324K2 ST72345C4 ST7263BH2
ST7LITEUS5 ST72324K4 ST72361AR6 ST7263BH6
ST7FOXA0 ST72324K6 ST72361AR7 ST7263BK1
ST7FOXF1 ST72361AR9 ST7263BK2
ST7FOXK1 ST72361J6 ST7263BK4
ST7FOXK2 ST72361J7 ST7263BK6

STM8 devices

STM8AF612 STM8L051F3 STM8L151F2 STM8S003F3 STM8S207K6
STM8AF614 STM8L052C6 STM8L151G2 STM8S003K3 STM8S207S6
STM8AF616 STM8L052R8 STM8L151K2 STM8S103F2 STM8S207C6
STM8AF617 STM8TL52F4 STM8L151C2 STM8S103F3 STM8S207R6
STM8AF618 STM8TL52G4 STM8L151F3 STM8S103K3 STM8S207K8
STM8AF619 STM8L151G3 STM8S903K3 STM8S207S8
STM8AF61A STM8L151K3 STM8S005K6 STM8S207C8
STM8AF622 STM8L151C3 STM8S005C6 STM8S207R8
STM8AF624 STM8L151G4 STM8S105K4 STM8S207M8
STM8AF516 STM8L151K4 STM8S105S4 STM8S207SB
STM8AF517 STM8L151C4 STM8S105C4 STM8S207CB
STM8AF518 STM8L151G6 STM8S105K6 STM8S207RB
STM8AF519 STM8L101F2 STM8L151K6 STM8S105S6 STM8S207MB
STM8AF51A STM8L101G2 STM8L151C6 STM8S105C6 STM8S208S6
STM8AF526 STM8L101F3 STM8L151R6 STM8S007C8 STM8S208C6
STM8AF528 STM8L101G3 STM8L151C8 STM8S208R6
STM8AF52A STM8L101K3 STM8L151R8 STM8S208S8
STM8AF626 STM8L151M8 STM8S208C8
STM8AF628 STM8L152K4 STM8S208R8

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