Skip to main content

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 this blog is AdaCore's contest "Make with Ada"


That's it, for now, and don't forget to check Make with Ada - Getting started

Comments

Popular posts from this blog

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 .

Ada Web Server - LED on/off control on Raspberry Pi

Inspired by all those Arduino / ESP8266 / etc. tutorials on controlling a LED from a web page... Requirements: - GNU Ada compiler (sudo apt-get install gnat) - Ada Web Server (sudo apt-get install libaws-bin libaws-doc libaws3.3.2-dev) - Munts Linux Simple I/O Library (see my post here about this, User Manual available here ) - LED (with a resistor) on GPIO17 I used as a starting point the "web-block" sample from AWS, changing a couple of things. For dealing with Raspberry Pi's GPIOs I made a simple package, using libsimpleio, of course ;) I also changed the directory structure, and added to the .gpr project all the libsimpleio related stuff. The entire project is on github here .

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