MicroPython Github MicroPython Github.MicroPython을 사용하여 시스템 파일없이 파이썬 파일로드 및 컴파일
MicroPython에서 아주 간단한 코드를 실행하고 Python에서 C 함수를 성공적으로 호출했으며 그 반대로 내 코드를 사용했습니다. 그러나 Windows에서만 작동합니다 (Visual Studio IDE).
이제이 코드를 Crossworks IDE를 사용하여 Cortext M4 칩에로드하려고합니다. Visual Studio에서 코드를 복사하여 크로스 웍스에 붙여 넣으려고 할 때 종속성을 파악하고 헤더 파일을 생성하는 작업이 필요했습니다.
printf와 같은 기본 기능에서만 작동하지만 내 기능 호출은 무시합니다. 그 이유는 내 파이썬 파일을 찾으려고하지만 찾을 수 없기 때문입니다. 여기
내가로드하고 파이썬 코드를 컴파일 할 수있는 코드입니다 :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);
}
을 그리고 여기에 파이썬 컴파일의 출력 호출하는 기능입니다 :
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);
}
}