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).
Créez un projet vide.

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".

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

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

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

Dans le cas du PSoC4, le port LED est "P1 [6]".
Construisez le projet ici.
En construisant, le code lié à la sortie LED définie précédemment sera automatiquement généré.
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);
    }
}
Construisez et écrivez sur la carte en sélectionnant [Déboguer] - [Programme]. Ce n'est pas grave si le voyant de la carte clignote.
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).
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.
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é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
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 
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();
    }
}
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