Astrobe for Cortex-M3 Changelog

What's new in Astrobe for Cortex-M3 4.5.0

May 26, 2014
  • The compiler checks that the CASE selector and the CASE labels are of type INTEGER, BYTE, single-character string or CHAR. It now also checks that every CASE label is type-compatible with the selector and reports error messages for those that are not.
  • The general "bad case label" message resulting from errors in CASE statements has been replaced with more specific messages.
  • Standard procedures with variable numbers of parameters report an error if too many parameters are specified.
  • Fixed problems associated with the use of CONST strings in relational expressions.
  • Error message if the source/target parameter to SYSTEM.PUT and SYSTEM.GET is not byte- or word-sized.
  • Warning message if the source parameter to SYSTEM.PUT is a byte-sized constant.

New in Astrobe for Cortex-M3 4.0.0 (Nov 29, 2011)

  • Data Types:
  • The range of values for INTEGER, REAL and LONGREAL are not prescribed.
  • LONGREAL and REAL may be identical.
  • In Astrobe the values are
  • INTEGER -2147483648 .. +2147483647
  • REAL -3.40282E+38 .. +3.40282E+38
  • LONGREAL -3.40282D+38 .. +3.40282D+38
  • Characters and Strings:
  • There is no longer any distinction between a character constant and a string constant containing a single character. Both are enclosed in double-quotes. Examples of character constants are:
  • "x"
  • 0X (* Null string terminator *)
  • 0AX (* Line-feed *)
  • 22X (* Double-quotes *)
  • Examples of string constants are:
  • "" (* Null string *)
  • "x"
  • "Oberon"
  • Single-character strings can be assigned to variables of type CHAR.
  • Single-quotes cannot be used as an alternative for double-quotes for string constants.
  • Strings can be assigned to any array of characters, provided the number of characters in the string is not greater than that of the array. If it is less, a null character is appended. (i.e. a null character is no longer always present).
  • The character set is a standard character set but is not prescribed. The standard Latin-1 character set is used in the Astrobe implementation of Oberon.
  • Array Assignments:
  • An array can only be assigned to another array in a single assignment statement if both are the same length.
  • CASE statements
  • CASE labels can be single-character strings. The selector is a CHAR expression.
  • CASE ch OF
  • "0".."9": digit := TRUE |
  • "A".."Z": capital := TRUE |
  • ...
  • ...
  • Standard Functions:
  • COPY is used to copy a string or an array of characters to an array of characters.
  • It is equivalent to (but more efficient than):
  • PROCEDURE COPY(src: ARRAY OF CHAR; VAR dst: ARRAY OF CHAR);
  • VAR
  • i: INTEGER;
  • BEGIN
  • i := 0;
  • WHILE (i < LEN(src)) & (src[i] # 0X) DO
  • ASSERT(i < LEN(dst));
  • dst[i] := src[i];
  • INC(i)
  • END;
  • IF i < LEN(dst) THEN dst[i] := 0X END
  • END Copy;
  • INCL is used to include a constant element in a SET.
  • INCL(s, n) is equivalent to, but more efficient than, s := s + {n}
  • EXCL is used to exclude a constant element from a SET.
  • EXCL(s, n) is equivalent to, but more efficient than, s := s - {n}
  • SHORT converts LONGREAL to REAL.
  • LONG converts REAL to LONGREAL.
  • FLOOR can be used with LONGREALs as well as REALs.
  • LSR (Logical Shift Right) has been replaced by ROR (Rotate Right). LSR is implemented in Astrobe as a non-standard extension to the language.
  • ORD can be used with a SET as a parameter. ORD(set) is equivalent to SYSTEM.VAL(INTEGER, set).
  • ABS is now only defined with numeric parameters. It can still be used in Astrobe with a SET as a parameter (to return the number of elements in the SET) as a non-standard extension to the language.
  • Procedure Parameters:
  • CONST is no longer used as a keyword for read-only procedure parameters. Records and arrays may now be passed as value parameters and are then automatically treated as read-only items.
  • Extensions:
  • The following additional features included in the Astrobe implementation of Oberon are not standard Oberon features:
  • STRLEN is a built-in function which counts the number of characters (not including any terminating 0X character) in a string or array of characters.
  • It is equivalent to (but more efficient than):
  • PROCEDURE STRLEN(src: ARRAY OF CHAR): INTEGER;
  • VAR
  • i: INTEGER;
  • BEGIN
  • i := 0;
  • WHILE (i < LEN(src)) & (src[i] # 0X) DO INC(i) END;
  • RETURN i
  • END STRLEN;
  • SYSTEM.NULL(x) is a built-in function which returns TRUE if x is negative or positive INTEGER, REAL or LONGREAL zero.
  • Problems fixed:
  • The error Cannot write to a closed TextWriter resulted when closing Astrobe after cancelling earlier attempts to close Astrobe.
  • BOOLEAN expressions used in RETURN statements in leaf procedures generated incorrect code e.g.
  • PROCEDURE* IsDigit(ch: CHAR): BOOLEAN;
  • RETURN ("0"

New in Astrobe for Cortex-M3 3.0 (Apr 28, 2010)

  • Product name change: formerly known as Armaide

New in Astrobe for Cortex-M3 2.4.0 (Mar 17, 2010)

  • Out explicitly imports Serial and the Main library module and its imports are linked before the main module of the application. This ensures that the Out module is correctly initialised with a PutCh procedure before it is used by the initialisation section of any other module.

New in Astrobe for Cortex-M3 2.2 (Oct 12, 2009)

  • Problems fixed:
  • Corrected definitions of FIO1* in LPC2378.mod
  • Library function Math.Cos(x) now returns correct results for negative values of x
  • The compiler reports an error if a local procedure is assigned to a global procedure variable.
  • The compiler reports an error if the name of a formal parameter is missing e.g:
  • PROCEDURE P(CONST ARRAY OF INTEGER);
  • Fixed an error which caused the compiler to crash if an incomplete type declaration was used:
  • VAR
  • x: ARRAY;
  • PROCEDURE P(x: ARRAY);
  • Fixed a compiler error register stack not empty which occurred when compiling LEN(buf.data) where buf is a global record of type Buffer:
  • Buffer = RECORD
  • data: ARRAY 64 OF INTEGER
  • END;
  • Fixed an error which caused the compiler to crash when compiling some illegal sets e.g.
  • set := {0..254};

New in Astrobe for Cortex-M3 2.1 (Jul 17, 2009)

  • Oberon-07 Language Extensions:
  • Local Dynamic Arrays:
  • Local dynamic arrays of any type can be declared within a procedure:
  • VAR
  • weights: ARRAY OF REAL;
  • alarms: ARRAY OF Event;
  • The number of elements (i.e. length) of the array is determined at runtime:
  • NEW(weights, count);
  • Interrupt Handlers:
  • An Oberon-07 interrupt handler is a normal procedure which has an offset specification in square brackets instead of a list of parameters:
  • PROCEDURE TimerHandler[4];
  • For more information refer to the Oberon-07 Language Extensions section of the Armaide document Oberon for LPC2000 Microcontrollers.
  • Resources:
  • Typically on a PC system, large quantities of constant data (e.g. the definition of a font, a bitmap image etc.) would be stored in files to be read at runtime. A file system is often not available on the smaller embedded systems targeted by Armaide, so a different approach is used:
  • After the Armaide linker has linked all of the object files .arm into the executable program, it looks for the corresponding 'resource' data files named .res file.
  • The resource files are appended to the executable to be stored in Flash ROM when the program is uploaded.
  • New library ResData contains functions to access the constant resource data from the Oberon-07 program.
  • For more information refer to the Resource Data section of the Armaide document Oberon for LPC2000 Microcontrollers.
  • Libraries:
  • New module ResData contains functions to access the constant resource data (see above) from the Oberon-07 program.
  • LPC.Mod includes more of the LPC2000 family common constant definitions e.g. Timer1.
  • Module Traps now includes default interrupt handlers for the internal interrupts Undefined Instruction, Data Abort, and Prefetch Abort. These are installed at startup time when Main.Init calls Traps.Init, the only function exported from Traps. The source code of Traps is included in the Standard and Professional Editions of Armaide to allow user-customisation of the trap handling process.
  • Linker:
  • The crystal frequencies 12Mhz and 20Mhz are now supported for the LPC2378 family of processors.
  • The link map includes details of the linked resources, if any.
  • Examples:
  • The TestTraps example demonstrates a single runtime error - #6: String too long or destination string too short.
  • An example of a timer-driven interrupt handler can be built from the source code files IRQTimer.mod and IRQBlinker.mod
  • Problems fixed:
  • Library function Math.Cos(x) now returns correct results for negative values of x
  • The compiler reports an error if a local procedure is assigned to a global procedure variable.
  • The compiler reports an error if the name of a formal parameter is missing e.g:
  • PROCEDURE P(CONST ARRAY OF INTEGER);
  • Fixed an error which caused the compiler to crash if an incomplete type declaration was used:
  • VAR
  • x: ARRAY;
  • PROCEDURE P(x: ARRAY);

New in Astrobe for Cortex-M3 2.0.1 (May 15, 2009)

  • Additional LPC2000 processors supported including LPC2103 and LPC2378 families.

New in Astrobe for Cortex-M3 1.1 (Mar 5, 2009)

  • Additional library modules, Oberon-07 Quick Reference help, command-line tools.