Il n'y a pas si longtemps, il a aidé au développement des microcontrôleurs d'une entreprise peu connue - Milander. L'environnement de développement officiel de Keil. Je ne l'aimais pas, mais le processeur est basé sur l'architecture d'une autre société ARM peu connue, ce qui signifie qu'il existe un compilateur gcc. Et là où il y a gcc, QtCreator peut également être utilisé comme IDE.

Présentation
Au départ, la tâche était assez simple. Recherchez les fichiers dont vous avez besoin pour créer le projet. Prenez un projet déjà fait sous stm32f407 et traitez-le avec un fichier. Cependant, lors de la mise en œuvre d'un plan aussi simple, il y avait un désir de faire un projet légèrement plus intéressant qu'on ne le pensait à l'origine.
La préparation
Vous devez d'abord télécharger le compilateur et le débogueur pour microcontrôleurs basés sur les cœurs de la série Cortex-M. La dernière version est ici
[1] . Vous aurez également besoin de QtCreator, les non paresseux peuvent compiler à partir des sources, les paresseux peuvent arriver ici
[2] . Nous avons également besoin d'openocd pour flasher et déboguer le microcontrôleur.
[3] Compilateur GCC pour Cortex-M sur le site ARM
[9]Installez le logiciel spécifié, ainsi que toutes les dépendances si nécessaire. Ensuite, nous procédons à la configuration de l'environnement.
Définition de QtCreator'a en imagesSi ce n'est pas activé, activez la prise en charge du bare metal dans Aide -> À propos des modules
Ajouter des compilateurs
g ++

gcc

Ajouter un débogueur gdb

Nous créons un profil de débogage openocd, ce n'est
pas une grosse béquille. Le chemin d'accès au fichier de configuration doit être spécifié en absolu. Le fichier de chaque microcontrôleur est différent, cela introduit certains inconvénients.

Mise en métal nu

Et tout mettre en un seul ensemble

Bibliothèques de microcontrôleurs
Une recherche rapide sur le site de Milander n'a pas produit d'assemblage officiel de bibliothèques pour travailler avec les périphériques et le cœur du microcontrôleur. L'ensemble prend en charge gcc et se trouve sur le github
[4] . L'assemblage est allé au projet fini pour stm32f407 assez facilement et après l'avoir fixé à quelques endroits, il était déjà joyeusement désireux de flasher le microcontrôleur. Modification du fichier de configuration openocd et maintenant tout clignote. Un peu plus de travail de serrurier et de débogage fonctionne déjà. Et il semble que c'est tout - une victoire facile. Mais les bibliothèques prennent en charge plusieurs microcontrôleurs. Et les microcontrôleurs sur différents cœurs utilisent également différentes bibliothèques périphériques. Immédiatement, l'idée est venue de faire un projet afin que vous puissiez facilement sélectionner le microcontrôleur souhaité, et l'environnement lui-même sélectionnera les bibliothèques de base et les périphériques nécessaires. Cette idée m'est venue au moment où je maîtrisais le stm32f407. L'occasion de réaliser une idée aussi intéressante ne pouvait pas être manquée.
Quelques nuits de cueillette dans les bibliothèques et qbs
[5] ont donné un résultat positif. Il a été possible de configurer la compilation pour les microcontrôleurs suivants: MDR1901VC1T (19011), MDR1986VE1T (1986 BE1T), MDR1986VE3 (1986 BE3), MDR1986BE4 (1986 BE4x), MDR1986VE8T (1986 BE8x), MDR1986VE9x (1986 BE). Bien que la description des bibliothèques source ne prenne pas en charge MDR1986VE8T, il y avait une partie de la bibliothèque principale et des fichiers de bibliothèque périphérique. Certains des fichiers d'en-tête trouvés dans le référentiel ARM étaient manquants
[6] .
Projet final
Le résultat a été un modèle plutôt modeste qui vous permet d'écrire des projets pour plusieurs microcontrôleurs. Modèle de mensonge sur github
[7] . La bibliothèque source a subi un certain nombre de modifications cosmétiques. Bien que je veuille maintenir la compatibilité avec le projet d'origine, j'ai dû bifurquer
[8] et perdre la compatibilité, mais c'est un prix pour la polyvalence. Vous pouvez télécharger le projet comme suit.
git clone https://github.com/WicRus/emdr1986x-std-per-lib-qbs.git --recursive
Vous pouvez également cloner un projet directement à partir de QtCreator en spécifiant l'adresse du référentiel et en cochant Récursivement.
Elevage
Le résultat principal est un modèle universel prenant en charge plusieurs microcontrôleurs avec diverses bibliothèques de base et périphériques. Cependant, il y avait un certain nombre de points à noter:
- Il était possible de vérifier le firmware et le débogage uniquement sur le MDR1986VE1T.
- Les fichiers de configuration openocd cibles ont été trouvés uniquement pour MDR1986VE1T et MDR1986VE9x. Pour le reste des contrôleurs, vous devez prendre ou écrire quelque part vous-même.
- Les bibliothèques pour le MDR1986VE8T ont été compilées sans grande compréhension du problème. Il est nécessaire de vérifier le bon fonctionnement.
- Les bibliothèques sources ont été considérablement modifiées. Problèmes de fusion possibles.
- Lors de la génération pour MDR1901VC1T, MDR1986BE4, MDR1986VE9x, un avertissement est émis à propos des bibliothèques de noyau obsolètes. Il est nécessaire de mettre à jour les bibliothèques du noyau par analogie avec MDR1986VE8T, puis de vérifier le bon fonctionnement.
- Fonction de création de configuration openocd. Pour chaque type individuel de microcontrôleur, vous pouvez avoir besoin d'un kit de construction distinct dans QtCreator.
Les référencesAttention, les liens s'ouvrent dans cette fenêtre.
0. La base du site KDPV Milander1. https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads2. https://www.qt.io/download-qt-installer3. http://openocd.org4. https://github.com/eldarkg/emdr1986x-std-per-lib5. https://doc.qt.io/qbs/6. https://github.com/ARM-software/CMSIS_57. https://github.com/WicRus/emdr1986x-std-per-lib-qbs8. https://github.com/WicRus/emdr1986x-std-per-lib9. https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloadsHistorique des modifications.17/09/19 Ajout d'un lien vers la chaîne d'outils intégrée GNU Arm.