Niezawodne programowanie

Przygotowanie RTS

STM32F4

Przyjechała nowa zabawka STM32F469-Discovery i trzeba zabrać się za instalację kompilatora Ady oraz przygotowanie RTS.

Kompilator można pobrać ze strony libre.adacore.com.

Na stronie blog.adacore.com można znaleźć jak przygotować RTS dla tej platformy.

LiquidCrystal

lcd-shield

github repository

Disco polo

disco polo_bb


Archiwum: disco_polo.tar.gz

Arduinowe Hello World

Odpowiednikiem programu Hello World na Arduino jest program zapalający i gaszący diodę w odstępach jednosekundowych.

W pliku blink.adb umieszczamy następujący program:

with AVR.MCU;
with AVR.Real_Time.Delays;
use AVR;

procedure
Blink is
begin
  MCU.DDRB_Bits(5) := DD_Output;
  
loop
    MCU.PINB_Bits(5) := True;
    
delay 1.0;
  
end loop;
end Blink;

Ustawia on dla piątego pinu w porcie PINB tryb wyjściowy. Następnie w nieskończonej pętli zmienia stan tego pinu na przeciwny odczekując po każdej zmianie jedną sekundę.

W pliku blink.gpr umieszczamy opis projektu:

project Blink extends "avr_app" is
  
for Main use ("blink.adb");
end Blink;

Jak widać nasz projekt jest rozszerzeniem projektu avr_app.gpr definiującego wszystkie potrzebne parametry kompilacji (plik avr_app.gpr znajduje się w katalogu /opt/avr-ada/avr-ada-111/avr/lib/gnat).

Projekt blink.gpr kompilujemy na Arduino UNO poleceniem:

avr-gnatmake -p -XBOARD=arduino_uno -Pblink.gpr

Następnie zamieniamy plik wykonywalny ELF na postać szesnastkową poleceniem:

avr-objcopy -O ihex -R .eeprom blink.elf blink.hex

Na koniec wysyłamy program do Arduino podłączonego przez USB (na moim komputerze jest to port /dev/ttyACM0):

ardude -V -F -c arduino -p m328p -P /dev/ttyACM0 -b 115200 -U flash:w:blink.hex

Jeśli jesteśmy zainteresowani analizą przekładu programu na assembler mikrokontrolera ATmega328p, to zrzucamy go do pliku blink.dump poleceniem:

avr-objdump -d -S blink.elf > blink.dump

W wielu przykładach jakie można znaleźć w sieci, miganie diody uzyskuje się przez naprzemienne wpisywanie wartości 1 i 0 do odpowiedniego bitu portu B. W tym celu należy w pliku blink.adb zmienić nieskończoną pętlę na następującą:

  loop
    MCU.PORTB_Bits(5) := True;
    
delay 1.0;
    MCU.PORTB_Bits(5) := False;
    
delay 1.0;
  
end loop;

Programowanie Arduino w języku Ada

Zabieram się za programowanie Arduino w języku Ada. Każdemu, kto chciałby się tym bawić polecam projekt AVR-Ada i blog Tero Koskinena Tero's Arduino Blog.

Programy będę pisał na netbooku pracującym pod systemem Ubuntu 14.04 więc bardzo przydał mi się opis instalacji AVR-Ada w wersji 1.2.2, który można znaleźć we wpisie AVR-Ada package for Ubuntu 14.04.