What's New in Astrobe for Cortex M7
Version 6.4.3 © 2014-2018 CFB Software
Last Updated 29 Sep 2018
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-M7 since version 6.1:
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.
The internal format of symbol files has been changed to remove some of the restrictions on imported items:
- Alias types and structured variables may now be imported.
- String constants and anonymous variables still cannot be imported but compiler error messages are now reported if you attempt to export them.
The following language rules are now verified:
- A compiler error message bad type is reported if ORD is called with a parameter other than CHAR, BOOLEAN or SET.
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.
- Shift operations are only valid for INTEGER (including BYTE) items. Any other use will result in an error message.
SET items can be typecast to INTEGER using ORD before shifting and typecast back to SET using BITS after shifting.
- Pointers to anonymous records are identified with a compiler warning message.
Anonymous records should be declared as named types if compatibility with Project Oberon is required.
- Arrays of CHAR or BYTE whose length is not a multiple of four bytes no longer have their length rounded up. However, the number of bytes allocated to store the array is still rounded up to be a multiple of four. For example:
Byte5 = ARRAY 5 OF BYTE;
Char5 = ARRAY 5 OF CHAR;
LEN(b) = 5
LEN(c) = 5
SYSTEM.SIZE(Byte5) = 8
SYSTEM.SIZE(Char5) = 8
NOTE: Previously, array out of bounds errors may have gone unnoticed because of this rounding. Now they will result in a runtime error e.g.
Byte10 = ARRAY 10 OF BYTE;
b := 99;
Anonymous Pointer Types:
- Extensions of anonymous pointer types are no longer allowed e.g.
now results in an invalid extension error message. The record types should be declared as named types:
P0 = POINTER TO RECORD i: INTEGER END;
P1 = POINTER TO RECORD (P0) r: REAL END;
R0Desc = RECORD i: INTEGER END;
R1Desc = RECORD (R0Desc) r: REAL END;
P0 = POINTER TO R0Desc;
P1 = POINTER TO R1Desc;
The GPIO module has been modified to be compatible with the Astrobe for Cortex-M3 and M4 versions. The library module Serial and the examples have been updated to use the new GPIO interface.
The functions in the SPI library module are used to communicate with slave devices
that are connected to the microcontroller's SPI1 or SPI3 bus. This enables you to write applications which can use
a wide variety of external SPI standard parts, such as LCD displays, SD cards, 7-segment
LEDs, and digital sensors such as accelerometers, magnetometers, etc.
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 functions in the I2C library module are used to communicate with slave devices
that are connected to the microcontroller's I2C1, I2C2 or I2C3 bus. This enables
you to write applications which can use a wide variety of external I2C standard
parts, such as serial RAMs and EEPROMS, LCDs, and digital sensors such as accelerometers,
temperature and pressure gauges, compasses etc. The base I2C1/2/3 addresses have now been added to the library module MCU.
For more information refer to Section 3 Library Modules in the document
Oberon for Cortex-M7 Microcontrollers which is supplied with Astrobe.
Source Code Examples
- The source code of demo applications that use the I2C and SPI library modules have been added.
- The new example, IRQBlinker, and associated module, IRQTimer, show how Timer interrupts are generated and handled.
- The type extensions example has been updated to conform with the Oberon language feature changes above.
- The ShowTime example uses a new example module, Time, to handle string / time conversions.
Subscribe to the Cortex-M7 Source code examples of the Astrobe forum to receive notification
of the availability of new source code examples.
- Modules imported as aliases are now re-exported with their original names to prevent linker errors.
- Type tests other than for pointers and record parameters are reported as compilation errors.
- Cyclic imports are reported as build errors.
- Definition modules that exist are displayed when source code is not available e.g. when double-clicking on MAU or FPU in the Imports pane.
- Text in the Terminal output window automatically scrolls up when the text fills the window.
- The vertical scroll bar on the Terminal output window is always fully visible.
- Terminal splitter bar position initialisation is more reliable.
- References to loading during the link process have been renamed to linking.
- Correct code is now generated when a VAR parameter is used as the counter in a FOR statement. The implementation of FOR statements has been changed to correspond more closely to the equivalent WHILE statement as specified in the latest Oberon Language Report (Revision 1.10.2013 / 3.5.2016).
- Parameters are now passed correctly to procedures called from another procedure in cases where the code generated for the calling procedure exceeds 4 kB.
- Correct code is now generated for numeric / string CASE statements in the extreme case when maxCase – minCase + 1 = 256.
- The names of modules associated with resource files are limited to eight characters. The Linker reports longer resource module names as errors.
- The type tag of a RECORD VAR parameter is now passed correctly when used as a VAR parameter to another procedure.
- The linker displays an error if the LinkOptions module is included in the executable but is not the first module loaded. It should be the first module to appear in the IMPORT list of module Main.
- The invalid constant declaration CONST LEN = LEN(INTEGER) now reports an error message instead of raising an exception.
- Unexpected compiler exceptions now report the exception error message and procedure call traceback details.
- Constant values can no longer be passed to procedures that expect a VAR BYTE parameter. The compiler now reports the error message: "variable expected".
- The Prescale function in the Timers library module uses MCU.PCLK2 not MCU.PCLK1.
- Correct code is now generated for addresses of record and multi-dimensional array elements where the element offset size is > 1 KB
- Disassembler syntax for MLA instruction is now consistent with the ARM Cortex-M documentation:
MLA Rd, Rm, Rm, Ra
where Rd = Rm * Rn + Ra
In the following example, if the actual parameter x has a type which is a proper extension of T, the assignment x := y is not permitted and will now result in a runtime error:
PROCEDURE P(VAR x: T);
VAR y: T;
x := y