MicroPython多线程递归深度超限问题求助(SX126X LoRa场景)
问题:MicroPython多线程递归深度不足导致LoRa库报错
问题背景
未编写递归代码,但怀疑第三方LoRa库存在过多嵌套函数调用。项目基于SX126X的MicroPython示例开发,将LoRa消息接收逻辑放在第二线程运行(主线程负责用户交互)。主线程运行正常,但第二线程接收消息时触发递归深度超限错误。
错误栈
Traceback (most recent call last): File "sx1262.py", line 275, in _onIRQ File "subprocess.py", line 73, in cb File "sx1262.py", line 187, in recv File "sx1262.py", line 251, in _readData File "sx126x.py", line 483, in startReceive File "sx126x.py", line 540, in startReceiveCommon File "sx126x.py", line 1133, in setPacketParams File "sx126x.py", line 1228, in fixInvertedIQ File "sx126x.py", line 1034, in writeRegister File "sx126x.py", line 1274, in SPIwriteCommand File "sx126x.py", line 1291, in SPItransfer RuntimeError: maximum recursion depth exceeded
递归深度测试情况
- 主线程支持39层递归调用,第二线程仅支持17层
- 报错时实际函数嵌套仅约10层
- 手动触发垃圾回收无效果
硬件及版本信息:
MicroPython v1.19.1-746-gf2de289ef on 2022-12-13; Raspberry Pi Pico W with RP2040
测试代码
# 基于论坛示例修改 import _thread a = 0 fail = False def recursionTest(): global a, fail a += 1 print("loop count="+str(a)) if not fail: try: recursionTest() except Exception as errorMsg: print(errorMsg) fail = True # 主线程测试(已注释) #print("Main thread") #recursionTest() # 第二线程测试 print("Sub thread") _thread.start_new_thread(recursionTest,())
测试输出
Sub thread loop count=1 loop count=2 loop count=3 loop count=4 loop count=5 loop count=6 loop count=7 loop count=8 loop count=9 loop count=10 loop count=11 loop count=12 loop count=13 loop count=14 loop count=15 loop count=16 loop count=17 maximum recursion depth exceeded
求助需求
如何增加第二线程的函数嵌套深度,解决递归深度超限问题?
内容的提问来源于stack exchange,提问作者David P
相关产品推荐
相关产品推荐

