Skip to main content

Posts

Showing posts from October, 2018

Tasking in Ada on a Raspberry Pi

Ada provides an extensive set of capabilities for creating programs with concurrent code modules (tasks), for real-time programming, similar to Java threads. Those tasks are executed concurrently with the rest of the program, so I thought the best way to test them on a Raspberry Pi is by blinking two LEDs at different time intervals ;) Accessing the GPIO pins on a Raspberry Pi from an Ada program requires a library, I'm using  Linux Simple I/O Library by    Philip Munts. Assuming we have two LEDs (and corresponding resistors) on GPIO17 and 18, here's the source code for blinking them at different intervals, using tasks. -- -- GPIO LED Test using libsimpleio -- task version -- WITH Ada.Text_IO; USE Ada.Text_IO; WITH GPIO.libsimpleio; PROCEDURE blinky_tasks IS LED_red : GPIO.Pin := GPIO.libsimpleio.Create(0, 17, GPIO.Output); LED_green : GPIO.Pin := GPIO.libsimpleio.Create(0, 18, GPIO.Output); Ch : Character; Available : Boolean; task First_task; task

Raspberry Pi, Ada, and Linux Simple I/O Library

Programming in Ada on a Raspberry Pi is simple enough, Raspbian has a fairly recent version of  GNAT, but if you don't use Raspbian, you can always download GNAT directly from  AdaCore . sudo apt-get install gnat A simple hello test shows that everything works as expected. Tasking in Ada will require a couple more tests, but it should work since GNAT seems to support the Ravenscar profile ... Accessing the GPIO pins requires a library, and thanks to Philip Munts we have one :) Read the readme , find the user manual and install the Linux Simple I/O Library. The library also contains a couple of programs, I just modified one and got a simple blinky. I used the makefile from the library, unmodified, to compile this example. Assume a LED (and a small resistor) on GPIO17 (that's Wiring Pi pin 0, or pin 11 on the board). Next step is to use tasks to blink a couple of LEDs in 'real time', and to check Philip Munt's  MuntsOS Embedded Linux Framework .

First attempt at using Ada to program the STM32F4 Discovery board

Here's my first attempt at pushing the user button to blink the red LED on a STM32F4 Discovery board, using AdaCore's GNAT Community Edition. What you need: STM32F4 Discovery board GNAT Community Edition  (download and install both the compiler toolchain and the arm-elf) Ada Drivers Library with examples It's been a while since I had my STM32 boards installed on my computer, so you may (or may not) need to install a driver for the ST-LINK/V2 programmer... 1. Connect the board, you should have a STM32 STLink device. 2. Start GPS (GNAP Programming Studio). 3. Open one of the examples from the Drivers library / examples / STM32F4_DISCO. 4. Edit main.adb and replace all text with the following source code. ---------------------------------------------------------------- -- -- -- Testing user button and red LED on STM32F4 Discovery board -- --

Welcome to Ada for Embedded Systems!

Instead of starting with a long rationale for using Ada to program embedded systems, I'm just going to say this: "Why not"? After all, Ada was  designed from the start as a safe and secure computer programming language, initially developed for the United States Department of Defense (DoD) to be used in embedded systems such as aircrafts, ships, radars, or command and control systems that operate in real time, as events are occuring. The following links will explain all of this (much better than I could ever do...) AdaCore's video: Developing Embedded Systems in Ada Jack Ganssle's video: Ada - Even on a Microcontroller! This blog will address the topic of using Ada on the following platforms:  BBC Micro:Bit  and  STM32F4 Discovery . Edit: Although not exactly an embedded platform, there will also be examples about using AdaCore's GNAT and the Linux Simple I/O Library from Philip Munts on  Raspberry Pi  boards. Another thing that got me into starting