Organisation des sources pour les micro-contrôleurs

De Wiki Techno-Innov
< Technique‎ | Logiciel‎ | API
Aller à la navigation Aller à la recherche
La version imprimable n’est plus prise en charge et peut comporter des erreurs de génération. Veuillez mettre à jour les signets de votre navigateur et utiliser à la place la fonction d’impression par défaut de celui-ci.


Les sources présentes dans les dépôts de chaque micro-contrôleur ont été organisées de façon cohérente pour simplifier l'utilisation du code pour de nouveaux projets et le portage sur de nouveaux micro-contrôleurs.

Langage des sources

L'ensemble des sources destinées à fonctionner sur les micro-contrôleurs (donc à l'exclusion du dossier 'host') est écrit en C (principalement) ou en assembleur (fichier 'include/core/lpc_core.h' et quelques autres exceptions).

Fichiers présents à la racine

  • Licence

La racine de chaque dépôt contient un ou plusieurs fichiers concernant la ou les licences utilisée.

  • Readme

La racine de chaque dépôt contient un fichier 'README' contenant une description des sources et l'état actuel du support du micro-contrôleur.

  • Makefile

Ce Makefile sert de base et est utilisé par tous les Makefiles des différentes applications. Il permet aussi de compiler l'ensemble des applications en une fois. Voir la page Principe de fonctionnement des différents Makefiles pour de plus amples informations sur son contenu.

  • Script d'édition de lien

Le script d'édition de lien (Linker Script) est utilisé par l'éditeur de lien (linker - ld) pour la création de l'éxécutable au format ELF en fin de compilation.
Ce fichier décrit la mémoire (FLASH et RAM) du micro-contrôleur et la façon d'organiser le code dans cette mémoire.
L'article Partie 5: Programmation : premiers signes de vie explique en grande partie son fonctionnement (entre autres). Se référer à la documentation de GNU ld pour plus d'informations.

Dossiers

Le code est organisé et réparti dans plusieurs sous-dossiers :

'core'

Le dossier 'core' contient le code correspondant au support des fonction internes du micro-contrôleur :

  • démarrage (bootstrap),
  • horloges (PLL),
  • system tick timer (systick),
  • configuration des entrées/sorties et fonctions spéciales (PIO),
  • gestion d'énergie,
  • chien de garde (watchdog),
  • accès aux routines 'ROM',
  • ...

'drivers'

Support des différents blocs fonctionnels du micro-contrôleur :

  • GPIO,
  • ADC,
  • UART (serial),
  • I2C,
  • SPI (SSP),
  • RTC,
  • Timers,
  • ....

'extdrv'

Drivers pour les composants externes (capteurs, transceivers, mémoires, afficheurs, ...), connectés en utilisant un des bus de communication du micro-contrôleur (SPI, I2C, ...), ou utilisant directement des GPIO.

'lib'

Éléments de bibliothèques diverses, principalement présents dans la bibliothèque C, et protocoles de communication.

'include'

Fichiers d'entête (header files) correspondant aux éléments précédents et reprenant la même organisation (core, drivers, extdrv, lib).

'apps'

Code des applications, organisé par module (cartes électroniques).
Chaque module dispose d'un sous-dossier dans le dossier 'apps', et chaque application destinée à un module donné est présente dans un sous-dossier du module en question.
Chaque dossier d'application contient le code spécifique de l'application qui doit définir une fonction "main()" qui est le point d'entrée du programme et est appelé à partir du "Reset_Handler" présent dans 'core/bootstrap.c'.
Ce code doit procéder à la configuration des fonctions internes et des entres/sorties et réaliser la boucle principale du programme.
Le code peut être réparti dans plusieurs fichiers dont le nom n'a pas d'importance pour la compilation. Chaque dossier d'application contient aussi un Makefile "générique" (identique pour toutes les applications) qui fait appel au Makefile principal pour la compilation de l'application. (Voir la page Principe de fonctionnement des différents Makefiles pour plus d'informations).

'host'

Code d'exemple destiné à fonctionner sur les systèmes communicants avec les modules (PC de développement, passerelles, système de contrôle, ....)
Ce code peut faire appel à des bibliothèques externes (libC, bibliothèques graphiques, ...) et être écrit dans n'importe quel language.

Compilation

La compilation est prévue pour être réalisée en utilisant un cross-compilateur GCC et l'utilitaire 'make' fonctionnant sur un système GNU/linux.
Les explications sur l'utilisation d'un cross-compilateur sont présentes au début de l'article Partie 5: Programmation : premiers signes de vie.
Voir la page Principe de fonctionnement des différents Makefiles pour de plus amples informations sur les Makefiles utilisés pour la partie micro-contrôleur.
Pour la compilation des applications destinées aux systèmes communicants avec les modules (dossier 'host'), se référer aux fichiers README présents dans les dossiers de ces applications et aux Makefiles correspondants.