summaryrefslogtreecommitdiffstatshomepage
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/mpy-tool.py9
-rwxr-xr-xtools/pyboard.py63
-rwxr-xr-xtools/tinytest-codegen.py2
3 files changed, 50 insertions, 24 deletions
diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py
index 2bb9fc367e..ce373a4f5b 100755
--- a/tools/mpy-tool.py
+++ b/tools/mpy-tool.py
@@ -258,7 +258,10 @@ class RawCode:
# generate bytecode data
print()
print('// frozen bytecode for file %s, scope %s%s' % (self.source_file.str, parent_name, self.simple_name.str))
- print('STATIC const byte bytecode_data_%s[%u] = {' % (self.escaped_name, len(self.bytecode)))
+ print('STATIC ', end='')
+ if not config.MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE:
+ print('const ', end='')
+ print('byte bytecode_data_%s[%u] = {' % (self.escaped_name, len(self.bytecode)))
print(' ', end='')
for i in range(self.ip2):
print(' 0x%02x,' % self.bytecode[i], end='')
@@ -463,8 +466,8 @@ def freeze_mpy(base_qstrs, raw_codes):
print('#include "py/emitglue.h"')
print()
- print('#if MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE')
- print('#error "MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE not supported with frozen mpy files"')
+ print('#if MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE != %u' % config.MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE)
+ print('#error "incompatible MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE"')
print('#endif')
print()
diff --git a/tools/pyboard.py b/tools/pyboard.py
index 925e16bc60..d4ce8b7887 100755
--- a/tools/pyboard.py
+++ b/tools/pyboard.py
@@ -285,43 +285,66 @@ def main():
cmd_parser.add_argument('files', nargs='*', help='input files')
args = cmd_parser.parse_args()
- def execbuffer(buf):
+ # open the connection to the pyboard
+ try:
+ pyb = Pyboard(args.device, args.baudrate, args.user, args.password, args.wait)
+ except PyboardError as er:
+ print(er)
+ sys.exit(1)
+
+ # run any command or file(s)
+ if args.command is not None or len(args.files):
+ # we must enter raw-REPL mode to execute commands
+ # this will do a soft-reset of the board
try:
- pyb = Pyboard(args.device, args.baudrate, args.user, args.password, args.wait)
pyb.enter_raw_repl()
- ret, ret_err = pyb.exec_raw(buf, timeout=None, data_consumer=stdout_write_bytes)
- pyb.exit_raw_repl()
- pyb.close()
except PyboardError as er:
print(er)
sys.exit(1)
- except KeyboardInterrupt:
- sys.exit(1)
- if ret_err:
- stdout_write_bytes(ret_err)
- sys.exit(1)
-
- if args.command is not None:
- execbuffer(args.command.encode('utf-8'))
-
- for filename in args.files:
- with open(filename, 'rb') as f:
- pyfile = f.read()
- execbuffer(pyfile)
+ def execbuffer(buf):
+ try:
+ ret, ret_err = pyb.exec_raw(buf, timeout=None, data_consumer=stdout_write_bytes)
+ except PyboardError as er:
+ print(er)
+ sys.exit(1)
+ except KeyboardInterrupt:
+ sys.exit(1)
+ if ret_err:
+ pyb.exit_raw_repl()
+ pyb.close()
+ stdout_write_bytes(ret_err)
+ sys.exit(1)
+
+ # run the command, if given
+ if args.command is not None:
+ execbuffer(args.command.encode('utf-8'))
+
+ # run any files
+ for filename in args.files:
+ with open(filename, 'rb') as f:
+ pyfile = f.read()
+ execbuffer(pyfile)
+
+ # exiting raw-REPL just drops to friendly-REPL mode
+ pyb.exit_raw_repl()
+
+ # if asked explicitly, or no files given, then follow the output
if args.follow or (args.command is None and len(args.files) == 0):
try:
- pyb = Pyboard(args.device, args.baudrate, args.user, args.password, args.wait)
ret, ret_err = pyb.follow(timeout=None, data_consumer=stdout_write_bytes)
- pyb.close()
except PyboardError as er:
print(er)
sys.exit(1)
except KeyboardInterrupt:
sys.exit(1)
if ret_err:
+ pyb.close()
stdout_write_bytes(ret_err)
sys.exit(1)
+ # close the connection to the pyboard
+ pyb.close()
+
if __name__ == "__main__":
main()
diff --git a/tools/tinytest-codegen.py b/tools/tinytest-codegen.py
index 8e505f21a1..3436d0f456 100755
--- a/tools/tinytest-codegen.py
+++ b/tools/tinytest-codegen.py
@@ -50,7 +50,7 @@ test_dirs = ('basics', 'micropython', 'float', 'extmod', 'inlineasm') # 'import'
exclude_tests = (
'float/float2int_doubleprec.py', # requires double precision floating point to work
'inlineasm/asmfpaddsub.py', 'inlineasm/asmfpcmp.py', 'inlineasm/asmfpldrstr.py', 'inlineasm/asmfpmuldiv.py', 'inlineasm/asmfpsqrt.py',
- 'extmod/ticks_diff.py', 'extmod/time_ms_us.py',
+ 'extmod/ticks_diff.py', 'extmod/time_ms_us.py', 'extmod/uheapq_timeq.py',
'extmod/machine_pinbase.py', 'extmod/machine_pulse.py',
'extmod/vfs_fat_ramdisk.py', 'extmod/vfs_fat_fileio.py', 'extmod/vfs_fat_fsusermount.py', 'extmod/vfs_fat_oldproto.py',
)