Damien George
5 years ago
2 changed files with 54 additions and 0 deletions
@ -0,0 +1,14 @@ |
|||
# Location of top-level MicroPython directory
|
|||
MPY_DIR = ../../.. |
|||
|
|||
# Name of module
|
|||
MOD = features0 |
|||
|
|||
# Source files (.c or .py)
|
|||
SRC = features0.c |
|||
|
|||
# Architecture to build for (x86, x64, armv7m, xtensa, xtensawin)
|
|||
ARCH = x64 |
|||
|
|||
# Include to get the rules for compiling and linking the module
|
|||
include $(MPY_DIR)/py/dynruntime.mk |
@ -0,0 +1,40 @@ |
|||
/* This example demonstrates the following features in a native module:
|
|||
- defining a simple function exposed to Python |
|||
- defining a local, helper C function |
|||
- getting and creating integer objects |
|||
*/ |
|||
|
|||
// Include the header file to get access to the MicroPython API
|
|||
#include "py/dynruntime.h" |
|||
|
|||
// Helper function to compute factorial
|
|||
STATIC mp_int_t factorial_helper(mp_int_t x) { |
|||
if (x == 0) { |
|||
return 1; |
|||
} |
|||
return x * factorial_helper(x - 1); |
|||
} |
|||
|
|||
// This is the function which will be called from Python, as factorial(x)
|
|||
STATIC mp_obj_t factorial(mp_obj_t x_obj) { |
|||
// Extract the integer from the MicroPython input object
|
|||
mp_int_t x = mp_obj_get_int(x_obj); |
|||
// Calculate the factorial
|
|||
mp_int_t result = factorial_helper(x); |
|||
// Convert the result to a MicroPython integer object and return it
|
|||
return mp_obj_new_int(result); |
|||
} |
|||
// Define a Python reference to the function above
|
|||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(factorial_obj, factorial); |
|||
|
|||
// This is the entry point and is called when the module is imported
|
|||
mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *args) { |
|||
// This must be first, it sets up the globals dict and other things
|
|||
MP_DYNRUNTIME_INIT_ENTRY |
|||
|
|||
// Make the function available in the module's namespace
|
|||
mp_store_global(MP_QSTR_factorial, MP_OBJ_FROM_PTR(&factorial_obj)); |
|||
|
|||
// This must be last, it restores the globals dict
|
|||
MP_DYNRUNTIME_INIT_EXIT |
|||
} |
Loading…
Reference in new issue