What's New in Astrobe for Cortex M3

Version 6.4.3 2006-2018 CFB Software
Last Updated 16 Sep 2018 

E-Mail:   info@cfbsoftware.com
Website:   http://www.astrobe.com

This version is supported on Windows 10. The Installation and Uninstall executables are now digitally signed to validate authenticity and integrity.

A summary of new features introduced in Astrobe for Cortex-M3 since version 6.0:

Oberon Language Features

The latest version of the Oberon Language Report is dated May 2016. A copy of the report is included in the Astrobe distribution.

Imported Items:

The internal format of symbol files has been changed to remove some of the restrictions on imported items:

Language Rules:

The following language rules are now verified:

SYSTEM.VAL can be used to typecast REALs to INTEGERs.
INTEGERs and BYTEs are already assignment compatible with each other so ORD is not required.
SET items can be typecast to INTEGER using ORD before shifting and typecast back to SET using BITS after shifting.
Anonymous records should be declared as named types if compatibility with Project Oberon is required.


Anonymous Pointer Types:

Cortex-M3 Oberon Language Extensions and Features

The following language extensions and features target specific low-level features of the ARM Cortex-M3 microcontrollers: 

Features Added:

Features Removed:

Configuration Options

Auto Reset

A new Auto Reset checkbox appears when UART0 is selected for the Upload Type configuration option. The checkbox controls whether or not the MCU is automatically reset whenever an upload to the device via the UART is completed. The default value is On which is consistent with the behaviour of previous versions of Astrobe. Clear this checkbox if you communicate with the MCU via the Astrobe Terminal and use its Reset button to reset the MCU.

STM32 Microcontrollers

Astrobe now includes the Clock, GPIO, Main, MCU, Serial, SPI and Timers library modules and examples for the STM32L152 microcontroller. This is used on theSTM32L152 Nucleo-64 board from STMicroelectronics which has been added to our list of supported boards. If you have the Personal or Professional Edition of Astrobe you can use the source code of these library modules and examples as a starting point to target other Nucleo boards with similar Cortex-M3 microcontrollers.

Library Modules


The size of the array Reserved which is declared in LinkOptions for use with NXP IAP functions has been reduced to 32 bytes because the remainder is allocated from the stack.

An identical implementation of the LinkOptions module is now common to all Cortex-M3 MCUs to simplify the linking process. The declaration can be commented out or removed if you do not use the NXP IAP functions.

GPIO (STM32 Targets)

The GPIO module has been modified to be compatible with the Astrobe for Cortex-M4 version. The library modules Serial, SPI and ST7735 have been updated to use the new GPIO interface.

SPI (STM32 Targets)

The length parameter is no longer required on the SPI Send and Receive functions for STM32 targets. The number of bytes transferred by these functions will correspond to the size in bytes of the variable that is passed as a parameter.


The module Timers contains functions for timed delays and for measuring elapsed execution time. Several different timers can be used in the same application. It replaces the previous Timer library module which only supported a single timer. The Blinker examples demonstrate how it can be used. The steps are as follows:

  msecTimer: Timers.Timer;
Timers.Init(msecTimer, Timers.TIM0, Timers.MSecs);
Timers.Delay(msecTimer, 500);

For more details refer to the Blinker examples, and Section 3 Library Modules in the document Oberon for Cortex-M3 Microcontrollers, supplied with Astrobe. 

Custom Targets

The configuration files have an additional Custom selection that allows you to target microcontrollers (e.g. STM32 devices) other than the standard NXP targets supported with Astrobe. When Custom is selected additional configuration entries, Data Range and Code Range are enabled. These allow you to specify the Code and Data Flash and RAM address ranges to use when the Astrobe linker is used to produce the binary executable file. The following variables in the LinkOptions module can be used to access these values in your applications:

DataStart*: INTEGER;
DataEnd*: INTEGER;
CodeStart*: INTEGER;
CodeEnd*: INTEGER;
Use of these variables can be seen in the ViewMemory and Info examples.

Developers targeting non-supported MCUs will need to develop their own versions of the standard hardware-specific Astrobe library modules for more complex applications and use 3rd-party tools to upload the executables to their development boards. The latter are usually available from the designers of the MCU e.g. STMicroelectronics' ST-Link. 

Source Code Examples

Discontinued Features

Problems fixed






MLA Rd, Rm, Rm, Ra

where Rd = Rm * Rn + Ra


FOR loops with a BYTE counter
CASE statements in leaf procedures
INC, DEC, INCL, EXCL procedure calls in leaf procedures