summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--bare-arm/Makefile2
-rw-r--r--bare-arm/mpconfigport.h4
-rw-r--r--py/builtintables.c4
-rw-r--r--py/modarray.c4
-rw-r--r--py/mpconfig.h11
-rw-r--r--py/obj.c3
-rw-r--r--py/objarray.c4
-rw-r--r--py/runtime.c3
-rw-r--r--stmhal/boards/HYDRABUS/mpconfigboard.h1
-rw-r--r--stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h1
-rw-r--r--stmhal/boards/PYBV10/mpconfigboard.h1
-rw-r--r--stmhal/boards/PYBV3/mpconfigboard.h1
-rw-r--r--stmhal/boards/PYBV4/mpconfigboard.h1
-rw-r--r--stmhal/boards/STM32F4DISC/mpconfigboard.h1
-rw-r--r--stmhal/main.c1
-rw-r--r--stmhal/pyexec.c2
-rw-r--r--tests/misc/recursive_data.py_9
-rw-r--r--unix/input.c2
-rw-r--r--unix/main.c1
19 files changed, 50 insertions, 6 deletions
diff --git a/bare-arm/Makefile b/bare-arm/Makefile
index ed8c00482b..eeaaf423d0 100644
--- a/bare-arm/Makefile
+++ b/bare-arm/Makefile
@@ -22,7 +22,7 @@ else
CFLAGS += -Os -DNDEBUG
endif
-LDFLAGS = -nostdlib -T stm32f405.ld
+LDFLAGS = -nostdlib -T stm32f405.ld -Map=$@.map --cref
LIBS =
SRC_C = \
diff --git a/bare-arm/mpconfigport.h b/bare-arm/mpconfigport.h
index 1587dca57a..8598735480 100644
--- a/bare-arm/mpconfigport.h
+++ b/bare-arm/mpconfigport.h
@@ -12,10 +12,12 @@
#define MICROPY_HELPER_REPL (0)
#define MICROPY_HELPER_LEXER_UNIX (0)
#define MICROPY_ENABLE_SOURCE_LINE (0)
+#define MICROPY_PY_BUILTINS_BYTEARRAY (0)
#define MICROPY_PY_BUILTINS_FROZENSET (0)
#define MICROPY_PY_BUILTINS_SET (0)
#define MICROPY_PY_BUILTINS_SLICE (0)
#define MICROPY_PY_BUILTINS_PROPERTY (0)
+#define MICROPY_PY_ARRAY (0)
#define MICROPY_PY_COLLECTIONS (0)
#define MICROPY_PY_MATH (0)
#define MICROPY_PY_CMATH (0)
@@ -26,6 +28,8 @@
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_NONE)
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE)
+//#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_TERSE)
+
// type definitions for the specific machine
#define BYTES_PER_WORD (4)
diff --git a/py/builtintables.c b/py/builtintables.c
index 8b4df93177..c42cdf89bb 100644
--- a/py/builtintables.c
+++ b/py/builtintables.c
@@ -43,7 +43,9 @@ STATIC const mp_map_elem_t mp_builtin_object_table[] = {
// built-in types
{ MP_OBJ_NEW_QSTR(MP_QSTR_bool), (mp_obj_t)&mp_type_bool },
{ MP_OBJ_NEW_QSTR(MP_QSTR_bytes), (mp_obj_t)&mp_type_bytes },
+#if MICROPY_PY_BUILTINS_BYTEARRAY
{ MP_OBJ_NEW_QSTR(MP_QSTR_bytearray), (mp_obj_t)&mp_type_bytearray },
+#endif
#if MICROPY_PY_BUILTINS_COMPLEX
{ MP_OBJ_NEW_QSTR(MP_QSTR_complex), (mp_obj_t)&mp_type_complex },
#endif
@@ -160,7 +162,9 @@ STATIC const mp_map_elem_t mp_builtin_module_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___main__), (mp_obj_t)&mp_module___main__ },
{ MP_OBJ_NEW_QSTR(MP_QSTR_micropython), (mp_obj_t)&mp_module_micropython },
+#if MICROPY_PY_ARRAY
{ MP_OBJ_NEW_QSTR(MP_QSTR_array), (mp_obj_t)&mp_module_array },
+#endif
#if MICROPY_PY_IO
{ MP_OBJ_NEW_QSTR(MP_QSTR__io), (mp_obj_t)&mp_module_io },
#endif
diff --git a/py/modarray.c b/py/modarray.c
index 3ff567f1d9..c0fe331643 100644
--- a/py/modarray.c
+++ b/py/modarray.c
@@ -30,6 +30,8 @@
#include "obj.h"
#include "builtin.h"
+#if MICROPY_PY_ARRAY
+
STATIC const mp_map_elem_t mp_module_array_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_array) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_array), (mp_obj_t)&mp_type_array },
@@ -51,3 +53,5 @@ const mp_obj_module_t mp_module_array = {
.name = MP_QSTR_array,
.globals = (mp_obj_dict_t*)&mp_module_array_globals,
};
+
+#endif
diff --git a/py/mpconfig.h b/py/mpconfig.h
index 5194ba028a..7ed99ac8e0 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -252,6 +252,10 @@ typedef double mp_float_t;
// Whether str object is proper unicode
#ifndef MICROPY_PY_BUILTINS_STR_UNICODE
#define MICROPY_PY_BUILTINS_STR_UNICODE (0)
+
+// Whether to support bytearray object
+#ifndef MICROPY_PY_BUILTINS_BYTEARRAY
+#define MICROPY_PY_BUILTINS_BYTEARRAY (1)
#endif
// Whether to support set object
@@ -274,6 +278,13 @@ typedef double mp_float_t;
#define MICROPY_PY_BUILTINS_PROPERTY (1)
#endif
+// Whether to provide "array" module. Note that large chunk of the
+// underlying code is shared with "bytearray" builtin type, so to
+// get real savings, it should be disabled too.
+#ifndef MICROPY_PY_ARRAY
+#define MICROPY_PY_ARRAY (1)
+#endif
+
// Whether to provide "collections" module
#ifndef MICROPY_PY_COLLECTIONS
#define MICROPY_PY_COLLECTIONS (1)
diff --git a/py/obj.c b/py/obj.c
index d951abbda8..12d7898428 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -35,6 +35,7 @@
#include "obj.h"
#include "runtime0.h"
#include "runtime.h"
+#include "stackctrl.h"
mp_obj_type_t *mp_obj_get_type(mp_const_obj_t o_in) {
if (MP_OBJ_IS_SMALL_INT(o_in)) {
@@ -59,6 +60,8 @@ void printf_wrapper(void *env, const char *fmt, ...) {
}
void mp_obj_print_helper(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t o_in, mp_print_kind_t kind) {
+ // There can be data structures nested too deep, or just recursive
+ STACK_CHECK();
#if !NDEBUG
if (o_in == NULL) {
print(env, "(nil)");
diff --git a/py/objarray.c b/py/objarray.c
index 05821e8de4..b13df2bdba 100644
--- a/py/objarray.c
+++ b/py/objarray.c
@@ -37,6 +37,8 @@
#include "runtime.h"
#include "binary.h"
+#if MICROPY_PY_ARRAY || MICROPY_PY_BUILTINS_BYTEARRAY
+
typedef struct _mp_obj_array_t {
mp_obj_base_t base;
machine_uint_t typecode : 8;
@@ -310,3 +312,5 @@ STATIC mp_obj_t array_iterator_new(mp_obj_t array_in) {
o->cur = 0;
return o;
}
+
+#endif // MICROPY_PY_ARRAY || MICROPY_PY_BUILTINS_BYTEARRAY
diff --git a/py/runtime.c b/py/runtime.c
index b539984c0b..f08ff9ff40 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -45,6 +45,7 @@
#include "smallint.h"
#include "objgenerator.h"
#include "lexer.h"
+#include "stackctrl.h"
#if 0 // print debugging info
#define DEBUG_PRINT (1)
@@ -69,6 +70,8 @@ const mp_obj_module_t mp_module___main__ = {
};
void mp_init(void) {
+ stack_ctrl_init();
+
// call port specific initialization if any
#ifdef MICROPY_PORT_INIT_FUNC
MICROPY_PORT_INIT_FUNC;
diff --git a/stmhal/boards/HYDRABUS/mpconfigboard.h b/stmhal/boards/HYDRABUS/mpconfigboard.h
index f87a14142e..db49434b5b 100644
--- a/stmhal/boards/HYDRABUS/mpconfigboard.h
+++ b/stmhal/boards/HYDRABUS/mpconfigboard.h
@@ -1,6 +1,7 @@
#define HYDRABUSV10
#define MICROPY_HW_BOARD_NAME "HydraBus1.0"
+#define MICROPY_HW_MCU_NAME "STM32F4"
#define MICROPY_HW_HAS_SWITCH (1)
#define MICROPY_HW_HAS_SDCARD (1)
diff --git a/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h b/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
index 0e40545253..2679aee576 100644
--- a/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
+++ b/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
@@ -1,6 +1,7 @@
#define NETDUINO_PLUS_2
#define MICROPY_HW_BOARD_NAME "NetduinoPlus2"
+#define MICROPY_HW_MCU_NAME "STM32F405RG"
#define MICROPY_HW_HAS_SWITCH (1)
diff --git a/stmhal/boards/PYBV10/mpconfigboard.h b/stmhal/boards/PYBV10/mpconfigboard.h
index 3def531232..4ae6954a7d 100644
--- a/stmhal/boards/PYBV10/mpconfigboard.h
+++ b/stmhal/boards/PYBV10/mpconfigboard.h
@@ -1,6 +1,7 @@
#define PYBV10
#define MICROPY_HW_BOARD_NAME "PYBv1.0"
+#define MICROPY_HW_MCU_NAME "STM32F405RG"
#define MICROPY_HW_HAS_SWITCH (1)
#define MICROPY_HW_HAS_SDCARD (1)
diff --git a/stmhal/boards/PYBV3/mpconfigboard.h b/stmhal/boards/PYBV3/mpconfigboard.h
index ac0d84ca29..43d860a0cc 100644
--- a/stmhal/boards/PYBV3/mpconfigboard.h
+++ b/stmhal/boards/PYBV3/mpconfigboard.h
@@ -1,6 +1,7 @@
#define PYBV3
#define MICROPY_HW_BOARD_NAME "PYBv3"
+#define MICROPY_HW_MCU_NAME "STM32F405RG"
#define MICROPY_HW_HAS_SWITCH (1)
#define MICROPY_HW_HAS_SDCARD (1)
diff --git a/stmhal/boards/PYBV4/mpconfigboard.h b/stmhal/boards/PYBV4/mpconfigboard.h
index 9fedb70136..a278dea9fb 100644
--- a/stmhal/boards/PYBV4/mpconfigboard.h
+++ b/stmhal/boards/PYBV4/mpconfigboard.h
@@ -1,6 +1,7 @@
#define PYBV4
#define MICROPY_HW_BOARD_NAME "PYBv4"
+#define MICROPY_HW_MCU_NAME "STM32F405RG"
#define MICROPY_HW_HAS_SWITCH (1)
#define MICROPY_HW_HAS_SDCARD (1)
diff --git a/stmhal/boards/STM32F4DISC/mpconfigboard.h b/stmhal/boards/STM32F4DISC/mpconfigboard.h
index e6780eacbd..10bbe45188 100644
--- a/stmhal/boards/STM32F4DISC/mpconfigboard.h
+++ b/stmhal/boards/STM32F4DISC/mpconfigboard.h
@@ -1,6 +1,7 @@
#define STM32F4DISC
#define MICROPY_HW_BOARD_NAME "F4DISC"
+#define MICROPY_HW_MCU_NAME "STM32F407"
#define MICROPY_HW_HAS_SWITCH (1)
#define MICROPY_HW_HAS_SDCARD (0)
diff --git a/stmhal/main.c b/stmhal/main.c
index 4e50daba41..9f48fbfd65 100644
--- a/stmhal/main.c
+++ b/stmhal/main.c
@@ -187,7 +187,6 @@ static const char fresh_readme_txt[] =
int main(void) {
// TODO disable JTAG
- stack_ctrl_init();
// Stack limit should be less than real stack size, so we
// had chance to recover from limit hit.
stack_set_limit(&_ram_end - &_heap_end - 512);
diff --git a/stmhal/pyexec.c b/stmhal/pyexec.c
index 45928427e1..baf6ddfb34 100644
--- a/stmhal/pyexec.c
+++ b/stmhal/pyexec.c
@@ -185,7 +185,7 @@ int pyexec_friendly_repl(void) {
#endif
friendly_repl_reset:
- stdout_tx_str("Micro Python " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE "; " MICROPY_HW_BOARD_NAME " with STM32F405RG\r\n");
+ stdout_tx_str("Micro Python " MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE "; " MICROPY_HW_BOARD_NAME " with " MICROPY_HW_MCU_NAME "\r\n");
stdout_tx_str("Type \"help()\" for more information.\r\n");
// to test ctrl-C
diff --git a/tests/misc/recursive_data.py_ b/tests/misc/recursive_data.py_
new file mode 100644
index 0000000000..6a52a3c0e8
--- /dev/null
+++ b/tests/misc/recursive_data.py_
@@ -0,0 +1,9 @@
+# This tests that printing recursive data structure doesn't lead to segfault.
+# Unfortunately, print() so far doesn't support "file "kwarg, so variable-len
+# output of this test cannot be redirected, and this test cannot be validated.
+l = [1, 2, 3, None]
+l[-1] = l
+try:
+ print(l)
+except RuntimeError:
+ print("RuntimeError")
diff --git a/unix/input.c b/unix/input.c
index 4d856f2ff8..19ca649c9f 100644
--- a/unix/input.c
+++ b/unix/input.c
@@ -41,8 +41,6 @@
#include <readline/history.h>
#endif
-#define CTRL_D '\x04'
-
char *prompt(char *p) {
#if MICROPY_USE_READLINE
char *line = readline(p);
diff --git a/unix/main.c b/unix/main.c
index a08661339c..23615aa988 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -265,7 +265,6 @@ void pre_process_options(int argc, char **argv) {
#endif
int main(int argc, char **argv) {
- stack_ctrl_init();
stack_set_limit(32768);
pre_process_options(argc, argv);