Un peu plus de RISC-V

Je fais de la programmation de microcontrôleur. Et non seulement j'écris des programmes pour eux, mais surtout des programmes pour les programmeurs. Et je voulais partager un peu de joie du mk gagné. Soudain, quelqu'un est maintenant tourmenté par gd32vfxx.



MK programme le plus différent. Ce sont les fameux stm, treillis, micropuce, nuvoton, altera, etc. et des choses exotiques comme l'azoteq, les travaux de silicium ou le freescale d'une version 2003. Tous (enfin, presque tous) développent leur propre protocole, unique, que personne d'autre n'a et c'est le meilleur. Bien qu'il se déroule sous le slogan de l'universel. Et tout cet ensemble de protocoles universels plaît par sa diversité. S'il y a une exagération ici, c'est pas mal.



Mais cet article récent m'a incité à écrire ici... Des échantillons pour différentes familles gd32 viennent de me parvenir et, ayant écrit des programmes pour programmer toutes les familles inférieures, j'ai soufflé sur la famille RISC-V. Et j'ai vu cet article. Eh bien, j'ai pensé, si quelqu'un est intéressé par la relecture de la fiche technique, alors la fiche technique de programmation de programmation peut également être intéressante.



Les familles plus jeunes sont programmées via JTAG et SWD (à quelques exceptions près, où il n'y a que SWD.gd32f130xx, par exemple). gd32vf, d'autre part, n'a que JTAG. Mais JTAG ou SWD n'est qu'un outil. La conduite avec ces outils se déroule de manière très différente. Si vous pouvez lire la spécification d'architecture d'interface de débogage ARM à propos de gd32f et que tout y est assez clairement décrit, alors à propos de gd32vf est maculé dans le support de débogage externe RISC-V et le manuel du jeu d'instructions RISC-V. Et ces deux œuvres ne peuvent être maîtrisées d'un demi-coup de pied. Ce dernier possède également un sous-titre Volume II. Cela a alarmé. Donc, il y a aussi un cochon avec le numéro 1 et éventuellement les numéros 3 et 4.



Selon le support de débogage externe RISC-V, l'accès aux registres peut se faire de deux manières:



  1. Utilisation de la commande abstraite
  2. Utilisation du tampon de programme


Pour la mémoire trois:



  1. Utilisation de l'accès au bus système (absent de GD32VF)
  2. Utilisation du tampon de programme
  3. Utilisation de l'accès à la mémoire abstraite


Étant donné que le GD32VF n'a pas d'accès au bus système (les bits «les accès au bus système sont pris en charge» dans le registre sbcs), et qu'il n'y a aucune joie à utiliser un tampon de programme et à écrire l'assembleur là-bas, il existe un très bon moyen de s'en sortir avec les commandes. Au début, c'était complètement incompréhensible pour moi où ces foutus mecs malins obtiennent le numéro du registre (Numéro du registre auquel accéder). La description de la valeur regno dit fièrement: Numéro du registre auquel accéder, comme décrit dans le tableau 3.3.



image



Mais où exactement. Mais ensuite, je les ai trouvés dans la fiche technique à proximité mentionnée ci-dessus (Le manuel d'instructions RISC-V. Volume 2) et le soleil a brillé.



Donc tout a fonctionné. Tout s'est vraiment avéré plus pratique que celui de gd32f. Du point de vue d'y verser du code. Mais c'était seulement le début. Maintenant, j'avais besoin d'écrire un moniteur pour cela. Pour le rendre encore plus rapide que rapide. IAR ne m'a pas laissé télécharger mon WORKBENCH de lui, bien qu'il s'en vantait avec force et force. Je n'ai toujours pas trouvé d'endroit où cliquer et télécharger. Le directeur chinois en chef qui a envoyé les échantillons a déclaré qu'ils utilisaient NucleiStudio et je l'ai téléchargé et installé. Il m'a semblé que la chose la plus gênante que j'utilisais était le rocker. Je ne comprends pas comment les bâtards du passé y transportaient de l’eau et se mettaient ensuite à sec. J'étais mouillé jusqu'au sommet de ma tête. Mais NucleiStudio a surpassé le rocker. En général, après beaucoup de tourments, j'ai réussi à pousser les données et à fonctionner aux bons endroits de la mémoire. Je suis sûr que vous pouvez le faire plus gracieusement, mais je n'ai pas été suffisant.



Ça ressemble à ça.



Nous devons trouver le script original (je l'ai trouvé quelque part dans les entrailles de cette éclipse, s'il était faux), qui contient un tas de gribouillis incompréhensibles et y ajouter une description des adresses nécessaires



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


Pourtant, combien le fichier * .icf de l'IAR semble beaucoup plus clair et plus simple! Mais c'est une question d'habitude, je suppose. Quand je cherchais ce fichier malheureux, Google m'assurait tout le temps qu'il n'y avait rien de plus puissant, plus fort, plus cool et plus flexible qu'un script de lien. Peut-être, mais je suis épuisé. En tous cas. Pelleté.



Maintenant, j'ai juste besoin de réorganiser le PC et tout fonctionnera à une vitesse terrible. Mais le moniteur ne fonctionnait toujours pas. Et maintenant le paragraphe pour lequel j'ai commencé tout cela. Ce qui aidera les futurs chercheurs RISC-V-Miracle.



Il est la.



Pour réorganiser le PC, il vous suffit d'écrire sa valeur dans le registre dpc, puis au début de hart, la valeur sera copiée sur le PC. Jusqu'à ce point, le programme a déjà écrit et lu un tas d'autres registres. Avec un grand succès, je dois l'admettre. Et le moniteur ne fonctionne pas. En fait, pour écrire dans dpc, vous devez y écrire, puis lire à partir de là. Pourquoi il en est ainsi, je ne sais pas. J'ai relu toute la documentation et «j'ai suivi le sort des héros avec enthousiasme». Mais je n'ai jamais trouvé pourquoi il en était ainsi.



Après cela, tout a fonctionné. Le seul inconvénient de lire quelque chose de mémoire est d'arrêter hart puis de le redémarrer. Ce n'est pas très pratique, mais pas effrayant. Par exemple, pour savoir comment se sent le moniteur et s'il a fini de fonctionner, vous devez arrêter hart, lire la mémoire requise et, si nécessaire, recommencer.



J'espère que le paragraphe sur dpc permettra à quelqu'un de gagner quelques heures de temps et qu'il sera possible de ne rien faire de tout ce temps gagné.



All Articles