---
# System prepended metadata

title: 'Informations STM32, Ada et Alire'
tags: [EVOLUTEK]

---

---
title: "Tuto et information générale sur ADA et "
date: "23-05-2024"
link: "https://hackmd.io/1jf_YPgfTSSNrXjjSgndYw"
tags: Evolutek
---

## Softwares

**Alire** : Package manager similaire à Crate ou Opam qui permet d'installer automatiquement les dépendance d'un projet et de le compiler (il utilise en backend GPRBuild pour le build du projet)

**GPRBuild** : Outils permetant de lire des fichier .gpr et d'en déduire comment build un program (utilise GNAT Compiler)

**GNAT Compiler** : Le compilateur ADA

**OpenOCD** : Un outils permetant de flash et debugger une grande variété de carte différente (entretenue par la communauté)

## Repository intéréssant

https://github.com/AdaCore/Ada_Drivers_Library/ : C'est sur le code de ce répository que repose à peux près tous le code des nouveaux répo utilisé par Alire et GNAT-Academic-Program. Il y a le code permetant de controller une STM32 et quelque exemples. Ce répository n'utilise pas Alire.

https://github.com/GNAT-Academic-Program/stm32_blinky_demo : Contient un exemple de code Ada permetant de faire clignoter une LED, pour la carte STM32F429disco ou STM32F746disco en utilisant Alire.

nb: L'index Alire de GNAT-Academic-Program ne contient que les cartes STM32F429disco et STM32F746disco donc pour flasher le code sur une autre carte il faut mieux aller voire dans https://github.com/AdaCore/Ada_Drivers_Library/ et initializer un projet Alire dans un des dossier d'exemple pour pouvoir compiler facilement l'exemple. Pensé également à consulter le répository stm32_blinky_demo pour apprendre comment build le projet avec Alire.

## Informations divers

### Le runtime Ada

Le runtime d'un MCU contient:
    - Le linker script (décris la tails et l'emplacement des différent espace mémoire du microcontroller).
    - Le startup code (bout de code en assembleur contenant l'interrupt vector table et permetant d'initializer certein variables à 0 et probablement d'autre chose pour avoir un code qui boot)
    - Un bout de code d'initialization pour setup les clocks par exemples
    - La code minimal permant d'implementer les standard d'Ada pour le MCU en question (comme par exemple le code permetant de faire un delay)

Tous les runtimes sont fournie avec le compilateur GNAT qui est télécharger automatiquement par Alire.

Il est possible de choisir quelle runtime on veut utilisé en changent cette ligne dans le fichier .gpr du projet:
```ada
for Runtime ("Ada") use "nom_du_runtime";
```

Pour plus d'info: https://wiki.osdev.org/Ada_Runtime_Library

### Les indexes d'Alire

Un index est un enssemble de fichiers décrivent une liste de packages ainsi que le lien télécharger et un hash pour vérifier l'integrité des fichier téléchargers.

Vous pouvez aller voire a quoi ressemble un index en allent voire dans le dossier "index/" du repository: https://github.com/GNAT-Academic-Program/alire-index

Il est possible d'ajouter un index à Alire avec la commande suivante:
```bash
alr index --add git+https://github.com/GNAT-Academic-Program/alire-index --name nom_index
```
La commande si-dessus ajouter une index nommer "nom_index" depuis le Git "https://github.com/GNAT-Academic-Program/alire-index"

Vous pouver mettre ce que vous voulez comme nom d'index.

Et pour supprimer l'index faut faire:
```bash
alr index --del nom_index
```

## Compiler

### Ajouter Alire a un projet qui n'utilise pas Alire

Presque tous les projet utilise au moins des fichiers GPR pour décrire comment build le projet, donc il suffis d'initializer un projet Alire en utilise le fichier GPR existant:
https://alire.ada.dev/docs/#using-your-own-gpr-project-files

### TODO

```bash
alr pin gnat_arm_elf=12.2.1
alr build
```

## Flasher

Pour flash un STM32F4... par l'intermediaire d'un STlink avec OpenOCD:
```bash
openocd -f /usr/share/openocd/scripts/interface/stlink.cfg -f /usr/share/openocd/scripts/target/stm32f4x.cfg -c 'program chemain/vers/le/binaire verify reset exit'
```
