Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 定义宏以更改参数差异导致的打印函数错误_C_Putchar_Unity Test Framework - Fatal编程技术网

C 定义宏以更改参数差异导致的打印函数错误

C 定义宏以更改参数差异导致的打印函数错误,c,putchar,unity-test-framework,C,Putchar,Unity Test Framework,我正在尝试将unity测试框架与NRF51822板一起使用,但为了查看unity的输出,我需要重新路由它/管道,以便它在我的计算机上可见。我正在使用SEGGER RTT在我的项目中打印,理想情况下,我会将其用于unity.c输出 统一 默认情况下,Unity在运行时将其结果打印到标准输出。这 在大多数情况下,如果您使用的是本机 用于测试的编译器。它在一些模拟器上也可以工作,只要 它们将stdout路由回命令行。有时候,, 但是,如果模拟器缺少对转储结果或 由于其他原因,您可能希望将结果发送到其他

我正在尝试将unity测试框架与NRF51822板一起使用,但为了查看unity的输出,我需要重新路由它/管道,以便它在我的计算机上可见。我正在使用SEGGER RTT在我的项目中打印,理想情况下,我会将其用于unity.c输出

统一

默认情况下,Unity在运行时将其结果打印到标准输出。这 在大多数情况下,如果您使用的是本机 用于测试的编译器。它在一些模拟器上也可以工作,只要 它们将
stdout
路由回命令行。有时候,, 但是,如果模拟器缺少对转储结果或 由于其他原因,您可能希望将结果发送到其他地方。在这些 在这种情况下,您应该定义
UNITY\u OUTPUT\u CHAR
宏。这个宏 每次接受一个字符(作为
int
),因为这是 最常见的标准C
putchar
函数的参数类型 使用)。您可以用您喜欢的任何函数调用替换它

* Output*     - by default, Unity prints to standard out with putchar.  define UNITY_OUTPUT_CHAR(a) with a different function if
渴望的

然而,我得到以下信息

> $ make rm -rf _build echo  Makefile Makefile mkdir _build Compiling
> file: system_nrf51.c Compiling file: main.c
> C:/NXTSNS/nRF5_SDK_11.0.0_89a8197/examples/peripheral/blinky/main.c:31:53:
> error: expected declaration specifiers or '...' before numeric
> constant 
> #define UNITY_OUTPUT_CHAR(a) SEGGER_RTT_WriteString(0, a)
>                                                      ^ C:/NXTSNS/Unittesting/unity/src/unity_internals.h:250:13: note: in
> expansion of macro 'UNITY_OUTPUT_CHAR'  extern void
> UNITY_OUTPUT_CHAR(int);
>              ^ Makefile:150: recipe for target '_build/main.o' failed make: *** [_build/main.o] Error 1
我还尝试了在函数中调用segger并强制转换为char*的方法,如下所示

void print_test(int a){
    SEGGER_RTT_WriteString(0, (char *) a);
}
但不幸的是,当我调用print\u test时,我没有看到任何输出


我应该如何定义宏,以便将输出发送给segger,或者如果有更合适的替代方案,它是什么?

当你说Unity时,是指游戏引擎吗?你确定这是正确的标签吗?此标签用于游戏引擎框架。它看起来一点也不像Unity3D,Unity在C上运行,而不是在C上运行,并且肯定不支持这些编译指令。对不起,我指的是测试框架
> $ make rm -rf _build echo  Makefile Makefile mkdir _build Compiling
> file: system_nrf51.c Compiling file: main.c
> C:/NXTSNS/nRF5_SDK_11.0.0_89a8197/examples/peripheral/blinky/main.c:31:53:
> error: expected declaration specifiers or '...' before numeric
> constant 
> #define UNITY_OUTPUT_CHAR(a) SEGGER_RTT_WriteString(0, a)
>                                                      ^ C:/NXTSNS/Unittesting/unity/src/unity_internals.h:250:13: note: in
> expansion of macro 'UNITY_OUTPUT_CHAR'  extern void
> UNITY_OUTPUT_CHAR(int);
>              ^ Makefile:150: recipe for target '_build/main.o' failed make: *** [_build/main.o] Error 1
void print_test(int a){
    SEGGER_RTT_WriteString(0, (char *) a);
}