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));
}
--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;
}
--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;
}
//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