table des matières
Cette page détaille l’utilisation de VsCode et de mbed pour générer un exécutable pour ARM CortexM.
VS code est l’IDE utilisé dans le BTS pour développer pour la cible Nucleo F746ZG. Afin qu’il soit fonctionnel pour notre chaîne de développement, un certain nombre de paramètres doivent être personnalisés.
Si vous avez importé un projet template depuis notre GIT, il est immédiatement fonctionnel. vous n’avez qu’à vérifier la compilation de celui-ci.
Nous allons synthétiser l’utilisation de Vscode et détailler la configuration du projet template proposé
Développer avec VSCODE
Créer un projet à partir d’un projet template
Maintenant que la chaîne de compilation est installée, vous allez pouvoir tester la compilation, le téléversement et l’exécution de votre projet
- Cloner le projet template
Cas Linux
git clone https://gitlab.ciel-kastler.fr/modeles/mbed6_template.git nomProjet
Cas Windows
git clone -b Windows https://gitlab.ciel-kastler.fr/modeles/mbed6_template.git nomProjet
- Se déplacer dans le dossier
cd nomProjet
- Installer mbed et les librairies à partir des fichiers *.lib
Attention, La commande mbed update télécharge + de 1Go de données la première fois…Soyez patient !
mbed deploy
- Installer les modules manquants
Si vous avez un message comme quoi il manque des modules python, installez les modules suivants
python3 -m pip install colorama future six requests idna pyserial jinja2 intelhex mbed-ls mbed-host-tests mbed-greentea beautifulsoup4 pyelftools pycryptodome pyusb psutil cryptography Click cbor urllib3 jsonschema six requests idna psutil
Ouvrir le projet dans vscode
Fichier -> Ouvrir un dossier
Compiler et exécuter un programme
Dans Vscode
Executer -> Démarrer le débogage
Le projet se compile (plusieurs minutes la première fois, puis est téléversé sur la carte.
Lors du premier téléversement, une fenêtre s’ouvre pour confirmer que vous voulez utiliser JLink. Cocher la case “Do not show this message again” et cliquer sur Accept
Exécuter le programme
Une fois le programme téléversé sur la carte, il attend que vous l’exécutiez
Cliquer sur la flèche bleu pour lancer le programme
Rediriger la sortie écran.
La sonde intégrée Jlink permet de rediriger des sorties écrans vers un terminal (/dev/ttyACM0
)
Pour cela,
- Cliquer sur l’onglet terminal de VSCODE.
- Entrer la commande suivante
mbed sterm --port /dev/ttyACM0
Dans le programme, les printf() seront redirigés vers ce terminal série.
printf("LO WORLD \r\n");
N’oubliez pas de préciser \n\r
dans votre code pour revenir à la ligne !
Ajouter une librairie ou une classe
- Cas d’une librairie existante
Si vous ajoutez une librairie de composant avec mbed add
, elle est immédiatement fonctionnelle.
- Cas d’une nouvelle librairie/classe
Pour que votre classe soient correctement compilée, vous devez indiquer son chemin depuis la racine de votre projet.
Exemple : classe CMoteur
- Créer un dossier CMoteur à la racine de votre projet
- Créer un fichier CMoteur.h et CMoteur.cpp dans le dossier CMoteur
-
Inclure la classe CMoteur dans le fichier concerné (main.cpp par exemple)
#include "CMoteur/Cmoteur.h"
Projet Mbed6Template
Le template est hébergé sur notre git, Mbed6Template
Vous pouvez le cloner comme indiqué ci-dessous
git clone https://gitlab.ciel-kastler.fr/modeles/mbed6_template.git
Fichiers et dossiers importants du template
.
├── main.cpp
├── mbed_app.json
├── mbed_config.h
├── mbed-os.lib
├── readme.md
├── STM32F7x6.svd
└── .vscode
├── c_cpp_properties.json
├── .cortex-debug.peripherals.state.json
├── .cortex-debug.registers.state.json
├── launch.json
├── settings.json
└── tasks.json
Répertoire principal
main.cpp
Le fichier main.cpp contient un “Hello World” qui allume et éteint la led1 toutes les 100ms
#include "mbed.h"
#define SLEEP_TIME 100ms // (msec)
DigitalOut led1(LED1);
int main() {
while (true) {
printf("LO CIEL \r\n");
led1 = !led1;
ThisThread::sleep_for(SLEEP_TIME);
}
}
mbed-app.json
Ce fichier est le fichier de configuration des options spécifques à certaines cartes.
Ici, nous précisons que nous voulons activer l’affichage des nombres réels pour toutes les cartes.
{
"target_overrides": {
"*": {
"target.printf_lib": "minimal-printf",
"platform.minimal-printf-enable-floating-point": true,
"platform.minimal-printf-set-floating-point-max-decimals": 6,
"platform.minimal-printf-enable-64-bit": false
},
"K64F": {
"platform.stdio-baud-rate": 9600
}
}
}
mbed-os.lib
Le fichier contient un lien vers la version de mbed-os qui doit être utilisé par le projet. Le fichier, comme tous les .lib est utilisé lorsqu’on exécute mbed update
Dans notre cas, la version téléchargée est la 6.15.0
https://github.com/ARMmbed/mbed-os/#4cfbea43cabe86bc3ed7a5287cd464be7a218938
STM32F7x6.svd
Ce fichier est le fichier de définition de la carte Nucleo STM32F746ZG. Il contient l’adresse de tous les registres mémoires. Il est utilisé pour voir l’état des registres lors du débogage du projet.
Sous répertoire .vscode
Ce sous répertoire contient la configuration utilisé par VsCode pour la chaine de cross compilation Il est indispensable au projet et dépend de la configuration des outils installé sur le PC.
Fichier c_cpp_properties.json
Ce fichier contient les directives de compilation propre à la carte et à l’environnement. Je vais détailler certaines des options.
configurations
: Détecte si l’OS est Windows ou Linux et adapte le chemin des outils en fonction.includePath
Le chemin d’inclusion automatique des bibliothèques. Ici"${workspaceFolder}/**"
signifie “tous les sous répertoires du répertoire de travailcompilerPath
: Le chemin (absolu si problème) vers le compilateur.cStandard
etcppStandard
: La version de C et CPP utilisé.intelliSenseMode
: Coloration syntaxique et complétion automatique de VsCode
{
"configurations": [
{
"name": "Windows",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
//suite de définition pour Windows
],
"compilerPath": "arm-none-eabi-g++",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
},
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"DEVICE_SPI=1",
"TARGET_STM32F746xG",
//suite de définition pour linux
"\"_DEBUG\",",
"\"UNICODE\",",
"\"_UNICODE\""
],
"compilerPath": "/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
launch.json
Ce fichier contient la configuration du téléversement et de la sonde de Debug
cortex-debug
: L’appel au plugin cortex-debug pour gérer le téléversement.executable
: Le chmein vers l’exécutableserverpath
: Le chemin vers l’exécutable de debogage. Nous utilisons Jlinkgdbpath
: Le chemin vers le debugger gdb
Task.json
Ce fichier contient les directives de compilation.
Nous utilisons mbed pour compiler.
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"name": "mbed",
"isShellCommand": true,
"showOutput": "always",
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"args": ["compile", "--profile=debug", "-t", "GCC_ARM", "-m", "NUCLEO_F746ZG"],
"linux": {
"command": "mbed"
},
"osx": {
"command": "mbed"
},
"windows": {
"command": "mbed"
}
}