Определение макроса для изменения ошибки функции печати из-за разницы аргументов
Я пытаюсь использовать единую среду тестирования с платой NRF51822, но для того, чтобы увидеть результат от Unity, мне нужно перенаправить маршрут / канал так, чтобы он был виден на моем coumputer. Я использую SEGGER RTT для печати в моем изображении, и в идеале я использую то же самое для вывода unity.c.
По единству
По умолчанию Unity печатает свои результаты в
stdout
как это работает. Это прекрасно работает в большинстве ситуаций, когда для тестирования вы используете собственный компилятор. Он работает на некоторых симуляторах, если ониstdout
перенаправлен обратно в командную строку. Однако бывают случаи, когда в симуляторе не будет поддержки вывода результатов или вы захотите направить результаты в другое место по другим причинам. В этих случаях вы должны определитьUNITY_OUTPUT_CHAR
макро. Этот макрос принимает один символ за раз (какint
, так как это тип параметра стандарта Cputchar
функция чаще всего используется). Вы можете заменить это любым вызовом функции, который вам нравится.* Output* - by default, Unity prints to standard out with putchar. define UNITY_OUTPUT_CHAR(a) with a different function if
желательно
/*-------------------------------------------------------
* Output Method: stdout (DEFAULT)
*-------------------------------------------------------*/
#ifndef UNITY_OUTPUT_CHAR
/* Default to using putchar, which is defined in stdio.h */
#include <stdio.h>
#define UNITY_OUTPUT_CHAR(a) (void)putchar(a)
#else
/* If defined as something else, make sure we declare it here so it's ready for use */
#ifndef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION
extern void UNITY_OUTPUT_CHAR(int);
#endif
#endif
Я пытался определить
#define UNITY_OUTPUT_CHAR(a) SEGGER_RTT_WriteString(0, a)
Однако я получаю следующее
> $ 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_test
Как мне определить макрос так, чтобы я мог отправить вывод в segger или, если есть более подходящая альтернатива, что это?