有没有办法让 IAR CSPY return 执行用户程序定义的错误代码?

Is there a way to let IAR CSPY return an error code defined by executed user program?

我正在使用 IAR EWARM 的 cspybat 运行 使用 Unity 对我的嵌入式代码进行一些单元测试。我希望我的构建服务器有一种简单的方法来确定单元测试是通过还是失败。如果我的单元测试失败,CSPY 是否有办法 return 一个非零错误代码?我曾尝试更改 main() 中的 return 值而不做任何更改。有没有我可以调用的函数来强制对错误进行 returned?

我的 cspybat 批处理文件如下所示:

"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.4\common\bin\cspybat" -f "C:\Work\Sandbox\ST\stmicroeval\_iar_ewarm_project\settings\Project.UnitTest.general.xcl" --backend -f "C:\Work\Sandbox\ST\stmicroeval\_iar_ewarm_project\settings\Project.UnitTest.driver.xcl" 

很遗憾,没有。

我已经通过将 "exit" 替换为打印特定模式以及退出代码的函数来解决此问题。然后,我将对 cspybat 的调用包装到一个脚本中,该脚本 1) 去除额外输出的输出和 2) 以所需的退出代码退出。

现在是 2020 年末,他们仍然没有提供执行此操作的机制。

我们通过包含一个包含以下内容的宏文件解决了这个问题:

execUserExit()
{
__message "program exited with __exit_value = ", __exit_value:%d ;
}

并且在代码中有我们自己的退出变量:

extern "C" int __exit_value=0xff;

我们在调用 exit() 之前设置的(尽管您可以编写自己的 exit() 版本)

这使得调试器总是打印一些东西,即使程序在启动时崩溃也是如此。

然后我们用python包装器解析:

pattern =  "__exit_value =\s([\-|0-9|a-f|A-F|x]*)"
retvalue = int(re.findall(pattern,process.stdout)[0])