QSTR not found #9840
-
According to https://github.com/jimmo/micropython/blob/framebuf_utils_v2/examples/natmod/framebuf_utils/framebuf_utils.c , I tried to import some modules in a natmod: # include "py/dynruntime.h"
mp_obj_type_t *mp_FileIO_ptr;
mp_obj_t mp_function_FileIO_seek;
mp_obj_t mp_function_FileIO_read;
mp_obj_type_t *mp_font_t_ptr;
#define MP_IMPORT_MODULE(mname) mp_obj_t mp_mod##mname = mp_import_name(MP_QSTR_##mname, mp_const_none, 0);
#define MP_GETATTR(name, attr) mp_obj_t mp_##attr = mp_load_attr(name, MP_QSTR_##attr);
#define MP_GET_BOUND_METHOD(name, attr) mp_obj_t meth_##attr[2]; \
mp_load_method(mp_##name, MP_QSTR_##attr, meth_##attr); \
mp_obj_t mp_##name##_##attr = meth_##attr[0];
mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *args) {
MP_DYNRUNTIME_INIT_ENTRY
MP_IMPORT_MODULE(lvgl)
MP_GETATTR(modlvgl, font_t)
mp_font_t_ptr = MP_OBJ_TO_PTR(mp_font_t);
MP_IMPORT_MODULE(uio)
MP_GETATTR(moduio, FileIO)
mp_FileIO_ptr = MP_OBJ_TO_PTR(mp_FileIO);
MP_GET_BOUND_METHOD(FileIO, seek)
mp_function_FileIO_seek = mp_FileIO_seek;
MP_GET_BOUND_METHOD(FileIO, read)
mp_function_FileIO_read = mp_FileIO_read;
MP_DYNRUNTIME_INIT_EXIT
} but I got many errors, indicating the compiler cannot find qstrs:
|
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
It nearly broke my mind that things went wrong in # include "py/dynruntime.h"
mp_obj_type_t *mp_FileIO_ptr;
mp_obj_t mp_function_FileIO_seek;
mp_obj_t mp_function_FileIO_read;
mp_obj_type_t *mp_font_t_ptr;
#define MP_IMPORT_MODULE(mname) mp_obj_t mp_mod##mname = mp_import_name(MP_QSTR_##mname, mp_const_none, 0);
#define MP_GETATTR(name, attr) mp_obj_t mp_##attr = mp_load_attr(mp_##name, MP_QSTR_##attr);
#define MP_GET_BOUND_METHOD(name, attr) mp_obj_t meth_##attr[2]; \
mp_load_method(mp_##name, MP_QSTR_##attr, meth_##attr); \
mp_obj_t mp_##name##_##attr = meth_##attr[0];
mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *args) {
MP_DYNRUNTIME_INIT_ENTRY
MP_IMPORT_MODULE(lvgl) // MP_QSTR_lvgl
MP_GETATTR(modlvgl, font_t) // MP_QSTR_font_t
mp_font_t_ptr = MP_OBJ_TO_PTR(mp_font_t);
MP_IMPORT_MODULE(uio) // MP_QSTR_uio
MP_GETATTR(moduio, FileIO) // MP_QSTR_FileIO
mp_FileIO_ptr = MP_OBJ_TO_PTR(mp_FileIO);
MP_GET_BOUND_METHOD(FileIO, seek) // MP_QSTR_seek
mp_function_FileIO_seek = mp_FileIO_seek;
MP_GET_BOUND_METHOD(FileIO, read) // MP_QSTR_read
mp_function_FileIO_read = mp_FileIO_read;
MP_DYNRUNTIME_INIT_EXIT
} This piece of code will build successfully because of these comments! Let's see the critical line in m = re.search(r"MP_QSTR_[A-Za-z0-9_]*", line) Yes, no preprocessing, it is just the python script searching for |
Beta Was this translation helpful? Give feedback.
It nearly broke my mind that things went wrong in
mpy_ld.py
!