Skip to content

Instantly share code, notes, and snippets.

@anecdata
Created September 14, 2021 22:20
Show Gist options
  • Save anecdata/8406efc94533ec9cf58760cd7f9f2da9 to your computer and use it in GitHub Desktop.
Save anecdata/8406efc94533ec9cf58760cd7f9f2da9 to your computer and use it in GitHub Desktop.
CircuitPython Issue #5305 "minimum" reproducible example #2
import struct
import board
import busio
import microcontroller
import supervisor
import os
import gc
import time
import random
import rtc
from digitalio import DigitalInOut, Direction, Pull
from analogio import AnalogIn
import storage
import terminalio
import displayio
import espidf
import adafruit_adt7410
import adafruit_bme280
import adafruit_bus_device
import adafruit_ds3231
import adafruit_htu21d
import adafruit_lis3dh
import adafruit_ms8607
import adafruit_register
import adafruit_sht4x
import simpleio
import adafruit_ahtx0
import adafruit_bme680
import adafruit_dht
import adafruit_framebuf
import adafruit_htu31d
import adafruit_lps35hw
import adafruit_pcf8523
import adafruit_requests
import adafruit_shtc3
import adafruit_am2320
import adafruit_bmp280
import adafruit_dotstar
import adafruit_ht16k33
import adafruit_mcp9808
import adafruit_pct2075
import adafruit_sgp30
import adafruit_si7021
import adafruit_bh1750
import adafruit_bmp3xx
import adafruit_dps310
import adafruit_hts221
import adafruit_lc709203f
import adafruit_mpu6050
import adafruit_pm25
import adafruit_sht31d
import adafruit_tmp117
def mem():
mem = {}
mem["gc_free"] = gc.mem_free()
mem["idf_total"] = str(espidf.heap_caps_get_total_size())
mem["idf_free"] = str(espidf.heap_caps_get_free_size())
mem["idf_largest"] = str(espidf.heap_caps_get_largest_free_block())
return mem
# print after serial is available
start = time.monotonic_ns()
while not supervisor.runtime.serial_connected:
print(".", end="")
print("-"*49)
print("serial connected in", (time.monotonic_ns() - start) / 1_000_000_000, "seconds")
print("-"*49)
print("Reload...", mem())
print("\nboot_out.txt:")
with open("/boot_out.txt", "r") as f:
line = f.readline()
while line != "":
print(line, end="")
line = f.readline()
previous_traceback = supervisor.get_previous_traceback()
if not previous_traceback:
previous_traceback = repr(previous_traceback) # None
print("\nTraceback:")
print(previous_traceback)
print("\nReset Reason:", microcontroller.cpu.reset_reason)
print("Run Reason:", supervisor.runtime.run_reason)
try:
print("NVM:", len(microcontroller.nvm), microcontroller.nvm[0])
except TypeError as e:
print("NVM:", e)
try:
import alarm
print("Sleep Memory:", len(alarm.sleep_memory), alarm.sleep_memory[0])
except ImportError as e:
print("Sleep Memory:", e)
print("CPU UID:", "".join("%x" % x for x in microcontroller.cpu.uid))
for _ in os.listdir():
# adafruit-circuitpython-bundle-6.x-mpy-20210827
if "-bundle-" in _:
cp_lib_bundle = _
print(cp_lib_bundle)
led = None
try:
led = DigitalInOut(board.LED)
except:
print("LED exception")
if led:
led.switch_to_output(False)
print("-"*49)
print("Storage...", mem())
cirpyname = storage.getmount("/").label
print(cirpyname, os.getcwd(), os.listdir())
print(" ", os.statvfs("/"))
print(" ", os.stat("/"))
print("-"*49)
print("-"*49)
loop = 1
while True:
print(loop, time.monotonic(), mem())
if led:
led.value = not led.value
buf = []
for _ in range(10, 20):
x = bytearray(2 ** _)
buf.append(x)
print(gc.mem_free(), end=" ")
print()
gc.collect()
time.sleep(1)
loop += 1
@anecdata
Copy link
Author

anecdata commented Sep 14, 2021

On the hunch that code bulk can be a contributor, drastically simplified the code, but imported the .py versions of a ton of libraries to stress the compilation to bytecodes/

Issue conditions:

  • ESP32-S2 WROVER-based board
  • a boot.py file is present (can be empty)
  • CP version range as described in the issue
  • libraries in .py format
  • reset from running code or "Press any key"... prompt, NOT from >>> REPL

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment