summaryrefslogtreecommitdiffstatshomepage
path: root/py/modmicropython.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2017-02-16 18:05:06 +1100
committerDamien George <damien.p.george@gmail.com>2017-03-20 15:20:26 +1100
commit6e74d24f30bca3fb70876b1fb9a6b3a59850b83c (patch)
tree391a713749edac08db0efc45e6ff987b2f437dc0 /py/modmicropython.c
parentbf29fe2e138a30688cfb94ad3859f903f935ced1 (diff)
downloadmicropython-6e74d24f30bca3fb70876b1fb9a6b3a59850b83c.tar.gz
micropython-6e74d24f30bca3fb70876b1fb9a6b3a59850b83c.zip
py: Add micropython.schedule() function and associated runtime code.
Diffstat (limited to 'py/modmicropython.c')
-rw-r--r--py/modmicropython.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/py/modmicropython.c b/py/modmicropython.c
index 675d169cc4..a74e6aa3cb 100644
--- a/py/modmicropython.c
+++ b/py/modmicropython.c
@@ -29,6 +29,7 @@
#include "py/mpstate.h"
#include "py/builtin.h"
#include "py/stackctrl.h"
+#include "py/runtime.h"
#include "py/gc.h"
// Various builtins specific to MicroPython runtime,
@@ -128,6 +129,16 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_micropython_heap_unlock_obj, mp_micropython_
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_alloc_emergency_exception_buf_obj, mp_alloc_emergency_exception_buf);
#endif
+#if MICROPY_ENABLE_SCHEDULER
+STATIC mp_obj_t mp_micropython_schedule(mp_obj_t function, mp_obj_t arg) {
+ if (!mp_sched_schedule(function, arg)) {
+ mp_raise_msg(&mp_type_RuntimeError, "schedule stack full");
+ }
+ return mp_const_none;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(mp_micropython_schedule_obj, mp_micropython_schedule);
+#endif
+
STATIC const mp_rom_map_elem_t mp_module_micropython_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_micropython) },
{ MP_ROM_QSTR(MP_QSTR_const), MP_ROM_PTR(&mp_identity_obj) },
@@ -151,6 +162,9 @@ STATIC const mp_rom_map_elem_t mp_module_micropython_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_heap_lock), MP_ROM_PTR(&mp_micropython_heap_lock_obj) },
{ MP_ROM_QSTR(MP_QSTR_heap_unlock), MP_ROM_PTR(&mp_micropython_heap_unlock_obj) },
#endif
+ #if MICROPY_ENABLE_SCHEDULER
+ { MP_ROM_QSTR(MP_QSTR_schedule), MP_ROM_PTR(&mp_micropython_schedule_obj) },
+ #endif
};
STATIC MP_DEFINE_CONST_DICT(mp_module_micropython_globals, mp_module_micropython_globals_table);