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

使用system调用BlueNRG-X_Flasher_Launcher.exe始终返回0如何解决

临时解决方案(基于现有system调用实现,无需重构调用逻辑)

方案1:输出重定向+关键字匹配

  • 调用BlueNRG-X_Flasher_Launcher.exe时,在命令末尾追加输出重定向规则,将标准输出、标准错误全部写入临时日志文件,示例命令格式:
    BlueNRG-X_Flasher_Launcher.exe [你的原有烧录参数] > bluenrg_burn_log.txt 2>&1
    
  • system调用返回后,读取临时日志文件内容,匹配预定义的关键字判断结果:
    • 先匹配失败特征串:手动模拟断连、参数错误等失败场景,收集工具输出的固定错误标识(如No device detected、Programming failed、Connection error等),命中任意一个即可判定为烧录失败
    • 再匹配成功特征串:比如Programming completed、Verify success等官方输出的成功标识,命中才算最终成功
  • 判定完成后删除临时日志文件即可,不残留冗余文件

方案2:批处理脚本中转,统一返回码格式

如果不想改动C端原有读取返回值的逻辑,可以写一层批处理脚本做中转,C直接调用批处理脚本即可拿到正确返回值:

  1. 新建bluenrg_flash_wrapper.bat,写入以下逻辑:
@echo off
setlocal enabledelayedexpansion
:: 接收所有传入参数调用烧录工具,输出写入系统临时目录的日志文件
BlueNRG-X_Flasher_Launcher.exe %* > %temp%\bluenrg_burn_temp.log 2>&1
:: 匹配错误关键词,命中返回1
findstr /i /c:"No device" /c:"Program failed" /c:"Connection error" "%temp%\bluenrg_burn_temp.log" > nul
if %errorlevel% equ 0 (
    del "%temp%\bluenrg_burn_temp.log"
    exit /b 1
)
:: 匹配成功关键词,命中返回0
findstr /i /c:"Program completed" /c:"Verify success" "%temp%\bluenrg_burn_temp.log" > nul
if %errorlevel% equ 0 (
    del "%temp%\bluenrg_burn_temp.log"
    exit /b 0
)
:: 未匹配到任何特征的异常场景返回2
del "%temp%\bluenrg_burn_temp.log"
exit /b 2
  1. C++端将原有system调用的命令从直接调用exe改为调用bat,参数保持不变,即可像ST-LINK_CLI一样直接通过system的返回值判断烧录结果。

注意事项

  • 特征串需要你根据自己使用的v4.1.0版本工具实际输出做调整,手动遍历所有可能的失败场景收集完整关键词,避免误判
  • 后续切换到CreateProcess方案时,可以通过匿名管道直接捕获工具输出,不需要写入临时文件,执行效率更高

内容的提问来源于stack exchange,提问作者TheThirdFriend

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:00:04