Ein bisschen mehr RISC-V

Ich programmiere Mikrocontroller. Und ich schreibe nicht nur Programme für sie, sondern hauptsächlich Programme für Programmierer. Und ich wollte ein wenig Freude an dem verdienten mk teilen. Plötzlich leidet jemand unter gd32vfxx.



MK-Programm am unterschiedlichsten. Dies sind die bekannten Stm-, Gitter-, Mikrochip-, Nuvoton-, Altera- usw. und exotischen Dinge wie Azoteq, Siliziumwerke oder Freescale einiger 2003er Veröffentlichungen. Alle (fast alle) entwickeln ihr eigenes Protokoll, einzigartig, das niemand sonst hat und das das Beste ist. Obwohl es unter dem Motto des Universalen gehalten wird. Und all diese universellen Protokolle erfreuen sich an ihrer Vielfalt. Wenn es hier eine Übertreibung gibt, ist es ziemlich viel.



Aber dieser kürzlich erschienene Artikel hat mich dazu veranlasst, hier zu schreiben... Beispiele für verschiedene gd32-Familien kamen gerade zu mir und nachdem ich Programme zum Programmieren aller unteren Familien geschrieben hatte, blies ich über die RISC-V-Familie. Und ich habe diesen Artikel gesehen. Nun, ich dachte, wenn jemand daran interessiert ist, das Datenblatt erneut zu erzählen, dann könnte auch das Datenblatt der Programmierprogrammierung interessant sein.



Jüngere Familien werden über JTAG und SWD programmiert (mit geringfügigen Ausnahmen, bei denen beispielsweise nur SWD.gd32f130xx vorhanden ist). gd32vf hingegen hat nur JTAG. Aber JTAG oder SWD ist nur ein Werkzeug. Das Fahren mit diesen Werkzeugen erfolgt auf sehr unterschiedliche Weise. Wenn Sie die ARM Debug Interface Architecture-Spezifikation zu gd32f lesen können und dort alles ziemlich klar beschrieben ist, wird gd32vf in der externen RISC-V-Debug-Unterstützung und im RISC-V-Befehlssatzhandbuch verschmiert. Und diese beiden Werke können nicht mit einem halben Tritt gemeistert werden. Letzteres hat auch einen Untertitel Band II. Das alarmierte. Es gibt also auch ein Schwein mit den Nummern 1 und möglicherweise den Nummern 3 und 4.



Laut RISC-V External Debug Support kann der Zugriff auf die Register auf zwei Arten erfolgen:



  1. Verwenden des abstrakten Befehls
  2. Programmpuffer verwenden


Zum Gedächtnis drei:



  1. Verwenden des Systembuszugriffs (fehlt in GD32VF)
  2. Programmpuffer verwenden
  3. Verwenden des abstrakten Speicherzugriffs


Da der GD32VF keinen Systembuszugriff hat (die Bits "Systembuszugriffe werden unterstützt" im sbcs-Register) und es keine Freude macht, dort einen Programmpuffer zu verwenden und Assembler zu schreiben, gibt es eine sehr gute Möglichkeit, mit Befehlen auszukommen. Anfangs war es für mich völlig unverständlich, woher diese verdammt klugen Kerle die Nummer des Registers (Nummer des Registers, auf das zugegriffen werden soll) bekommen. Die Beschreibung des Wertes regno lautet stolz: Nummer des Registers, auf das zugegriffen werden soll, wie in Tabelle 3.3 beschrieben.



Bild



Aber wo genau. Aber dann fand ich sie im nebenstehenden Datenblatt (The RISC-V Instruction Set Manual. Volume 2) und die Sonne schien.



Also hat alles geklappt. Alles erwies sich als bequemer als das von gd32f. Unter dem Gesichtspunkt, Code hinein zu gießen. Das war aber nur der Anfang. Jetzt musste ich einen Monitor dafür schreiben. Um es noch schneller als schnell zu machen. IAR ließ mich meine WORKBENCH nicht von ihm herunterladen, obwohl er mit Macht und Kraft damit prahlte. Ich habe immer noch keinen Ort zum Klicken und Herunterladen gefunden. Der Chief Chinese Manager, der die Proben gesendet hat, sagte, dass sie NucleiStudio verwenden, und ich habe es heruntergeladen und installiert. Es schien mir, dass das Unbequemste, was ich benutzte, der Rocker war. Ich verstehe nicht, wie die Bastarde der Vergangenheit Wasser darin trugen und dann trocken gingen. Ich war bis auf den Kopf nass. Aber NucleiStudio hat den Rocker übertroffen. Im Allgemeinen gelang es mir nach viel Qual, die Daten und Funktionen an die richtigen Stellen im Speicher zu verschieben. Ich bin sicher, Sie können es eleganter machen, aber ich war nicht genug.



Es sieht aus wie das.



Wir müssen das Original-Skript finden (ich habe es irgendwo im Darm dieser Sonnenfinsternis gefunden, ob es falsch war), das eine Reihe unverständlicher Kritzeleien enthält, und dort eine Beschreibung der erforderlichen Adressen hinzufügen



  . = 0x20000000;
  .data_sect : { *(.data_sect) }
  . = 0x20000400;
  .a_sect : { *(.a_sect) }
  . = 0x20000500;
  .f_sect : { *(.f_sect) }


Wie viel IARs * .icf-Datei sieht jedoch viel klarer und einfacher aus! Aber das ist Gewohnheitssache, denke ich. Als ich nach dieser unglücklichen Datei suchte, versicherte mir Google immer wieder, dass es nichts Mächtigeres, Stärkeres, Cooleres und Flexibleres als ein Link-Skript gibt. Vielleicht, aber ich bin erschöpft. Wie auch immer. Geschaufelt.



Jetzt muss ich nur noch den PC neu anordnen und alles wird mit einer schrecklichen Geschwindigkeit funktionieren. Aber der Monitor funktionierte immer noch nicht. Und jetzt der Absatz, für den ich das alles angefangen habe. Das wird zukünftigen RISC-V-Miracle-Forschern helfen.



Da ist er.



Um den PC neu anzuordnen, müssen Sie nur seinen Wert in das dpc-Register schreiben, und zu Beginn von hart wird der Wert auf den PC kopiert. Bis zu diesem Zeitpunkt hat das Programm bereits eine Reihe anderer Register geschrieben und gelesen. Mit großem Erfolg muss ich zugeben. Und der Monitor funktioniert nicht. Wie sich herausstellte, müssen Sie zum Schreiben in dpc dort schreiben und dann von dort lesen. Warum das so ist, weiß ich nicht. Ich las die gesamte Dokumentation noch einmal und "verfolgte das Schicksal der Helden mit Aufregung". Aber ich habe nie herausgefunden, warum das so ist.



Danach hat alles funktioniert. Die einzige Unannehmlichkeit, etwas aus dem Gedächtnis zu lesen, besteht darin, hart anzuhalten und es dann erneut zu starten. Es ist nicht sehr praktisch, aber nicht beängstigend. Um beispielsweise herauszufinden, wie sich der Monitor dort anfühlt und ob er nicht mehr funktioniert, müssen Sie hart stoppen, den erforderlichen Speicher lesen und gegebenenfalls erneut starten.



Ich hoffe, dass der Absatz auf dpc jemandem ein paar Stunden Zeit spart und es möglich sein wird, all diese Zeit nicht zu sparen.



All Articles