[LINUX] Erstellen Sie TOPPERS / ASP3 und probieren Sie es aus

Einführung

Am 25. Dezember 2019 wurde in den Projektthemen von TOPPERS angekündigt, dass ein einfaches Paket für den Kernel ** TOPPERS / ASP3 ** für Nucleo F401RE veröffentlicht wurde. Zuvor " Erstellen und Ausführen von TOPPERS / ASP </ A> (https://qiita.com/Yukiya_Ishioka/items/ 9ecbe080939600c323c6) ”schrieb ich einen Artikel, um ** RTOS ** mit dem Namen ** TOPPERS / ASP ** zu erstellen und auf der Mikrocomputerplatine auszuführen, aber diesmal schrieb ich ** TOPPERS / ASP3 **, den Kernel der TOPPERS 3. Generation. Wir haben die Methode zum Erstellen aus dem Quellcode in einer Linux-Umgebung so zusammengefasst, dass sie wie zuvor auf einer Mikrocomputerplatine mit dem Namen ** NUCLEO-F401RE ** funktioniert. Die meisten Linux-Umgebungen können die vorherige Umgebung verwenden, daher werden nur die Änderungen beschrieben.

Was ist TOPPERS / ASP3?

** TOPPERS / ASP3 ** ist ein TOPPERS-Projekt (TOPPERS: ** T ** oyohashi ** OP ** en ** P ** -Plattform für ** E ** mbedded ** R ** eal-time ** S. ** ystems) ist eine der ITRON-Spezifikationen, die RTOS verwaltet und veröffentlicht. Dies ist eine Erweiterung / Verbesserung des TOPPERS / ASP-Kernels und des TOPPERS-Kernels der 3. Generation. Die wichtigsten Änderungen von ** TOPPERS / ASP ** sind wie folgt.

・ Funktionen hinzugefügt Tickless hochauflösendes Zeitmanagement Externe Zeitsynchronisationsfunktion Task-End-Anforderungsfunktion ・ Gelöschte Funktionen Funktion zur Behandlung von Aufgabenausnahmen Mailbox-Funktion

Meiner Meinung nach ist "tickless hochauflösendes Zeitmanagement" ein wichtiges Merkmal, das unnötige Kerneloperationen reduziert und eine feine Zeitsteuerung ermöglicht. Es scheint, dass wir die Implementierung einer Energiesparfunktion und die Verbesserung der Echtzeitleistung erwarten können, wenn ein Hochgeschwindigkeits-Mikrocomputer verwendet wird. Einzelheiten zu ** TOPPERS **, ** TOPPERS-Projekt ** und ** TOPPERS / ASP3 ** finden Sie auf den folgenden Seiten.

・ TOPPERS-Seite  https://www.toppers.jp/ ・ TOPPERS-Projektseite  https://www.toppers.jp/project.html ・ TOPPERS / ASP3-Kernelseite  https://www.toppers.jp/asp3-kernel.html

Vorbereitung zum Ausführen von TOPPERS / ASP3

1. 1. Bereiten wir eine Mikrocomputerplatine vor

Auch dieses Mal wird ** TOPPERS / ASP3 ** mit einer Mikrocomputerplatine namens ** NUCLEO-F401RE ** betrieben, die von ** ST Microelectronics ** (im Folgenden ** ST Micro **) veröffentlicht wurde. https://www.st.com/ja/evaluation-tools/nucleo-f401re.html

** NUCLEO-F401RE ** ist eine Karte, die den Cortex-M4-Kernmikrocomputer von ARM verwendet. Wenn Sie den Fragebogen am ST Micro-Stand auf einer Ausstellung für eingebettete Geräte beantworten, können Sie ihn kostenlos erhalten oder in einem Geschäft erwerben, das elektronische Teile wie auf der folgenden Seite gezeigt handhabt. http://akizukidenshi.com/catalog/g/gM-07723/

2. Holen Sie sich die Quelldatei

Die Quelldatei von ** TOPPERS / ASP3 ** finden Sie auf der folgenden Seite. https://www.toppers.jp/asp3-e-download.html#nucleo

TOPPERS / ASP-Kernel werden normalerweise in zwei Teilen bereitgestellt: ** zielunabhängiger Teil ** und ** zielabhängiger Teil **, diesmal jedoch ** nicht zielbezogener Teil für ** NUCLEO-F401RE ** Ein ** einfaches Paket **, das den abhängigen Teil ** und den ** zielabhängigen Teil ** kombiniert, ist in der folgenden ZIP-Datei enthalten.  https://www.toppers.jp/download.cgi/asp3_nucleo_f401re_gcc-20191220.zip

Für ** TOPPERS / ASP3 ** Builds sind außerdem ** Configurator ** und ** TECS Generator ** erforderlich, die ebenfalls im oben genannten ** Simple Package ** enthalten sind.

3. 3. Bereiten wir die Build-Umgebung vor (1)

Wir werden ** TOPPERS / ASP3 ** in einer Linux-Umgebung erstellen, aber dieses Mal werden wir die Umgebung verwenden, die im vorherigen Build ** TOPPERS / ASP ** verwendet wurde. Wenn Sie keine Build-Umgebung für ** TOPPERS / ASP ** haben, lesen Sie bitte die folgende Seite.

Erstellen Sie TOPPERS / ASP und probieren Sie es aus https://qiita.com/Yukiya_Ishioka/items/9ecbe080939600c323c6

4. Bereiten wir die Build-Umgebung vor (2)

Ich dachte, es wäre einfach, ** TOPPERS / ASP3 ** mit der Build-Umgebung ** TOPPERS / ASP ** zu erstellen, aber den ** Konfigurator ** und den ** TECS-Generator ** ** auszuführen. Ich fand, dass ich Ruby ** brauchte. Übrigens fiel mir ein, dass ich es aufgegeben hatte, ** TOPPERS / ASP3 ** zu bauen, weil ich wusste, dass ich Ruby brauchte. Das von mir verwendete ** Ubuntu ** enthält kein ** Ruby **, aber dieses Mal werde ich versuchen, es zu installieren. Selbst wenn Sie es versuchen, können Sie es sofort finden, indem Sie nach "ubuntu", "Ruby", "Install" suchen ... Das durchgeführte Verfahren wird unten beschrieben.

  1. Installation der erforderlichen Pakete  sudo apt-get install rbenv ruby-build

  2. Stellen Sie rbenv in bash zur Verfügung  echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

  3. Überprüfen Sie die installierbare Ruby-Version  rbenv install --list

  • Du musst es nicht tun
  1. Installieren Sie Ruby, indem Sie die Version angeben  rbenv install 2.1.0

Die zu installierende Version von Ruby wurde in ** doc / user.txt ** in der Quelle von ** TOPPERS / ASP3 ** aufgeführt und war "2.0.0", jedoch nicht in der installierbaren Version. Also habe ich "2.1.0" angegeben. Als ich jedoch die Version nach der Installation überprüfte, wurde eine andere Version installiert. Infolgedessen ist der Build von ** TOPPERS / ASP3 ** abgeschlossen, sodass Sie fortfahren können, ohne sich darüber Gedanken machen zu müssen.

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

TOPPERS / ASP Build Vorbereitung

1. 1. Bereitstellen der TOPPERS / ASP-Kernelquelle

Extrahieren Sie die TOPPERS / ASP3-Kernel-Quelldatei ** asp3_nucleo_f401re_gcc-20191220.zip ** in ein beliebiges Verzeichnis.

unzip asp3_nucleo_f401re_gcc-20191220.zip

Nach dem Erweitern wird ein ** asp3_3.5 ** -Verzeichnis erstellt, und die Verzeichnisstruktur darunter sieht wie folgt aus.

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

2. Erstellen eines Verzeichnisses zum Erstellen von Anwendungen

Gehen Sie zurück zum Verzeichnis eine Ebene über dem Verzeichnis ** asp3_3.5 ** und erstellen Sie ein Anwendungsverzeichnis und ein Anwendungserstellungsverzeichnis. Hier ist es ** appli **, aber Sie können ihm einen beliebigen Verzeichnisnamen geben.

cd ..
mdir -p appli/obj
├─ asp3_3.5
│   ├─arch
│   :
│
└─ appli ← Anwendungsverzeichnis
└─ obj ← Anwendungserstellungsverzeichnis

3. 3. Kopie der Beispielanwendung

Kopieren Sie den in ** TOPPERS / ASP3 ** enthaltenen Beispielanwendungsquellcode in das Verzeichnis ** appli **. Sie müssen es nicht kopieren, wenn Sie nur den Vorgang überprüfen möchten, aber Sie können den Vorgang sehen, während Sie ihn ändern, und er wird die Basis des Benutzerprogramms sein. Kopieren Sie ihn also.

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

4. TOPPERS / ASP3-Kernelkonfiguration

Gehen Sie dann zum Verzeichnis ** appli / obj ** und konfigurieren Sie den Kernel. Die Optionen des Befehls configure haben folgende Bedeutung. -T: Zielauswahl Diesmal ist es für ** NUCLEO-F401RE **, also setze ** nucleo_f401re_gcc **

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

5. Makefile ändern

Ein erfolgreiches appli / obj / Makefile wird generiert, wenn der Kernel erfolgreich konfiguriert wurde. Überprüfen Sie die Definition in Zeile 51 des generierten Makefiles.

TARGET = nucleo_f401re_gcc

Fügen Sie in Zeile 435 ** $ (OBJNAME) .bin ** hinzu, damit die vom Build generierte Codedatei die Binärdatei enthält.

    430 #
    431 #Fehlerprüfung
    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 

Um die Pfadspezifikation des Beispielanwendungsprogramms zu ändern, ändern Sie den Inhalt der APPLDIRS-Definition in Zeile 181 und fügen Sie ihn hinzu, wie durch den Stern unten gezeigt.

    177 #
    178 #Definition des Anwendungsprogramms
    179 #
★  180 APPLNAME = sample1
★  181 #APPLDIRS = $(SRCDIR)/sample
    182 APPLDIRS = ../sample

Ausführung von TOPPERS / ASP-Builds

Führen Sie den Befehl make im Verzeichnis ** appli / obj ** aus. Wenn der Build erfolgreich ist, werden die zur Ausführung von TOPPERS / ASP3 erforderlichen Dateien wie asp.bin generiert.

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

Laufen Sie auf einer Mikrocomputerplatine

1. 1. Schreiben Sie an den Mikrocomputer

Verbinden Sie die NUCLEO-F401RE-Karte über USB mit Ihrem PC. Wenn die Verbindung hergestellt ist, wird sie vom PC als Massenspeicher erkannt, und Sie können Dateien mit dem Explorer kopieren. Kopieren Sie dann die vom Build unter Ubuntu generierte Datei asp.bin über den Explorer auf das NUCLEO-F401RE-Board. Wenn die Kopie fertig ist, ist das Schreiben an die Tafel abgeschlossen.

2. Lauf

Nach der Installation des ST Micro-Treibers wird der USB-Anschluss auf der NUCLEO-F401RE-Karte auch als virtueller COM-Anschluss erkannt. Wenn Sie eine serielle Terminalsoftware wie TeraTerm starten und den COM-Port der NUCLEO-F401RE-Karte mit ** 115200 Bit / s ** verbinden, werden die vom TOPPERS / ASP-Kernel ausgegebenen Protokollinformationen auf der seriellen Terminalsoftware und auf der NUCLEO-F401RE-Karte angezeigt. Sie können sehen, dass der TOPPERS / ASP3-Kernel und die Beispielprogramme funktionieren.

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).   |
           :

Bei Ausführung mit der obigen Operation wird appli / sample / sample1.c als Benutzerprogramm erstellt und ausgeführt. Der Kommentar in sample1.c lautet wie folgt. Wenn Sie Zeichen eingeben, können Sie die Operation überprüfen, die mit dem Zeichencode in der Protokollausgabe übereinstimmt. Sie können auch Ihr eigenes Programm ausführen, indem Sie auf diesen Quellcode verweisen. Probieren Sie es mit Iloilo.

 *  '1' :Schalten Sie die Zielaufgabe auf TASK1 (Grundeinstellung).
 *  '2' :Schalten Sie die Zielaufgabe auf TASK2.
 *  '3' :Schalten Sie die Zielaufgabe auf TASK3.
 *  'a' :Handeln Sie die Zielaufgabe_Beginnen Sie mit tsk.
 *  'A' :Kann die Anforderung für die Zielaufgabe starten_Durch Akt abbrechen.
 *  'e' :Ext zur Zielaufgabe_Rufen Sie tsk an und beenden Sie es.
 *  't' :Zielaufgabe ter_Zwangsbeendigung durch tsk.
 *  '>' :HOHE Priorität der Zielaufgabe_Auf PRIORITÄT setzen.
 *  '=' :MID die Priorität der Zielaufgabe_Auf PRIORITÄT setzen.
 *  '<' :NIEDRIGE Priorität der Zielaufgabe_Auf PRIORITÄT setzen.
 *  'G' :Holen Sie sich die Priorität der Zielaufgabe_Lesen Sie mit pri.
 *  's' :Slp zur Zielaufgabe_Rufen Sie tsk an und warten Sie, bis es aufwacht.
 *  'S' :Tslp für die Zielaufgabe_tsk(10 Sekunden)Wird gerufen und wartet auf das Aufwachen.
 *  'w' :Wup die Zielaufgabe_Steh auf von tsk.
 *  'W' :Kann die Anforderung für die Zielaufgabe wecken_Mit wup abbrechen.
 *  'l' :Erzählen Sie die Zielaufgabe_Das Warten per Wai zwangsweise abbrechen.
 *  'u' :Sus die Zielaufgabe_Von tsk gezwungen zu warten.
 *  'm' :Der erzwungene Wartestatus der Zielaufgabe lautet rsm_Mit tsk loslassen.
 *  'd' :Dly zur Zielaufgabe_tsk(10 Sekunden)Wird gerufen und wartet auf den Lauf der Zeit.
 *  'x' :Ras für die Zielaufgabe_Fordern Sie das Ende per ter an.
 *  'y' :Dis zur Zielaufgabe_Rufen Sie ter an und verbieten Sie die Beendigung von Aufgaben.
 *  'Y' :Ena für die Zielaufgabe_Rufen Sie ter an und lassen Sie die Aufgabe beenden.
 *  'r' :3 Prioritäten (HOCH_PRIORITY,MID_PRIORITY,LOW_PRIORITÄT)
 *Drehen Sie das Dicu.
 *  'c' :Starten Sie den Betrieb des periodischen Handlers.
 *  'C' :Beenden Sie den Betrieb des periodischen Handlers.
 *  'b' :Starten Sie den Vorgang so, dass der Alarmhandler nach 5 Sekunden aktiviert wird.
 *  'B' :Beenden Sie den Betrieb des Alarmhandlers.
 *  'z' :Erzeugt eine CPU-Ausnahme für die Zielaufgabe (diese kann je nach Ziel zurückgegeben werden).
 *  'Z' :Erzeugt eine CPU-Ausnahme für die Zielaufgabe im CPU-Sperrzustand (kann nicht wiederhergestellt werden).
 *  'V' :Mit einer kurzen Schleife dazwischen, fch_Lesen Sie den hochauflösenden Timer zweimal mit hrt.
 *  'v' :Zeigen Sie den ausgegebenen Systemaufruf an (Standard).
 *  'q' :Zeigen Sie den ausgegebenen Systemaufruf nicht an.

Bonus

Das Verhalten der Beispielanwendung sample1.c ist für ** TOPPERS / ASP3 ** dasselbe wie für ** TOPPERS / ASP **, sodass Sie den Unterschied nur für die Meldung beim Start feststellen können. Wenn Sie sich jedoch den Inhalt von sample1.c und sample1.cfg ansehen, sehen Sie, dass es sich um einen ASP3-Kernel handelt, da die Zeit in Mikrosekunden angegeben wird.

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 });

Basierend auf sample1.c können Sie versuchen, Aufgaben zu wechseln und periodische Handler, Alarmhandler usw. durch Ihr eigenes Programm zu ersetzen. Außerdem kann der TOPPERS / ASP-Kernel auf derselben Karte ausgeführt werden, sodass die Unterschiede auf dem tatsächlichen Computer verglichen werden können. Wenn Sie die Umgebung bisher gebaut oder gebaut haben, warum probieren Sie nicht verschiedene Dinge aus?

  • das ist alles -

Recommended Posts

Erstellen Sie TOPPERS / ASP3 und probieren Sie es aus
Erstellen und Ausführen von TOPPERS / ASP (Version 2020-03-10)
Versuchen Sie es mit Tensorflow. ① Erstellen Sie eine Python-Umgebung und führen Sie Tensorflow ein
Lass uns ein Makefile machen und es bauen (super Anfänger)
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Versuchen Sie es mit GUI, PyQt in Python
Probieren Sie Caffe und Pylearn2 zusammen aus
Versuchen Sie es mit pytest-Overview und Samples-
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung