[LINUX] Construisez TOPPERS / ASP3 et essayez-le

introduction

Il a été annoncé le 25 décembre 2019 dans les sujets du projet TOPPERS qu'un package simple pour le noyau ** TOPPERS / ASP3 ** pour Nucleo F401RE a été publié. Auparavant, " Générez et exécutez TOPPERS / ASP (https://qiita.com/Yukiya_Ishioka/items/ 9ecbe080939600c323c6) », j'ai écrit un article pour construire ** RTOS ** appelé ** TOPPERS / ASP ** et l'exécuter sur la carte du micro-ordinateur, mais cette fois j'ai écrit ** TOPPERS / ASP3 ** qui est le noyau TOPPERS de 3e génération. Nous avons résumé la méthode de construction à partir des sources dans un environnement Linux afin qu'elle fonctionne sur une carte micro-ordinateur appelée ** NUCLEO-F401RE ** comme précédemment. La plupart des environnements Linux peuvent utiliser l'environnement précédent, donc seuls les changements par rapport à celui-ci sont décrits.

Qu'est-ce que TOPPERS / ASP3?

** TOPPERS / ASP3 ** est un projet TOPPERS (TOPPERS: ** T ** oyohashi ** OP ** en ** P ** plateforme pour ** E ** mbedded ** R ** eal-time ** S ** ystems) est l'un des RTOS de spécification ITRON géré et publié. Il s'agit d'une extension / amélioration du noyau TOPPERS / ASP, et c'est le noyau TOPPERS de 3e génération. Les principaux changements par rapport à ** TOPPERS / ASP ** sont les suivants.

・ Fonctions ajoutées Gestion du temps haute résolution sans tiques Fonction de synchronisation de l'heure externe Fonction de demande de fin de tâche ・ Fonctions supprimées Fonction de gestion des exceptions de tâche Fonction boîte aux lettres

À mon avis, la "gestion du temps haute résolution sans tic" est une fonctionnalité majeure, qui réduit les opérations inutiles du noyau et permet un contrôle précis du temps. Il semble que l'on puisse s'attendre à la mise en œuvre de la fonction d'économie d'énergie et à l'amélioration des performances en temps réel lors de l'utilisation d'un micro-ordinateur haute vitesse. Pour plus de détails sur ** TOPPERS **, ** TOPPERS project ** et ** TOPPERS / ASP3 **, reportez-vous aux pages suivantes.

・ Page TOPPERS  https://www.toppers.jp/ ・ Page du projet TOPPERS  https://www.toppers.jp/project.html ・ Page du noyau TOPPERS / ASP3  https://www.toppers.jp/asp3-kernel.html

Préparation à l'exécution de TOPPERS / ASP3

1. 1. Préparons une carte micro-ordinateur

Cette fois également, ** TOPPERS / ASP3 ** fonctionnera à l'aide d'une carte micro-ordinateur appelée ** NUCLEO-F401RE ** publiée par ** ST Microelectronics ** (ci-après, ** ST Micro **). https://www.st.com/ja/evaluation-tools/nucleo-f401re.html

** NUCLEO-F401RE ** est une carte qui utilise le micro-ordinateur central Cortex-M4 d'ARM. Si vous répondez au questionnaire sur le stand ST Micro lors d'une exposition pour les appareils embarqués, vous pouvez l'obtenir gratuitement ou vous pouvez l'acheter dans un magasin qui gère les pièces électroniques comme indiqué sur la page suivante. http://akizukidenshi.com/catalog/g/gM-07723/

2. Récupérez le fichier source

Vous pouvez obtenir le fichier source de ** TOPPERS / ASP3 ** à partir de la page suivante. https://www.toppers.jp/asp3-e-download.html#nucleo

Les noyaux TOPPERS / ASP sont généralement fournis en deux parties, ** partie indépendante de la cible ** et ** partie dépendante de la cible **, mais cette fois ** partie non cible pour ** NUCLEO-F401RE ** Un ** package simple ** qui combine la partie dépendante ** et la ** partie dépendante cible ** est fourni dans le fichier ZIP suivant.  https://www.toppers.jp/download.cgi/asp3_nucleo_f401re_gcc-20191220.zip

De plus, les versions ** TOPPERS / ASP3 ** nécessitent un ** configurateur ** et un ** générateur TECS **, qui sont également inclus dans le ** package simple ** ci-dessus.

3. 3. Préparons l'environnement de construction (1)

Nous allons construire ** TOPPERS / ASP3 ** dans un environnement Linux, mais cette fois, nous utiliserons l'environnement utilisé dans la précédente version ** TOPPERS / ASP **. Si vous ne disposez pas d'un environnement de construction ** TOPPERS / ASP **, reportez-vous à la page suivante.

Construisez TOPPERS / ASP et essayez-le https://qiita.com/Yukiya_Ishioka/items/9ecbe080939600c323c6

4. Préparons l'environnement de construction (2)

Je pensais qu'il serait facile de construire ** TOPPERS / ASP3 ** en utilisant l'environnement de construction ** TOPPERS / ASP **, mais d'exécuter le ** configurateur ** et le ** générateur TECS ** ** J'ai trouvé que j'avais besoin de Ruby **. Au fait, je me suis souvenu que j'avais renoncé à essayer de construire ** TOPPERS / ASP3 ** parce que je savais que j'avais besoin de Ruby. Le ** ubuntu ** que j'ai utilisé n'inclut pas ** Ruby **, mais cette fois je vais essayer de l'installer. Même si vous essayez, vous pouvez le trouver immédiatement en recherchant "ubuntu", "Ruby", "Install" ... La procédure qui a été effectuée est décrite ci-dessous.

  1. Installation des packages requis  sudo apt-get install rbenv ruby-build

  2. Rendre rbenv disponible dans bash  echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

  3. Vérifiez la version Ruby installable  rbenv install --list

  1. Installez Ruby en spécifiant la version  rbenv install 2.1.0

La version de Ruby à installer était répertoriée dans ** doc / user.txt ** dans la source de ** TOPPERS / ASP3 ** et était "2.0.0", mais elle n'est pas dans la version installable. J'ai donc spécifié "2.1.0". Cependant, lorsque j'ai vérifié la version après l'installation, une autre version a été installée. En conséquence, la construction de ** TOPPERS / ASP3 ** est terminée, vous pouvez donc continuer sans vous en soucier.

$ ruby --version
ruby 2.3.1p112 (2016-04-26) [i386-linux-gnu]

Préparation de la construction TOPPERS / ASP

1. 1. Déploiement de la source du noyau TOPPERS / ASP

Extrayez le fichier source du noyau TOPPERS / ASP3 ** asp3_nucleo_f401re_gcc-20191220.zip ** dans n'importe quel répertoire.

unzip asp3_nucleo_f401re_gcc-20191220.zip

Lorsqu'il est développé, un répertoire ** asp3_3.5 ** sera créé, et la structure de répertoire en dessous sera comme suit.

└ asp3_3.5
    ├── arch
    ├── cfg
    ├── doc
    ├── extension
    ├── include
    ├── kernel
    ├── library
    ├── sample
    ├── syssvc
    ├── target
    │   ├── dummy_gcc
    │   └── nucleo_f401re_gcc
    ├── tecs_kernel
    ├── tecsgen
    ├── test
    └── utils

2. Création d'un répertoire pour la création d'applications

Revenez au répertoire un niveau au-dessus du répertoire ** asp3_3.5 ** et créez un répertoire d'application et un répertoire de construction d'application. Ici, c'est ** appli **, mais vous pouvez lui donner n'importe quel nom de répertoire.

cd ..
mdir -p appli/obj
├─ asp3_3.5
│   ├─arch
│   :
│
└─ appli ← Répertoire des applications
└─ obj ← Répertoire de construction de l'application

3. 3. Copie de l'exemple d'application

Copiez l'exemple de code source d'application contenu dans ** TOPPERS / ASP3 ** dans le répertoire ** appli **. Vous n'avez pas besoin de le copier si vous voulez juste vérifier l'opération, mais vous pouvez voir l'opération tout en la modifiant, et ce sera la base du programme utilisateur, alors copiez-la.

cd appli
/bin/cp -a ../asp3_3.5/sample .

4. Configuration du noyau TOPPERS / ASP3

Allez ensuite dans le répertoire ** appli / obj ** et configurez le noyau. Les significations des options de la commande configure sont les suivantes. -T: sélection cible Cette fois, c'est pour ** NUCLEO-F401RE **, alors définissez ** nucléo_f401re_gcc **

cd appli/obj
../../asp3_3.5/configure.rb -T nucleo_f401re_gcc

5. Modifier Makefile

Un appli / obj / Makefile réussi sera généré si le noyau est configuré avec succès. Vérifiez la définition à la ligne 51 du Makefile généré.

TARGET = nucleo_f401re_gcc

Ajoutez ** $ (OBJNAME) .bin ** à la ligne 435 afin que le fichier de code généré par la construction contienne le fichier binaire.

    430 #
    431 #Traitement de la vérification des erreurs
    432 #
    433 .PHONY: check
    434 check: check.timestamp ;
    435 check.timestamp: cfg2_out.db $(OBJNAME).syms $(OBJNAME).srec $(OBJNAME).bin
                                                                     ~~~~~~~~~~~~~~
    436         $(CFG) --pass 3 $(CFG_KERNEL) -O $(INCLUDES) -T $(TARGET_CHECK_TRB) \
    437                                 --rom-symbol $(OBJNAME).syms --rom-image $(OBJNAME).srec
    438         @echo "configuration check passed"
    439 

Pour changer la spécification de chemin de l'exemple de programme d'application, modifiez et ajoutez le contenu de la définition APPLDIRS à la ligne 181 comme indiqué par l'étoile ci-dessous.

    177 #
    178 #Définition du programme d'application
    179 #
★  180 APPLNAME = sample1
★  181 #APPLDIRS = $(SRCDIR)/sample
    182 APPLDIRS = ../sample

Exécution de build TOPPERS / ASP

Exécutez la commande make dans le répertoire ** appli / obj **. Si la génération réussit, les fichiers nécessaires à l'exécution de TOPPERS / ASP3 tels que asp.bin seront générés.

$ ll asp*
-rwxrwxr-x 1 ubuntu ubuntu 510968 13 janvier 17:59 asp*
-rwxrwxr-x 1 ubuntu ubuntu 26944 13 janvier 17:59 asp.bin*
-rwxrwxr-x 1 ubuntu ubuntu 80892 13 janvier 17:59 asp.srec*
-rw-rw-r--1 ubuntu ubuntu 10441 13 janvier 17:59 asp.syms

Exécuter sur une carte micro-ordinateur

1. 1. Ecrire sur le micro-ordinateur

Connectez la carte NUCLEO-F401RE à votre PC via USB. Une fois connecté, il sera reconnu comme stockage de masse par le PC et vous pourrez copier des fichiers avec Explorer. Copiez ensuite le fichier asp.bin généré par la compilation sur Ubuntu sur la carte NUCLEO-F401RE via l'Explorateur. Lorsque la copie est terminée, l'écriture au conseil est terminée.

2. Exécuter

Après avoir installé le pilote ST Micro, l'USB de la carte NUCLEO-F401RE sera également reconnue comme un port COM virtuel. Lorsque vous démarrez un logiciel de terminal série tel que TeraTerm et que vous connectez le port COM de la carte NUCLEO-F401RE à ** 115200 bps **, les informations de journal émises par le noyau TOPPERS / ASP sont affichées sur le logiciel du terminal série et sur la carte NUCLEO-F401RE. Vous pouvez voir que le noyau TOPPERS / ASP3 et les exemples de programmes fonctionnent.

TOPPERS/ASP3 Kernel Release 3.5.0 for NUCLEO(STM32F401RE:ARM Cortex-M4) (Jan 13 2020, 18:20:43)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2019 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN

System logging task is started.
Sample program starts (exinf = 0).
task1 is running (001).   |
task1 is running (002).   |
task1 is running (003).   |
           :

Lorsqu'il est exécuté par l'opération ci-dessus, appli / sample / sample1.c est construit et exécuté en tant que programme utilisateur. Le commentaire dans sample1.c indique comme suit. Lorsque vous entrez des caractères, vous pouvez vérifier l'opération qui correspond au code de caractère dans la sortie du journal. Vous pouvez également exécuter votre propre programme en vous référant à ce code source. Essayez-le avec Iloilo.

 *  '1' :Basculez la tâche cible sur TASK1 (paramètre initial).
 *  '2' :Basculez la tâche cible sur TASK2.
 *  '3' :Basculez la tâche cible sur TASK3.
 *  'a' :Agir sur la tâche cible_Commencez par tsk.
 *  'A' :Peut lancer une demande pour la tâche cible_Annuler par acte.
 *  'e' :Extension à la tâche cible_Appelez tsk et terminez-le.
 *  't' :Tâche cible_Résiliation forcée par tsk.
 *  '>' :HIGH la priorité de la tâche cible_Réglez sur PRIORITY.
 *  '=' :MID la priorité de la tâche cible_Réglez sur PRIORITY.
 *  '<' :Priorité FAIBLE de la tâche cible_Réglez sur PRIORITY.
 *  'G' :Obtenez la priorité de la tâche cible_Lisez avec pri.
 *  's' :Slp à la tâche cible_Appelez tsk et attendez qu'il se réveille.
 *  'S' :Tslp pour la tâche cible_tsk(10 secondes)Est appelé et attend de se réveiller.
 *  'w' :Wup la tâche cible_Levez-vous par tsk.
 *  'W' :Peut réveiller la demande de la tâche cible_Annulez avec wup.
 *  'l' :Rell la tâche cible_Annulez de force l'attente par wai.
 *  'u' :Sus la tâche cible_Obligé d'attendre par tsk.
 *  'm' :L'état d'attente forcée de la tâche cible est rsm_Relâchez avec tsk.
 *  'd' :Dly à la tâche cible_tsk(10 secondes)Est appelé et attend le passage du temps.
 *  'x' :Ras pour la tâche cible_Demandez la fin par ter.
 *  'y' :Dis à la tâche cible_Appelez et interdisez l'arrêt de la tâche.
 *  'Y' :Ena pour la tâche cible_Appelez et laissez la tâche se terminer.
 *  'r' :3 priorités (HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITÉ)
 *Faites pivoter le dicu.
 *  'c' :Démarrez le fonctionnement du gestionnaire périodique.
 *  'C' :Arrêtez le fonctionnement du gestionnaire périodique.
 *  'b' :Démarrez l'opération pour que le gestionnaire d'alarme soit activé après 5 secondes.
 *  'B' :Arrêtez le fonctionnement du gestionnaire d'alarmes.
 *  'z' :Génère une exception CPU pour la tâche cible (elle peut être renvoyée en fonction de la cible).
 *  'Z' :Génère une exception CPU pour la tâche cible dans l'état CPU verrouillé (ne peut pas être restaurée).
 *  'V' :Avec une courte boucle entre les deux, fch_Lisez la minuterie haute résolution deux fois avec hrt.
 *  'v' :Afficher l'appel système émis (par défaut).
 *  'q' :N'affichez pas l'appel système émis.

prime

Le comportement de l'exemple d'application sample1.c est le même pour ** TOPPERS / ASP3 ** que pour ** TOPPERS / ASP **, vous ne pouvez donc pas faire la différence sauf pour le message au démarrage. Toutefois, si vous examinez le contenu de sample1.c et sample1.cfg, vous pouvez voir qu'il s'agit d'un noyau ASP3 car l'heure est spécifiée en microsecondes.

sample/sample1.c


    188       case 'S':
    189           syslog(LOG_INFO, "#%d#tslp_tsk(10000000)", tskno);
    190           SVC_PERROR(tslp_tsk(10000000));
    191           break;
    192       case 'd':
    193           syslog(LOG_INFO, "#%d#dly_tsk(10000000)", tskno);
    194           SVC_PERROR(dly_tsk(10000000));
    195           break;

sample/sample1.cfg


     14 CRE_CYC(CYCHDR1, { TA_NULL, { TNFY_HANDLER, 0, cyclic_handler }, 2000000, 0 });

Sur la base de sample1.c, vous pouvez essayer de changer de tâche, de remplacer les gestionnaires périodiques, les gestionnaires d'alarmes, etc. par votre propre programme. De plus, le noyau TOPPERS / ASP peut être exécuté sur la même carte, il est donc possible de comparer les différences sur la machine réelle. Si vous avez construit ou construit un environnement jusqu'à présent, pourquoi ne pas essayer diverses choses?

Recommended Posts

Construisez TOPPERS / ASP3 et essayez-le
Construire et exécuter TOPPERS / ASP (version 10/03/2020)
Essayez d'utiliser tensorflow ① Créez un environnement python et introduisez tensorflow
Faisons un Makefile et construisons-le (super débutant)
Installez le sélénium sur votre Mac et essayez-le avec python
Essayez de le faire avec GUI, PyQt en Python
Essayez Caffe et Pylearn2 ensemble
Essayez d'utiliser pytest-Overview and Samples-
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker