2017-09-14 18 views
0

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

답변

0

MicroPython이 C 함수를 호출하려면 인터프리터에 등록해야합니다. 여기에 오래된 예제가 있습니다 : https://github.com/dhylands/micropython/commit/b801dbd39eb323494f946c13362f4957f5d7281b 그러면 c_sample이라는 모듈이 생성됩니다. 당신은 당신이거야 mpconfigport.h 파일에 변경 내용을 보면이 MICROPY_PORT_BUILTIN_MODULES 에 & mp_module_c_sample을 추가 곳

이것은 수입 c_sample이 작업을 수행 할 수 있습니다 것입니다.

파일 시스템이 없으면 고정 된 파일로 포함 된 미리 컴파일 된 바이트 코드 (.mpy) 파일과 파이썬 소스 파일을 사용할 수 있으며 이러한 파일을 사용할 수 있습니다. 십대 포트에는 파일 시스템이없고이 기술을 사용합니다.