gpt4 book ai didi

python - 使用 MicroPython 加载和编译没有系统文件的 python 文件

转载 作者:行者123 更新时间:2023-11-30 16:41:35 26 4
gpt4 key购买 nike

MicroPython Github我正在使用的。

我想在 MicroPython 上运行一些非常简单的代码,并且我已经成功地从 Python 调用了 C 函数,反之亦然但是,它仅适用于 Windows(Visual Studio IDE)。

现在,我想使用 Crossworks IDE 将此代码加载到 Cortext M4 芯片上。当我尝试将代码从 Visual Studio 复制并粘贴到 crossworks 时,需要花费一些时间来找出依赖项并生成头文件。

它仅适用于 printf 等基本函数,但会忽略我的函数调用。原因是它尝试查找我的 Python 文件但找不到。

这是我必须加载和编译 Python 代码的代码:

void compile_pyfile(const char* fileName) {
//load and compile python src file
mp_lexer_t *lex = mp_lexer_new_from_file(fileName);
mp_parse_tree_t pt = mp_parse(lex, MP_PARSE_FILE_INPUT);
mp_obj_t module_fun = mp_compile(&pt, lex->source_name, MP_EMIT_OPT_NONE, false);
mp_call_function_0(module_fun);
}

这是调用 Python 编译输出的函数:

mp_obj_t call_py_func3(mp_obj_t* arr) {
const char* fileName = "Hello.py";
const char* funcName = "ret = test_array_C(*args)";
nlr_buf_t nlr;
if (nlr_push(&nlr) == 0) {
qstr inArrName = qstr_from_str("args");
mp_store_global(inArrName, *arr);
compile_pyfile(fileName);
exec_cmd(funcName);
nlr_pop();
return 0;
} else {
// uncaught exception
return (mp_obj_t)nlr.ret_val;
}
}

我不确定这里需要做什么才能使其在没有系统文件的情况下工作。下面是来自 Github 的 micropython-master 中提供的类似代码。这是一个字符串而不是文件。

void do_str(const char *src, mp_parse_input_kind_t input_kind) {
nlr_buf_t nlr;
if (nlr_push(&nlr) == 0) {
mp_lexer_t *lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, src, strlen(src), 0);
qstr source_name = lex->source_name;
mp_parse_tree_t parse_tree = mp_parse(lex, input_kind);
mp_obj_t module_fun = mp_compile(&parse_tree, source_name, MP_EMIT_OPT_NONE, true);
mp_call_function_0(module_fun);
nlr_pop();
} else {
// uncaught exception
mp_obj_print_exception(&mp_plat_print, (mp_obj_t)nlr.ret_val);
}
}

最佳答案

为了让 MicroPython 调用 C 函数,需要向解释器注册它们。我这里有一个古老的例子:https://github.com/dhylands/micropython/commit/b801dbd39eb323494f946c13362f4957f5d7281b这将创建一个名为 c_sample 的模块。

如果您查看 mpconfigport.h 文件的更改,您将在其中将 &mp_module_c_sample 添加到 MICROPY_PORT_BUILTIN_MODULES这就是 import c_sample 起作用的原因。

如果没有文件系统,您还可以将 python 源文件和预编译字节码 (.mpy) 文件作为卡住文件包含在内,并且可以使用这些文件。 teensey 端口没有文件系统并使用此技术。

关于python - 使用 MicroPython 加载和编译没有系统文件的 python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com