Ausführen von .Net Micro Framework 4.4 unter STM32F4Discovery


.Net Micro Framework ist eine Technologie, mit der Sie Anwendungen für Mikrocontroller mit der vollen Leistung von verwaltetem Code und Visual Studio schreiben können. Sie existiert seit langer Zeit und erlebt jetzt eine Wiedergeburt. Um dieses herum wurde ein Open-Source-Projekt gebildet, das kürzlich zu GitHub gewechselt ist. Dies ist jedoch noch kein "Boxed" -Produkt. Die Arbeit mit .Net Micro Framework erfordert bestimmte Fähigkeiten. Das letzte Mal habe ich darüber geschrieben, wie man eine einfache "Hello World" -Anwendung auf dem Emulator für Windows erstellt und ausführt. Jetzt werden wir darüber sprechen, wie man mit .Net Micro Framework auf der realen Hardware - STM32F4Discovery Debug Board - arbeitet.

Die Gebühr ist durchaus üblich und kann beispielsweise hier erworben werden . Ab Version 4.4 ist der Port für diese Karte in der netmf-Interpreter- Distribution enthalten . Zuvor existierte es als separates Projekt .

Im Internet und insbesondere auf dem Hub finden Sie auf dieser Karte Materialien zum Starten des .Net Micro Framework. Zum einen geht es jedoch um Version 4.3, zum anderen wird bereits die fertige Assembly verwendet. Ich werde ausführlich über das Kompilieren und Ausführen von STM32F4Discovery .Net Micro Framework Version 4.4 sprechen. Der Artikel wird lang sein, da mehrere Fehler im Distributionskit behoben und mehrere Dienstprogramme und Treiber heruntergeladen und installiert werden müssen.

Zusammenstellungsvorbereitung



Verteilung


Zunächst müssen Sie die Distribution selbst haben.

Das Repository ist hier . Sie können es als Zip-Archiv herunterladen oder mit git herunterladen. Anweisungen in englischer Sprache zum Abrufen des Repositorys und zum Sammeln von Installationsdateien finden Sie hier . Basierend auf diesen Anweisungen wurde ein Artikel geschrieben. Die Versionen des Repositorys, die bestimmten Releases zugeordnet sind, können hier aus den Zip-Archiven heruntergeladen werden .

Um das Repository mit git abzurufen, müssen Sie folgende Schritte ausführen:
  1. Erstellen Sie eine öffentliche Kopie Ihres Kontos auf GitHub-Servern mit Fork . Alle Pull- Anfragen müssen aus dem öffentlichen GitHub-Repository stammen.
  2. , clone. , :
    git clone github.com/<your GitHub ID>/netmf-interpreter.git
    : . , D:\NETMF\repo, repo — . .
  3. , Upstream. pull pull. Upstream :
    git remote add upstream https://github.com/NETMF/netmf-interpreter.git


Wichtig : Anforderungen für den lokalen Pfad (es muss mindestens ein übergeordneter Ordner vorhanden sein - siehe Abschnitt 2 der Arbeit mit git) sind auch beim Entpacken des Repositorys aus dem Archiv relevant.

Leider enthält die Version von .NET Micro Framework v4.4 Release To Web (RTW) Fehler, mit denen Sie Installationsdateien nicht sofort aus dem Repository erfassen können. Diese Fehler können jedoch korrigiert werden, und dann werde ich Ihnen sagen, wie es geht.
Nachdem das Repository auf die eine oder andere Weise in einen lokalen Ordner kopiert wurde, müssen Sie folgende Schritte ausführen:

  1. Laden Sie die Zip-Datei für binäre Tools herunter . Diese Datei enthält die Dienstprogramme, die zum Erstellen von Installationsdateien und „Ports“ für Geräte erforderlich sind. In Zukunft ist geplant, diese Dienstprogramme aufzugeben, aber bisher werden sie benötigt.
  2. binary tools zip- . D:\NETMF\repo, repo — , bin tools D:\NETMF.
  3. :
    <repo folder>\Framework\Tools\BuildTasksInternal\BuildSigner\BuildSignerSpotBuild.csproj
    37
    <HintPath>$(MSBuildProgramFiles32)\Microsoft Internal\Codesign.Submitter\CODESIGN.Submitter.dll</HintPath>

    <HintPath>$(SPOROOT)\tools\x86\CODESIGN\CODESIGN.Submitter.dll</HintPath>

    . . , .Net Micro Framework open source , , , . .NET Micro Framework v4.4 Release To Web (RTW). . .
  4. CMSIS <repo folder>\MSIS. , <repo folder>\MSIS\ReadMe.md.

    CMSIS Cortex Microcontroller Software Interface Standart. Cortex-M, — ARM. “” .

    .Net Micro Framework 4.4 CMSIS 4.3. zip- (CMSIS-SP-00300-r4p3-00rel0.zip). ARM. <repo folder>\MSIS.
  5. .Net Micro Framework Cryptographic Libraries. , . . , , , .

    msi . ( <crypto install folder>), , D:\NETMF\repo D:\NETMF\repo_master.


Die Verteilung ist eine komplexe Struktur mit einer Vielzahl von Querverweisen. Kombiniert all dies mit einem Projekt für MSBuild . Projektdateien sehen aus wie die bekannten sln- und proj-Dateien für Visual Studio, haben jedoch eine komplexere Struktur. Aus diesem Grund schlägt die Verwendung von Visual Studio für die Assembly fehl.

In den folgenden Artikeln werde ich Ihnen mehr über die Komponenten und Beziehungen innerhalb der Distribution erzählen. Jetzt müssen Sie jedoch wissen, dass sich der Port für STM3F4Discovery im Ordner befindet
<repo folder>\Solutions\STM32F4DISCOVERY
und die gesammelten Binär- und Hex-Dateien im Ordner angezeigt werden
<repo folder>\BuildOutput


Visuelles Studio


MSBuild ist Teil von Visual Studio. In der Dokumentation zu .netmf Interpreter 4.4 wird angegeben, dass Visual Studio 2015 Community-, Pro- und Ultimate-Editionen unterstützt werden. Sie müssen daher eine davon installieren, um den Port erfolgreich zu erstellen.

ARM-Compiler


Als nächstes benötigen Sie einen Compiler für ARM . Die Arbeit mit zwei Compilern wird bereitgestellt:


Der RealView-Compiler ist Teil des Keil MDK- Entwicklungstools . Die kostenlose Version hat ein Limit von 32 KB Code, aber der Port hat ein größeres Volumen, sodass Sie auf jeden Fall eine Lizenz benötigen, z. B. eine 7-Tage-MDK-Professional-Testlizenz . Informationen zur Installation von Keil MDK 5 finden Sie hier .
Es sollte standardmäßig im Ordner installiert sein C:\Keil_v5.

GCC ist kostenlos, aber die von ihm generierte Firmware ist 10% größer als die vom RealView-Compiler generierte. GCC ARM Embedded kann als Archiv heruntergeladen und an einen beliebigen Ort entpackt werden. Den Ordner mit dem entpackten Inhalt des Archivs werde ich weiter aufrufen <gcc folder>.

Kompilieren mit ARM RealView-Kompilierungswerkzeugen



Das Distributionskit hat bereits Kompilierungseinstellungen für die Versionen MDK 3.1, 3.80a, 4.12, 4.13, 4.54, 5.04, 5.05 vorgenommen. Wenn Sie eine andere Version verwenden müssen, können Sie der Datei mehrere Zeilen hinzufügen.
<repo folder>\tools\Targets\Microsoft.Spot.system.mdk.targets

Ich habe Version 5.06 verwendet. Dazu nach den Zeilen

<CC      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CC>
<CPP     Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CPP>
<AS      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armasm.exe"</AS>
<LINK    Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armlink.exe"</LINK>
<AR      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\armar.exe"</AR>
<FROMELF Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">"$(MDK_TOOL_PATH)\ARMCC\bin\fromelf.exe"</FROMELF>
 <MdkCrtLibLinkSwitch Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.05'">$(MdkCrtLibLinkSwitch) $(SWTC)libpath $(MDK_TOOL_PATH)\ARMCC\LIB</MdkCrtLibLinkSwitch>


Ich habe die Zeilen hinzugefügt

<CC      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CC>
<CPP     Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CPP>
<AS      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armasm.exe"</AS>
<LINK    Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armlink.exe"</LINK>
<AR      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\armar.exe"</AR>
<FROMELF Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">"$(MDK_TOOL_PATH)\ARMCC\bin\fromelf.exe"</FROMELF>
<MdkCrtLibLinkSwitch Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.06'">$(MdkCrtLibLinkSwitch) $(SWTC)libpath $(MDK_TOOL_PATH)\ARMCC\LIB</MdkCrtLibLinkSwitch>


Jetzt können Sie mit dem Kompilieren beginnen. Sie müssen die Befehlszeile öffnen und zum Ordner mit dem Repository wechseln, zum Beispiel wie folgt:
cd /d D:\WORKDIR\NetMf\NetMFRepo\repo

Dann müssen Sie die Umgebungsvariablen wie folgt festlegen:
setenv_mdk 5.06



Gehen Sie dann zu dem Ordner mit dem Port ( <repo folder>\Solutions\STM32F4DISCOVERY). Zum Beispiel wie
cd /d D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY

folgt : Jetzt können Sie die Kompilierung beispielsweise mit dem folgenden Befehl starten :

msbuild dotnetmf.proj /p:flavor=release /fl

where

msbuild- Aufruf zum Starten des Assembly

dotnetmf.proj- Port - Projekts für STM32F4DISCOVERY

/p:flavor=release- Assemblytyp (debug / release / rtm)

/fl- Schreiben des Assemblyprotokolls in eine Datei.

Die Protokolldatei befindet sich im aktuellen Ordner (im Beispiel dies D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY). Wenn das Protokoll nicht benötigt wird, /flkönnen Sie es entfernen.

Um alle Kompilierungsoptionen anzuzeigen, müssen Sie ausgeführt werden. Die
msbuild /t:help



Kompilierung dauert lange und dauert 10 Minuten:


Das Ergebnis sind viele Dateien, aus denen Sie Folgendes benötigen:
<repo folder>\BuildOutput\THUMB2FP\MDK5.06\le\FLASH\release\STM32F4DISCOVERY\bin\Tinybooter.hex\
<repo folder>\BuildOutput\THUMB2FP\MDK5.06\le\FLASH\release\STM32F4DISCOVERY\bin\tinyclr.hex\ER_CONFIG
<repo folder>\BuildOutput\THUMB2FP\MDK5.06\le\FLASH\release\STM32F4DISCOVERY\bin\tinyclr.hex\ER_FLASH


Für einen sauberen Build müssen Sie vor dem Ausführen eines Befehls
msbuild dotnetmf.proj /p:flavor=release /fl
den Befehl ausführen
msbuild /t:clean
oder den Ordner löschen
<repo folder>\BuildOutput



Kompilieren mit GCC ARM Embedded



Die Verwendung von GCC erfordert möglicherweise eine weitere Überarbeitung. In der Datei: Sie müssen
<repo folder>\Solutions\STM32F4DISCOVERY\STM32F4DISCOVERY.settings
nach der Zeile
<NO_BOOTLOADER_COMPRESSION>true</NO_BOOTLOADER_COMPRESSION>
hinzufügen .
<PLATFORM_EMULATED_FLOATINGPOINT Condition="'$(COMPILER_TOOL)'=='GCC'">true</PLATFORM_EMULATED_FLOATINGPOINT>
Dies behebt den Fehler "NNNN.a verwendet VFP-Registerargumente" . Lesen Sie hier mehr .
Dieser Fehler tritt jedoch möglicherweise nicht auf, wenn Sie einen "sauberen" Build verwenden.

Für einen sauberen Build müssen Sie vor dem Ausführen des Befehls den Befehl ausführen oder den Ordner löschen. Um den Port zu erfassen, öffnen Sie die Befehlszeile und wechseln Sie zum Ordner mit dem Repository, beispielsweise wie folgt: Anschließend müssen Sie Umgebungsvariablen festlegen, indem
msbuild dotnetmf.proj /p:flavor=release /fl
Sie Folgendes ausführen : Wo befindet sich die gcc-Version? Der Pfad, in dem sich GCC ARM befindet Eingebettet Der Befehl sieht möglicherweise folgendermaßen aus:
msbuild /t:clean

<repo folder>\BuildOutput




cd /d D:\WORKDIR\NetMf\NetMFRepo\repo


setenv_gcc <gcc ver> <gcc folder>

<gcc ver>
<gcc folder>


setenv_gcc 4.9.3 D:\WORKDIR\NetMf\gcc_4_9_3



Gehen Sie dann zu dem Ordner mit dem Port ( <repo folder>\Solutions\STM32F4DISCOVERY). Beispiel: Die

cd /d D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY

Kompilierung kann beispielsweise mit dem folgenden Befehl gestartet werden:

msbuild dotnetmf.proj /p:flavor=release /fl

where
  • msbuild - Rufen Sie an, um die Montage zu starten
  • dotnetmf.proj - Portdesign für STM32F4DISCOVERY
  • /p:flavor=release - Build-Typ (Debug / Release / RTM)
  • /fl - Schreiben Sie das Assembly-Protokoll in eine Datei.


Die Protokolldatei befindet sich im aktuellen Ordner (im Beispiel dies D:\WORKDIR\NetMf\NetMFRepo\repo\Solutions\STM32F4DISCOVERY). Wenn das Protokoll nicht benötigt wird, /flkönnen Sie es entfernen.

Um alle Kompilierungsoptionen anzuzeigen, müssen Sie dies tun. Die
msbuild /t:help



Kompilierung dauert lange und dauert 10 Minuten:


Das Ergebnis sind viele Dateien, aus denen Sie Folgendes benötigen:
<repo folder>\BuildOutput\THUMB2FP\GCC4.9\le\FLASH\release\STM32F4DISCOVERY\bin\Tinybooter.hex
<repo folder>\BuildOutput\THUMB2FP\GCC4.9\le\FLASH\release\STM32F4DISCOVERY\bin\tinyclr.hex\ER_CONFIG
<repo folder>\BuildOutput\THUMB2FP\GCC4.9\le\FLASH\release\STM32F4DISCOVERY\bin\tinyclr.hex\ER_FLASH


Board-Firmware



Somit gibt es 3 Dateien :
Tinybooter.hex, ER_CONFIG ER_FLASH.

TinybooterIst ein Bootloader. Sie werden für die CLR-Firmware verwendet. ER_CONFIGund ER_FLASHdas ist die CLR selbst.

Um das Board zu flashen, benötigen wir zusätzliche Software:
  1. STM32 ST-LINK Utility - ein Programmierer zum Flashen von TinyBooter.
  2. Installierte MicroFraimworkSDK.MSI und NetMFVS14.vsix - die erste enthält die erforderlichen Bibliotheken und Dienstprogramme, die zweite - Vorlagenprojekte .Net Micro Fraimwork für Visual Studio.
  3. USB-Treiber erforderlich, damit Dienstprogramme von MicroFraimworkSDK die Karte sehen können (für Windows 10 nicht erforderlich).


Gehen Sie wie folgt vor, um die Karte zu flashen:

  1. Verbinden Sie die Karte über ein Mini-USB-Kabel mit dem Computer:


  2. Starten Sie das STM32 ST-LINK-Dienstprogramm und wählen Sie das Menü Ziel-> Verbinden:


    Nach dem Verbinden mit der STM32- Karte sieht das ST-LINK-Dienstprogramm ungefähr so aus:


  3. Target->Erase Sectors...:


    Select All Apply:


    flash :


    STM32 ST-LINK Utility :


  4. TinyBooter.hex Target-> Program & Verify...:


    tinybooter.hex Start:


    STM32 ST-LINK Utility :


  5. miniUsb Reset

  6. microUSB :


    STM32 ST-LINK Utility . miniUsb .
  7. Windows 10 , USB :

  8. .NET Micro Framework Deployment Tool.
    MicroFrameworkSDK:
    C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.4\Tools\MFDeploy.exe

    Serial USB:


    . TinyBooter Ping. Pinigng… TinyBooter



  9. .NET Micro Framework Deployment Tool 2 ER_CONFIG ER_FLASH. Browse…


    Deploy:


    Ping CLR :


    , .


Visual Studio



Jetzt können Sie das Projekt in Visual Studio erstellen und ausführen. Lassen Sie uns ein einfaches blinkendes Projekt erstellen, bei dem die LEDs blinken.

Wir starten Visual Studio und erstellen ein neues Projekt:


Wenn das SDK und vsix korrekt installiert wurden, wird eine neue Micro Framework-Projektvorlage angezeigt. Konsolenanwendung auswählen:


Nach dem Erstellen der Lösung können Sie zu den Projekteigenschaften wechseln: Wählen Sie


in den Projekteinstellungen auf der Registerkarte .NET Micro Framework im Feld Transport die Option USB aus. Danach sollte der Name der Karte im Feld Gerät angezeigt werden:


Speichern und schließen Sie die Einstellungen.

Fügen Sie als Nächstes der Assembly Refrence hinzu unter:
C:\Program Files (x86)\Microsoft .NET Micro Framework\v4.4\Assemblies\le\Microsoft.SPOT.Hardware.dll



Der letzte Schritt besteht darin, den Code durch Folgendes zu ersetzen program.cs:

using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;

namespace STM32F4DISC_Test
{
    public class Program
    {
        public static void Main()
        {
            OutputPort ledGreen = new OutputPort((Cpu.Pin)60, false);
            OutputPort ledYellow = new OutputPort((Cpu.Pin)61, false);
            OutputPort ledRed = new OutputPort((Cpu.Pin)62, false);
            OutputPort ledBlue = new OutputPort((Cpu.Pin)63, false);

            while (true)
            {
                ledGreen.Write(true);
                Thread.Sleep(500);
                ledYellow.Write(true);
                Thread.Sleep(500);
                ledRed.Write(true);
                Thread.Sleep(500);
                ledBlue.Write(true);
                Thread.Sleep(500);
                ledGreen.Write(false);
                ledYellow.Write(false);
                ledRed.Write(false);
                ledBlue.Write(false);
                Thread.Sleep(500);
            }
        }
    }
}


Wir starten das Projekt:


Und nach einigen Sekunden beginnen die LEDs auf der Platine zu blinken.

Fazit



.NET Micro Fraimwork ist ein ziemlich kompliziertes Projekt. Derzeit sind noch bestimmte Fähigkeiten und Kenntnisse erforderlich, insbesondere bei der Arbeit mit dem Repository. In diesem Artikel habe ich so ausführlich wie möglich darüber gesprochen, was Sie beim Kompilieren von Ports tun müssen, da diese Informationen bei der Entwicklung von Lösungen für Ihre eigenen Boards hilfreich sind.
Das Ausführen von .NET Micro Fraimwork auf STM32F4Discovery kann jedoch einfacher und schneller sein, indem vorgefertigte Dateien Tinybooter.hex, ER_CONFIG und ER_FLASH verwendet werden. Sie können sie hier herunterladen .

Source: https://habr.com/ru/post/de387333/


All Articles