What's New in Astrobe for Cortex M4

Version 6.4.3 2014-2018 CFB Software
Last Updated 22 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-M4 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-M4 Oberon Language Extensions and Features

The following language extensions and features target specific low-level features of the ARM Cortex-M4 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 Modules and Examples

The following Cortex-M4 microcontrollers from STMicroelectronics are now supported:

New library modules and examples that target these devices are included:

The corresponding Nucleo development boards from STMicroelectronics which use these microcontrollers have been added to our list of supported boards.

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-M4 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 new General Purpose Input/Output (GPIO) module contains functions to configure the hardware characteristics, and control the behaviour, of each of the GPIO pins of an STM32 microcontroller. Refer to the Blinker examples to see how it is used.


The length parameter on SPI.Send and SPI.Receive has been removed. It is no longer required now that the length of the BYTE array is not rounded.


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

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