So fügen Sie MicroPython ein C-Modul hinzu ...

Lassen Sie uns vorerst eine einfache Funktion implementieren.

Alles kann mit Micropython ausgeführt werden, sodass es nicht erforderlich ist, es in C zu implementieren. Minimale Bestätigung für den Fall, dass Sie in Zukunft etwas in C implementieren müssen.

Ich konnte die Dokumentation nicht finden und habe den auf git veröffentlichten Micropython-Code befolgt und implementiert, sodass es möglicherweise einen anderen Weg gibt ... (Ich würde es begrüßen, wenn Sie es wissen)

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

Listenoperation

--Erstellen

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);
}
//Wenn das Element, das Sie hinzufügen möchten, ein int-Typ ist
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;
}
//Wenn das Element, das Sie löschen möchten, vom Typ int ist
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;
}

Operation diktieren

--Erstellen

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;
}
//Das Element, das Sie hinzufügen möchten['str Typ': 'str Typ']Im Falle von
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;
}
//Wenn der Schlüssel, den Sie löschen möchten, str-Typ ist
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;
}

Um von MicroPython aus anrufen zu können ...

//Funktion zum Aufrufen
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);

//Als Modul definiert
STATIC const mp_rom_map_elem_t example_module_globals_table[] = {
    //Name beim Import mit Micropython
    {MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_example)}, 
  //Name beim Aufrufen einer Funktion aus 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,
};

Erstellen Sie .C wie oben und fügen Sie es der zu erstellenden Micropython-Quelle hinzu. Aus Mikropython

import example
example.return_str()

Verwenden Sie es so.

Recommended Posts

So fügen Sie MicroPython ein C-Modul hinzu ...
So fügen Sie einen Suchpfad für Python-Module hinzu
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
Fügen Sie MeCab ein Wörterbuch hinzu
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
[C-Sprache] [Linux] Versuchen Sie, einen einfachen Linux-Befehl zu erstellen. * Fügen Sie einfach hinzu! !!
Fügen Sie Ihrem Computer eine GPIO-Karte hinzu. (1)
So fügen Sie ein Paket mit PyCharm hinzu
So fügen Sie der Anaconda-Umgebung ein Python-Modul hinzu
Fügen Sie VSCode eine virtuelle Python-Umgebung hinzu
Fügen Sie einen Befehl hinzu, um ähnliche Dateien zusammen zu markieren
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
So deinstallieren Sie ein mit setup.py installiertes Modul
[Bachstelze] Fügen Sie dem Bachstelzenprojekt eine Anmeldeseite hinzu
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Faltung zu MNIST hinzufügen
Erstellen Sie ein Python-Modul
Erstellt ein Modul zur Überwachung von Datei- und URL-Aktualisierungen
Einführung in EV3 / MicroPython
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
[Einführung in Python] Hochgeschwindigkeits-Einführung in Python für vielbeschäftigte C ++ - Programmierer
Brown Coder hat versucht, den Panasonic Contest 2020A ~ C zu lösen
[Morphologische Analyse] So fügen Sie Mecab ein neues Wörterbuch hinzu
Generieren Sie ein Bash-Skript, um die Einstellungen des Datadog-Monitors hinzuzufügen
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
[Django] Muster zum Hinzufügen verwandter Datensätze nach dem Erstellen eines Datensatzes
Fügen Sie eine Erweiterung hinzu, um eine komfortablere Jupyter-Umgebung zu erstellen
So importieren Sie NoteBook als Modul in Jupyter (IPython)
Fügen Sie nach und nach eine Liste der Funktionen der Numpy-Bibliothek hinzu --c
Fügen Sie Heatrapy eine Funktion hinzu, die Wärme + Wärme bei Temperatur übertragen kann
Praktische Funktion zum Hinzufügen von Spalten an einer beliebigen Stelle in Pandas DataFrame
Die übliche Art, einen Kernel mit Jupyter Notebook hinzuzufügen
So importieren Sie NoteBook als Modul in Jupyter (IPython)
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben - OpenCV-Port Python zu C ++ -
Ein Weg zum mittleren Python
Eine super Einführung in Linux
So rufen Sie eine Funktion auf
ABC129 A, B, C Kommentar
Seitenzahl zu PDF hinzufügen
Laden Sie eine Datei in Dropbox hoch
Senden Sie ein Signal an den Unterprozess
Wie man ein Terminal hackt
Versuchen Sie, eine Sprache auszuwählen
Fügen Sie MeCab ein Benutzerwörterbuch hinzu
[Python] So fügen Sie einer Tabelle Zeilen und Spalten hinzu (pandas DataFrame)
[C-Sprache] So erstellen, vermeiden und erstellen Sie einen Zombie-Prozess
Hören wir auf zu kopieren. Wir stellen vor: flati, ein Modul, das sich mit Python abflacht
Übergeben Sie die Liste von Python an C ++ als Referenz in pybind11