Skip to content

Release 2017-07-26

Compare
Choose a tag to compare
@simonjwright simonjwright released this 26 Jul 20:39
· 188 commits to master since this release

This release is motivated by a wish to support the Crazyflie, a.k.a. Certyflie code from AdaCore in the stm32f4 RTS. However, most of the changes apply to the other RTSs as well.

The RTSs build as-is with FSF GCC 7.1.0 (for macOS users, a compiler is available at Sourceforge).

At FSF GCC 7, the interface to create a task changed (Create takes an extra parameter, Secondary_Stack_Size). Alternate versions are provided for use with FSF GCC 6 (macOS compiler also at Sourceforge):

common/environment_task.adb-gcc6
common/s-tarest.ads-gcc6
common/s-tarest.adb-gcc6

To use them, copy over the equivalent .ad? file.

These patches are also needed to build the RTS with GNAT GPL 2016.

GNAT GPL 2017 does not require these patches: however, attempting to build the RTS results in

[Ada]          a-stream.ads
a-stream.ads:67:09: expected type "Standard.Boolean"
a-stream.ads:67:09: found type "Ada.Tags.Size_Ptr"
a-stream.ads:67:09: expected type "Ada.Tags.Select_Specific_Data_Ptr"
a-stream.ads:67:09: found a composite type
a-stream.ads:67:09: no value supplied for component "Tags_Table"
gprbuild: *** compilation phase failed

With GNAT GPL 2016, the cortex-gnat-rts test programs work properly. The Certyflie branch also works, after removing the Create_Missing_Dirs attributes, new in GPRBuild GPL 2017, from all the GPRs.

Common

The base is FreeRTOS 9.0.0.

Added Ada.Real_Time.Timing_Events (with limitations: there's no finalization, so they should only be declared at library level).

SPARK annotations in Ada.Real_Time are copied from those in GCC 7.1.0.

Added Interfaces.C.Extensions.

type'Image() and object'Img are supported.

The default stack size is 4096 (the minimum size is still 768).

stm32f4

Stack overflow checking is enabled in FreeRTOS.

Added Ada.Numerics.* (excluding random number generation).

In Ada.Interrupts.Names, interrupts are still named *_IRQ, but renamings to *_Interrupt are included.

The main program can have pragma (or aspect) Priority.

Executables can be built to load at an offset from the STM32F4's default (this is to support the Crazyflie's over-the-air bootloader).