Pour ajouter un module C à MicroPython ...

Implémentons une fonction simple pour le moment.

Tout peut être fait avec micropython, il n'est donc pas nécessaire de l'implémenter en C, Confirmation minimale au cas où vous auriez besoin d'implémenter quelque chose en C à l'avenir.

Je n'ai pas pu trouver la documentation et j'ai suivi le code micropython qui est posté sur git et l'ai implémenté, donc il peut y avoir un autre moyen ... (je l'apprécierais si vous le connaissez)

--Retour avec une chaîne comme argument

STATIC mp_obj_t return_str(mp_obj_t str_obj)
{
    const char *str = mp_obj_str_get_str(str_obj);

    return mp_obj_new_str(str, strlen(str));
}

opération de liste

--Créer

STATIC mp_obj_t list_new()
{
    mp_obj_t list_items[] = {
        mp_obj_new_int(123),
        mp_obj_new_float(456.789),
        mp_obj_new_str("hello", 5),
    };

    return mp_obj_new_list(3, list_items);
}
//Lorsque l'élément que vous souhaitez ajouter est de type int
STATIC mp_obj_t list_append(mp_obj_t list_obj, mp_obj_t item_int_obj)
{
    mp_int_t item_obj = mp_obj_get_int(item_int_obj);
    mp_obj_t item = mp_obj_new_int(item_obj);

    mp_obj_list_append(list_obj, item);

    return list_obj;
}
//Lorsque l'élément que vous souhaitez supprimer est de type int
STATIC mp_obj_t list_remove(mp_obj_t list_obj, mp_obj_t item_int_obj)
{
    mp_int_t item_obj = mp_obj_get_int(item_int_obj);
    mp_obj_t item = mp_obj_new_int(item_obj);

    mp_obj_list_remove(list_obj, item);

    return list_obj;
}

opération dict

--Créer

STATIC mp_obj_t dict_new()
{
    mp_obj_t dict_obj = mp_obj_new_dict(3);
    mp_obj_dict_store(dict_obj, mp_obj_new_str("test_key1", 9), mp_obj_new_int(123));
    mp_obj_dict_store(dict_obj, mp_obj_new_str("test_key2", 9), mp_obj_new_float(456.789));
    mp_obj_dict_store(dict_obj, mp_obj_new_str("test_key3", 9), mp_obj_new_str("hello", 5));

    return dict_obj;
}
//L'élément que vous souhaitez ajouter['type de str': 'type de str']dans le cas de
STATIC mp_obj_t dict_store(mp_obj_t dict_obj, mp_obj_t key_str_obj, mp_obj_t value_str_obj)
{
    mp_obj_dict_get_map(dict_obj);
    const char *key = mp_obj_str_get_str(key_str_obj);
    const char *val = mp_obj_str_get_str(value_str_obj);

    mp_obj_dict_store(dict_obj, mp_obj_new_str(key, strlen(key)), mp_obj_new_str(val, strlen(val)));

    return dict_obj;
}
//Lorsque la clé que vous souhaitez supprimer est de type str
STATIC mp_obj_t dict_delete(mp_obj_t dict_obj, mp_obj_t key_str_obj)
{
    mp_obj_dict_get_map(dict_obj);
    const char *del_key = mp_obj_str_get_str(key_str_obj);

    mp_obj_dict_delete(dict_obj, mp_obj_new_str(del_key, strlen(del_key)));

    return dict_obj;
}

Pour pouvoir appeler depuis MicroPython ...

//Fonction à appeler
STATIC mp_obj_t return_str(mp_obj_t str_obj)
{
    const char *str = mp_obj_str_get_str(str_obj);

    return mp_obj_new_str(str, strlen(str));
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(return_str_obj, return_str);

//Défini comme un module
STATIC const mp_rom_map_elem_t example_module_globals_table[] = {
    //Nom lors de l'importation avec micropython
    {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_example)}, 
  //Nom lors de l'appel d'une fonction depuis micropython
    {MP_ROM_QSTR(MP_QSTR_return_str), MP_ROM_PTR(&return_str_obj)},
};

STATIC MP_DEFINE_CONST_DICT(example_module_globals, example_module_globals_table);

const mp_obj_module_t example_cmodule = {
    .base = {&mp_type_module},
    .globals = (mp_obj_dict_t *)&example_module_globals,
};

Créez .C comme ci-dessus et ajoutez-le à la source micropython à construire. De micropython

import example
example.return_str()

Utilisez-le comme ça.

Recommended Posts

Pour ajouter un module C à MicroPython ...
Comment ajouter un chemin de recherche de module Python
Pour ajouter un module à python que vous mettez dans Julialang
Ajouter un dictionnaire à MeCab
Essayez de créer un module Python en langage C
[Langage C] [Linux] Essayez de créer une simple commande Linux * Ajoutez simplement! !!
Ajoutez une carte GPIO à votre ordinateur. (1)
Comment ajouter un package avec PyCharm
Comment ajouter un module python à l'environnement anaconda
Ajouter un environnement virtuel Python à VSCode
Ajouter une commande pour marquer ensemble des fichiers similaires
J'ai essayé d'ajouter un module Python 3 en C
Comment désinstaller un module installé à l'aide de setup.py
[Wagtail] Ajouter une page de connexion au projet Wagtail
J'ai fait un module en langage C qui filtre les images chargées par Python
Ajouter une convolution à MNIST
Créer un module Python
Création d'un module pour surveiller les mises à jour des fichiers et des URL
Introduction à EV3 / MicroPython
J'ai créé un module Python pour traduire les commentaires
[Introduction à python] Introduction rapide à Python pour les programmeurs C ++ occupés
Un codeur brun a tenté de résoudre le concours Panasonic 2020A ~ C
[Analyse morphologique] Comment ajouter un nouveau dictionnaire à Mecab
Générer un script bash pour ajouter les paramètres du moniteur Datadog
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
[Django] Pattern pour ajouter des enregistrements associés après avoir créé un enregistrement
Ajouter une extension pour créer un environnement Jupyter plus confortable
Comment importer NoteBook en tant que module dans Jupyter (IPython)
Ajouter une liste de fonctions de bibliothèque numpy petit à petit --c
Ajoutez une fonction à heatrapy qui peut transférer chaleur + chaleur à température
Fonction pratique pour ajouter des colonnes n'importe où dans Pandas DataFrame
La façon habituelle d'ajouter un noyau avec Jupyter Notebook
Comment importer NoteBook en tant que module dans Jupyter (IPython)
Utilisez un langage de script pour une vie C ++ confortable-OpenCV-Port Python vers C ++ -
Une route vers Python intermédiaire
Une super introduction à Linux
Comment appeler une fonction
ABC129 Commentaire A, B, C
Ajouter un numéro de page au PDF
Télécharger un fichier sur Dropbox
Envoyer un signal au sous-processus
Comment pirater un terminal
Essayez de sélectionner une langue
Ajouter un dictionnaire utilisateur à MeCab
[Python] Comment ajouter des lignes et des colonnes à une table (pandas DataFrame)
[Langage C] Comment créer, éviter et créer un processus zombie
Arrêtons de copier. Présentation de flati, un module qui s'aplatit avec Python
Passer la liste de Python vers C ++ par référence dans pybind11