Server running, waiting for requests on stdin...

---------------------------ERROR--------------------------

Traceback (most recent call last):
  File "/usr/lib/python3.9/asyncio/streams.py", line 540, in readline

-----------------------END OF ERROR-----------------------
---------------------------ERROR--------------------------

    line = await self.readuntil(sep)
  File "/usr/lib/python3.9/asyncio/streams.py", line 618, in readuntil

-----------------------END OF ERROR-----------------------
---------------------------ERROR--------------------------

    raise exceptions.LimitOverrunError(
asyncio.exceptions.LimitOverrunError: Separator is not found, and chunk exceed the limit

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/dai/esp/v5.5.1/esp-idf/tools/idf.py", line 871, in <module>
    main()
  File "/home/dai/esp/v5.5.1/esp-idf/tools/idf.py", line 761, in main
    cli(argv, prog_name=PROG, complete_var=SHELL_COMPLETE_VAR)
  File "/home/dai/esp/v5.5.1/tools/python_env/idf5.5_py3.9_env/lib/python3.9/site-packages/click/core.py", line 1161, in __call__

-----------------------END OF ERROR-----------------------

最近研究小智ai的项目时,发现项目的IDF的vscode插件 menuconfig无法打开。主要原因是小智的依赖组件过多,导致sdkconfig过大,从而使得menuconfig 配置服务器出现了问题。
报错 LimitOverrunError: Separator is not found, and chunk exceed the limit 表明配置数据超过了缓冲区限制
可以通过增加缓冲区容量来解决这个问题。这是 Python asyncio 的流读取缓冲区限制导致的。

解决方案

修改 ESP-IDF 的 esp-idf/tools/idf_py_actions/tools.py:351 ,增加缓冲区大小即可。

# 找到类似这样的代码:
p = await asyncio.create_subprocess_exec(
    *cmd, 
    env=env_copy, 
    # limit=1024 * 256,  # 默认大小 256k
    limit=1024 * 1024, # 修改这个参数,增大到 1MB
    cwd=self.cwd, 
    stdout=asyncio.subprocess.PIPE,
    stderr=asyncio.subprocess.PIPE)
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐