Skip to content
Snippets Groups Projects
  1. Jun 04, 2019
  2. May 15, 2019
  3. Apr 25, 2019
    • Damien George's avatar
      tools/pyboard.py: Don't accumulate output data if data_consumer used. · 56f6ceba
      Damien George authored
      Prior to this patch, when a lot of data was output by a running script
      pyboard.py would try to capture all of this output into the "data"
      variable, which would gradually slow down pyboard.py to the point where it
      would have large CPU and memory usage (on the host) and potentially lose
      data.
      
      This patch fixes this problem by not accumulating the data in the case that
      the data is not needed, which is when "data_consumer" is used.
      56f6ceba
  4. Apr 08, 2019
  5. Mar 26, 2019
  6. Mar 08, 2019
  7. Mar 05, 2019
    • Damien George's avatar
      py/persistentcode: Define static qstr set to reduce size of mpy files. · 4f0931b2
      Damien George authored
      When encoded in the mpy file, if qstr <= QSTR_LAST_STATIC then store two
      bytes: 0, static_qstr_id.  Otherwise encode the qstr as usual (either with
      string data or a reference into the qstr window).
      
      Reduces mpy file size by about 5%.
      4f0931b2
    • Damien George's avatar
      py/persistentcode: Pack qstrs directly in bytecode to reduce mpy size. · 992a6e1d
      Damien George authored
      Instead of emitting two bytes in the bytecode for where the linked qstr
      should be written to, it is now replaced by the actual qstr data, or a
      reference into the qstr window.
      
      Reduces mpy file size by about 10%.
      992a6e1d
    • Damien George's avatar
      py/persistentcode: Add a qstr window to save mpy files more efficiently. · 5996eeb4
      Damien George authored
      This is an implementation of a sliding qstr window used to reduce the
      number of qstrs stored in a .mpy file.  The window size is configured to 32
      entries which takes a fixed 64 bytes (16-bits each) on the C stack when
      loading/saving a .mpy file.  It allows to remember the most recent 32 qstrs
      so they don't need to be stored again in the .mpy file.  The qstr window
      uses a simple least-recently-used mechanism to discard the least recently
      used qstr when the window overflows (similar to dictionary compression).
      This scheme only needs a single pass to save/load the .mpy file.
      
      Reduces mpy file size by about 25% with a window size of 32.
      5996eeb4
    • Damien George's avatar
      py: Replace POP_BLOCK and POP_EXCEPT opcodes with POP_EXCEPT_JUMP. · 5a2599d9
      Damien George authored
      POP_BLOCK and POP_EXCEPT are now the same, and are always followed by a
      JUMP.  So this optimisation reduces code size, and RAM usage of bytecode by
      two bytes for each try-except handler.
      5a2599d9
  8. Dec 29, 2018
    • Dave Hylands's avatar
      tools/pydfu.py: Fix regression so tool runs under Python 2 again. · c9326390
      Dave Hylands authored
      Under python3 (tested with 3.6.7) bytes with a list of integers as an
      argument returns a different result than under python 2.7 (tested with
      2.7.15rc1) which causes pydfu.py to fail when run under 2.7.  Changing
      bytes to bytearray makes pydfu work properly under both Python 2.7 and
      Python 3.6.
      c9326390
  9. Dec 15, 2018
  10. Dec 12, 2018
    • Damien George's avatar
      tools/mpy-tool.py: Fix calc of opcode size for opcodes with map caching. · 814d580a
      Damien George authored
      Following an equivalent fix to py/bc.c.  The reason the incorrect values
      for the opcode constants were not previously causing a bug is because they
      were never being used: these opcodes always have qstr arguments so the part
      of the code that was comparing them would never be reached.
      
      Thanks to @malinah for finding the problem and providing the initial patch.
      814d580a
  11. Nov 27, 2018
    • Damien George's avatar
      tools/pydfu.py: Improve DFU reset, and auto-detect USB transfer size. · 4f25a8b6
      Damien George authored
      A DFU device must be in the idle state before it can be programmed, and
      this requires either clearing the status or aborting, depending on its
      current state.  Code is added to do this.  And the USB transfer size is now
      automatically detected so devices with a size less than 2048 bytes work
      correctly.
      4f25a8b6
  12. Oct 19, 2018
  13. Sep 21, 2018
    • Andrew Leech's avatar
      tools/pydfu: Workaround stdio flush error on Windows with Python 3.6. · a2703649
      Andrew Leech authored
      There appears to be an issue on Windows with CPython >= 3.6,
      sys.stdout.flush() raises an exception:
      
          OSError: [WinError 87] The parameter is incorrect
      
      It works fine to just catch and ignore the error on the flush line.  Tested
      on Windows 10 x64 1803 (Build 17134.228), Python 3.6.4 amd64.
      a2703649
  14. Aug 10, 2018
  15. Aug 04, 2018
  16. Aug 01, 2018
    • Rich Barlow's avatar
      tools/mpy-tool: Set sane initial dynamic qstr pool size with frozen mods · 6e5a40cf
      Rich Barlow authored
      The first dynamic qstr pool is double the size of the 'alloc' field of
      the last const qstr pool. The built in const qstr pool
      (mp_qstr_const_pool) has a hardcoded alloc size of 10, meaning that the
      first dynamic pool is allocated space for 20 entries. The alloc size
      must be less than or equal to the actual number of qstrs in the pool
      (the 'len' field) to ensure that the first dynamically created qstr
      triggers the creation of a new pool.
      
      When modules are frozen a second const pool is created (generally
      mp_qstr_frozen_const_pool) and linked to the built in pool. However,
      this second const pool had its 'alloc' field set to the number of qstrs
      in the pool. When freezing a large quantity of modules this can result
      in thousands of qstrs being in the pool. This means that the first
      dynamically created qstr results in a massive allocation. This commit
      sets the alloc size of the frozen qstr pool to 10 or less (if the number
      of qstrs in the pool is less than 10). The result of this is that the
      allocation behaviour when a dynamic qstr is created is identical with an
      without frozen code.
      
      Note that there is the potential for a slight memory inefficiency if the
      frozen modules have less than 10 qstrs, as the first few dynamic
      allocations will have quite a large overhead, but the geometric growth
      soon deals with this.
      6e5a40cf
  17. Jul 27, 2018
  18. Jul 20, 2018
  19. Jul 09, 2018
  20. Jun 22, 2018
  21. Jun 08, 2018
  22. May 18, 2018
  23. Apr 23, 2018
  24. Dec 15, 2017
  25. Dec 14, 2017
  26. Dec 13, 2017
Loading