Compiler arduino en C avec makefile

 

Le projer Arduino, fournit un environnement de développement accessible aux non-informaticiens et leur permet rapidement d'écrire leur premier programme.

Pour ceux qui veulent aller plus loin (utiliser l'éditeur de leur choix pour le code source, créer des librairies, etc..) il est possible d'utiliser une chaine de compilation alternative plus classique avec makefile C qui utilise les librairies cœurs Arduino.

Ce tutoriel a pour but de décrire en français les différentes étapes de la mise en place de cette chaine de compilation alternative sous windows en utilisant le process et la configuration réalisés par Queezythegreat.

Installation :

La méthode de développement proposée nécéssite l'installation du logiciel Cmake,  de l'environnement de développement d'Arduino et de la chaine de compilation de queezythegreat:

  • L'environnement de dévelopement classique Arduino est disponible sous forme d'archive sur le site officiel http://www.arduino.cc/en/Main/Software.
    Télécharger la dernière version pour windows et l'extraire directement dans le dossier "C:/Program Files/".
    Il est maintenant nécessaire d'ajouter l'emplacement des librairies cœurs Arduino à la variable système "PATH". Pour cela, appuyer, en même temps, sur les touches Windows+Pause pour ouvrir la fenêtre Propriétés système, sélectionner l'onglet "Avancé", puis cliquer sur "Variables d'environnement".

    VariablesEnvironnementSelection.JPG

    Sélectionner la variable "PATH" dans les variables utilisateurs puis cliquer sur "Modifier".

    VariablesEnvironnementPathSelection.jpg 

    En fin de ligne, ajouter le point virgule de séparation puis l'emplacement des binaires AVR
    "C:\Program Files\arduino-0022\hardware\tools\avr\utils\bin", la portion "arduino-0022" pouvant varier selon la version de la plateforme Arduino.
  • Cmake est un logiciel open-source qui va permettre de générer le makefile, télécharger l'assistant d'installation windows de la dernière version disponible sur http://www.cmake.org/cmake/resources/software.html et le lancer.

    InstallationCmake_03.jpg,

    Lors de l'installation de ce logiciel, demander à ce que le chemin de Cmake soit ajouté dans la variable système "PATH" (troisième fenêtre).
  • Afin de ne pas avoir à passer des heure à comprendre le fonctionnement et les différentes options du logicel cmake, télécharger la chaine de compilation de queezythegreat et l'extraire dans le répertoire de son choix. Ce répertoire sera la racine de vos projets arduino.
    Sont présents dans ce répertoire racine :
    • Le fichier batch configure.bat qui permet de lancer cmake avec les bonnes options pour générer ou mettre à jour le makefile de votre projet.
    • Le fichier CMakeLists.txt qui précise le chemin des librairies cœurs Arduino, la version d'Arduino utilisée et le projet en cours.
    • Le répertoire cmake contient des fichiers scripts de configuration du logiciel cmake pour la cible arduino. Il est conseillé de ne rien modifier dans ce répertoire.
    • Le répertoire exemple est un projet utilisant la librairie Wire pour les pérphériques I2C/TWI. Ce projet n'est pas très adapté à la vérification et la prise en main d'un nouvel environnement de compilation. Aussi nous allons créer un nouveau projet dans ce but au chapitre suivant
    • Le fichier configure qui est l'équivalent du fichier batch configure.bat pour l'environnement unix.
    • Le fichier d'explication README.rst .

Premier projet :

Vous savez probablement déjà qu'une LED reliée à la sortie 13 est intégrée sur les cartes arduino. Faire clignoter cette diode est un moyen simple de vérifier notre environnement de développement, ce sera notre premier projet.

Commençons par ajouter le répertoire projet nommé Clignotement au même niveau que les répertoires cmake et exemple. Dans ce répertoire, nous allons créer le fichiers source ClignotementLed.cpp, le header ClignotementLed.h et le fichier cmake CMakeLists.txt

Le fichiers source ClignotementLed.cpp est assez classique :

#include ‹WProgram.h›
#include "ClignotementLed.h"

void setup()
{
  pinMode(NO_SORTIE_LED, OUTPUT);
}

void loop()
{
  int i;
  for(i=100; i<1500;i=i+100)
  {
  digitalWrite(NO_SORTIE_LED, HIGH);
  delay(100);
  digitalWrite(NO_SORTIE_LED, LOW);
  delay(i);
  }
}

 

Le fichiers en-tête ClignotementLed.h contient un simple define :

#define NO_SORTIE_LED 13


Le fichiers cmake CMakeLists.txt renseigne trois variables importantes :

  • FIRMWARE_NAME définit le nom de l'exécutable généré,
  • ${FIRMWARE_NAME}_BOARD spécifie le type de carte arduino sur lequel va s'exécuter le logiciel (uno, atmega328, diecimila, mega2560, mega, mini, fio, bt328, bt, lilypad328, lilypad, pro5v328, pro5v, pro328, pro, atmega168 ou atmega8)
  • ${FIRMWARE_NAME}_SRCS précise la liste des fichiers sources à compiler
  • ${FIRMWARE_NAME}_HDRS précise la liste des fichiers en-tête

#====================================================================#
# Paramétrage
#====================================================================#
set(FIRMWARE_NAME ClignotementLed)
set(${FIRMWARE_NAME}_BOARD uno)
set(${FIRMWARE_NAME}_SRCS ClignotementLed.cpp)
set(${FIRMWARE_NAME}_HDRS ClignotementLed.h)

#====================================================================#
Génération de la cible
#====================================================================#
generate_arduino_firmware(${FIRMWARE_NAME})

 

Une fois ces trois fichiers créés, le répertoire projet  Clignotement est prêt. Nous allons maintenant remonter d'un niveau.

Avant de lancer l'outil cmake, il est nécessaire de lui préciser notre projet de développement courant. Pour cela, modifier le fichiers cmake CMakeLists.txt "chapeau" qui se trouve à ce niveau.

Il est nécessaire de mettre en commentaire les référence au projet existant par le caractère "#" et d'y ajouter les références à notre premier projet. Bien porter attention de bien ajouter un retour chariot sur la dernière ligne en fin de fichier !

#=============================================================================#
# Author: QueezyTheGreat                                                      #
# Date:   26.04.2011                                                          #
#                                                                             #
# Description: Arduino CMake example                                          #
#                                                                             ##=============================================================================
#set(CMAKE_MODULE_PATH    ${CMAKE_SOURCE_DIR}/cmake/modules)  # CMake module search path
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/toolchains/Arduino.cmake) # Arduino Toolchain

cmake_minimum_required(VERSION 2.8)
#====================================================================#
#  Setup Project                                                     #
#====================================================================#
#project(ArduinoExample C CXX)
#find_package(Arduino 22 REQUIRED)
#add_subdirectory(example)  # Add example directory to build

project(1erProjet C CXX)
find_package(Arduino 22 REQUIRED)
add_subdirectory(Clignotement) # Ajout du répertoire du projet

 

Executer le batch configure.bat pour lancer cmake avec la bonne configuration :

LancementCmake_01.jpg

Cliquer sur "Configure",

LancementCmake_02.jpg

choisir "MSYS Makefiles" et "Use default native compiler".

Une fois le traitement terminé, le message "Configuring done" signale que tout s'est bien passé. Cliquer ensuite sur "Generate" dans la fenêtre mère de cmake pour obtenir le message "Generating done".

Vous pouvez maintenant fermer cmake. Un répertoire build a été créé et dans ce répertoire, un répertoire nomé Clignotement contient le précieux fichier "makefile" qui va vous permettre de compiler votre code source.

Maintenant pour compiler le plus simple est de créer un batch à coté du makefile que nous allons nommer Lancer.bat avec le code suivant:

cd %~dp0
make all

pause


Lexécution de ce .bat va lancer la compilation. Si tout s'est bien passé, le fichier ClignotementLed.hex a été généré.

Il ne reste plus qu'à uploader ce fichier sur la cible pour l'exécuter, pour cela, vous pouvez créer la aussi un batch à coté du makefile que nous allons nommer Uploader.bat. Le code suivant est prévu pour connecter arduino sur le port série "3", à vous de l'adapter à votre configuration en modifiant la variable "com3" :

@ECHO OFF
cd %~dp0
"C:\Program Files\arduino-0022\hardware\tools\avr\bin\avrdude.exe" -C "C:\Program Files\arduino-0022\hardware\tools\avr\etc\avrdude.conf" -c stk500v1 -v 19200 -p m328p -P com3 -U flash:w:ClignotementLed.hex

pause

 

Un clignotement progressif de votre diode vous indique que votre environnement de développement est fonctionnel !

Commentaires:

Poster une réponse



(Votre email ne sera pas affiché publiquement.)

Veuillez saisir les lettres et chiffres affichés sur l’imageCaptcha Code