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.
** 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
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/
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.
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
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.
Installation der erforderlichen Pakete sudo apt-get install rbenv ruby-build
Stellen Sie rbenv in bash zur Verfügung echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
Überprüfen Sie die installierbare Ruby-Version rbenv install --list
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]
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
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
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 .
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
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
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
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.
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.
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?
Recommended Posts