You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:27:53