cortex-gnat-rts
cortex-gnat-rts copied to clipboard
This project contains various GNAT Ada Run Time Systems (RTSs) targeted at Cortex boards: so far, the Arduino Due, the STM32F4-series evaluation boards from STMicroelectronics, and the BBC micro:bit (...
... for instance, as ``` temeraire:test-stm32f4 simon$ gprbuild -P testbed -c -u -f iteration.adb Compile [Ada] iteration.adb iteration.adb:52:07: warning: in instantiation at a-cobove.adb:263 [-gnatwj] iteration.adb:52:07: warning: array aggregate using ()...
You can’t say, for example, ``` Fixed_Delta : constant := 0.001; type Fixed is delta Fixed_Delta range -100.0 .. +100.0 with Small => Fixed_Delta; F : Fixed; ``` and then...
Since the testbeds (excluding the Arduino Due) rely on the Ada Drivers Library, there should be a mention of this in the installation instructions.
[This paper](http://www.nadler.com/embedded/newlibAndFreeRTOS.html) goes into considerable detail about dealing with the fact that some newlib functions (e.g. `printf` family) use an internal `malloc()` which is not reentrant. Reentrancy can be supported...
In `freertos_bindings.c`, `_gnat_yield_from_isr()` calls `portEND_SWITCHING_ISR()`, but there’s a suggestion on the [FreeRTOS forums](https://forums.freertos.org/t/tasks-waiting-on-queues-get-stuck/10964/12) that `portYIELD_FROM_ISR()` would be appropriate.
(migrated from [Sourceforge](https://sourceforge.net/p/cortex-gnat-rts/tickets/4/)). `Ada.Real_Time.Clock` only produces valid values within the first 50 days after system startup. (Or maybe only 25 days? since the clock is signed and starts at 0).
The underlying FreeRTOS memory allocator `assert`s that it’s not in an interrupt context. This means you can’t `new` inside a protected handler.
In `test-microbit/circle.hex`, each button is intended to act only on a push, not on a release. A toggles the speed, B toggles the direction. Building with the aarch64-hosted GCC 13.1.0...
AdaCore’s "Intro to Embedded Systems" says, in the [section on Handling Interrupts](https://learn.adacore.com/courses/intro-to-embedded-sys-prog/chapters/handling_interrupts.html), > The standard mutually exclusive access provided to the execution of protected procedures and entries is enforced whether...
For the risc64-elf target, `make install INSTALL_LOCALLY=no` should install to `$prefix/riscv64-elf/lib/gnat` but actually installs to `$prefix/riscv/lib/gnat`.