Exécutez mruby / c sur PSoC 5

Cet article présente la procédure d'exécution de la version α de mruby / c avec le kit de prototypage PSoC 5 (CY8CKIT-059).

Le kit de prototypage PSoC4 (CY8CKIT-049) peut être utilisé dans la même procédure.

mruby / c est une implémentation de mruby qui nécessite moins de ressources à l'exécution. Il est supposé fonctionner à 64 Ko ou moins. Actuellement, la version α est en cours de distribution.

Pour plus d'informations sur l'obtention de la version mruby / c α, voir [Mruby / c Initiatives](http: //www.s) du Shimane Software Development Center (ITOC). -Veuillez voir itoc.jp/news/10).

Les choses nécessaires

Flux global

  1. Créez un projet de programme C simple
  2. Ajoutez mruby / c à 1 projet
  3. Compilez le programme mruby et intégrez-le dans 2.

Création de projet

Créez un projet vide.

img01.png

Si "CY8CKIT-059" n'apparaît pas dans "Matériel cible", sélectionnez "CY8C5888LTI-LP097" dans "Appareil cible".

Pour PSoC4, ce sera "CY8CKIT-049" ou "CY8C4247AZI-M485".

Sur l'écran suivant, sélectionnez "Schéma vide". Ensuite, entrez le nom du projet et ainsi de suite. Ici, le nom du projet est "mrubyc_sample".

img02.png

Faire clignoter la LED

Ajoutez la broche de sortie numérique au schéma de circuit.

img03.png

Double-cliquez sur cette épingle pour la définir.

img04.png

--Définissez "Nom" sur "LED" --Décochez "Connexion matérielle"

Réglez la broche

Ouvrez le fichier .cydwr et réglez le port LED sur "P2 [1]".

img05.png

Dans le cas du PSoC4, le port LED est "P1 [6]".

Construire

Construisez le projet ici.

En construisant, le code lié à la sortie LED définie précédemment sera automatiquement généré.

Créer un programme C

Créez la fonction principale de main.c comme suit.

fonction principale


int main()
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        /* Place your application code here. */
        LED_Write(1);
        CyDelay(200);
        LED_Write(0);
        CyDelay(200);
    }
}

Courir

Construisez et écrivez sur la carte en sélectionnant [Déboguer] - [Programme]. Ce n'est pas grave si le voyant de la carte clignote.


Copiez le fichier mruby / c

Tous les fichiers suivants (xxx.c et xxx.h) du dossier src obtenu en décompressant la version mruby / c α sont copiés dans le dossier du projet PSoC Creator (le dossier contenant main.c).

Ajouter des fichiers à votre projet

Sélectionnez [Projet] - [Élément existant ...] pour ajouter le fichier de version mruby / c α (xxx.c). Vous pouvez sélectionner plusieurs fichiers et les ajouter à la fois.

Ajouter une méthode

Rendez la fonction LED_Write et la fonction CyDelay utilisées dans le programme C disponibles auprès de mruby. Ajoutez chaque méthode à la classe Object.

Ouvrez le fichier class.c et ajoutez ou modifiez ce qui suit.

Fichier d'en-tête à ajouter


#include "LED.h"
#include "CyLib.h"

Fonction à ajouter


mrb_value c_led(struct VM *vm, mrb_value v)
{
  LED_Write( v.value.i );
  return v;
}

mrb_value c_delay(struct VM *vm, mrb_value v)
{
  CyDelay(v.value.i);
  return v;
}

mrb_init_class_Réécrire la fonction objet


static void mrb_init_class_object(void)
{
  // Class
  static_class_object = mrb_class_alloc("Object", -1);
  // Methods
  mrb_define_method(static_class_object, "led", c_led);
  mrb_define_method(static_class_object, "delay", c_delay);
}

La fonction mrb_define_method de la fonction mrb_init_class_object associe la fonction C à la méthode mrubi.


Créer un programme mruby

Créez le programme mruby suivant en tant que sample.rb. La LED clignote à un moment différent de celui du programme créé en C.

sample.rb


led 1
delay 100
led 0
delay 900

Compiler avec mrbc

Compilez sample.rb avec mruby (version OSS) pour créer sample.c. Copiez sample.c dans le même dossier que main.c dans le projet PSoC.

  mrbc -E -Bary sample.rb 

Réécrivez main.c et appelez le programme mruby depuis C

Ajoutez ce qui suit à main.c.

Ajouter un fichier d'en-tête


#include "vm.h" 
#include "load.h" 
#include "errorcode.h" 
#include "static.h" 
#include "sample.c"

Ajoutez la fonction mrubyc.

fonction mrubyc


int mrubyc(void)
{
  struct VM *vm;

  init_static();

  vm = vm_open();
  if( vm == 0 ){
    printf("VM open Error\n");
    return -1;
  }

  int ret = loca_mrb_array(vm, ary);
  if( ret != NO_ERROR ){
    printf("MRB Load Error (%04x_%04x)\n", ret>>16, ret&0xffff);
    return -1;
  }

  vm_boot( vm );

  int keep_execute = 1;
  while( keep_execute ){
    if( vm_run_step(vm) < 0 ){
      keep_execute = 0;
    }
  }

  vm_close( vm );

  return 0;
}

fonction principale


int main()
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    for(;;)
    {
        /* Place your application code here. */
        mrubyc();
    }
}

Construire et exécuter

Construisez et écrivez sur la carte en sélectionnant [Déboguer] - [Programme]. Ce n'est pas grave si le voyant de la carte clignote.


Cela a été une explication un peu longue, mais maintenant vous pouvez exécuter la version mruby / c α sur PSoC5.

Recommended Posts

Exécutez mruby / c sur PSoC 5
Exécuter des binaires C sur AWS Lambda
Exécutez STS4 sur Mac
Exécuter le traitement sur Ant
Exécutez tiscamera sur Ubuntu 18.04
Exécutez openvpn sur Docker (Windows)
Exécutez l'applet java sur ubuntu
Exécutez l'application Java EE sur CICS
Exécutez l'exemple SSE (Server-Sent-Event) sur le docker
Étapes pour exécuter Docker sur Mac
Exécutez puppeteer-core sur Heroku (édition Docker)
Exécutez l'AWS CLI sur Docker
Pour exécuter JavaFX sur Docker
Exécuter PureScript sur un conteneur Docker
Exécutez le script shell de tomcat sur java8
Essayez facilement C # 9 (.NET 5) sur Docker