מימוש מודול¶
פרק זה מפרט כיצד לממש מודול ליבה ב-MicroPython. מודולים של MicroPython יכולים להיות אחד מהבאים:
מודול מובנה: מודול כללי שהוא חלק ממאגר MicroPython.
מודול משתמש: מודול שימושי עבור הפרויקט הספציפי שלכם שאתם מתחזקים במאגר משלכם או בבסיס קוד פרטי.
מודול דינמי: מודול שניתן לפרוס ולייבא בזמן ריצה אל ההתקן שלכם.
מודול ב-MicroPython יכול להיות ממומש באחד מהמיקומים הבאים:
py/: ספריית ליבה המשקפת פונקציונליות ליבה של CPython.
extmod/: מודול ספציפי ל-CPython או ל-MicroPython המשותף בין מספר ports.
ports/<port>/: מודול ספציפי ל-port.
הערה
פרק זה מתאר מודולים הממומשים ב-py/ או מודולי ליבה. ראו הרחבת MicroPython ב-C לפרטים על מימוש מודול חיצוני. לפרטים על מודולים ספציפיים ל-port, ראו הסבת (porting) MicroPython.
מימוש מודול ליבה¶
כמו CPython, ל-MicroPython יש מודולי ליבה מובנים שניתן לגשת אליהם באמצעות הצהרות import. דוגמה לכך היא מודול gc הנדון בניהול זיכרון.
>>> import gc
>>> gc.enable()
>>>
ל-MicroPython יש כמה מודולי ליבה/סטנדרט מובנים נוספים כגון io, array וכדומה. הוספת מודול ליבה חדש כרוכה במספר שינויים.
ראשית, צרו את קובץ ה-C בספריית py/. בדוגמה זו אנו מוסיפים מודול חדש היפותטי subsystem בקובץ modsubsystem.c:
#include "py/builtin.h"
#include "py/runtime.h"
#if MICROPY_PY_SUBSYSTEM
// info()
static mp_obj_t py_subsystem_info(void) {
return MP_OBJ_NEW_SMALL_INT(42);
}
MP_DEFINE_CONST_FUN_OBJ_0(subsystem_info_obj, py_subsystem_info);
static const mp_rom_map_elem_t mp_module_subsystem_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_subsystem) },
{ MP_ROM_QSTR(MP_QSTR_info), MP_ROM_PTR(&subsystem_info_obj) },
};
static MP_DEFINE_CONST_DICT(mp_module_subsystem_globals, mp_module_subsystem_globals_table);
const mp_obj_module_t mp_module_subsystem = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t *)&mp_module_subsystem_globals,
};
MP_REGISTER_MODULE(MP_QSTR_subsystem, mp_module_subsystem);
#endif
המימוש כולל הגדרה של כל הפונקציות הקשורות למודול ומוסיף את הפונקציות לטבלה הגלובלית של המודול ב-mp_module_subsystem_globals_table. הוא גם יוצר את אובייקט המודול באמצעות mp_module_subsystem. המודול נרשם לאחר מכן במערכת הרחבה יותר באמצעות המאקרו MP_REGISTER_MODULE.
לאחר בניית והרצת ה-MicroPython המעודכן, המודול אמור כעת להיות ניתן לייבוא:
>>> import subsystem
>>> subsystem.info()
42
>>>
פונקציית ה-info() שלנו מחזירה כעת רק מספר יחיד אך ניתן להרחיב אותה לבצע כל דבר. באופן דומה, ניתן להוסיף פונקציות נוספות למודול חדש זה.