Определение макроса для изменения ошибки функции печати из-за разницы аргументов

Я пытаюсь использовать единую среду тестирования с платой NRF51822, но для того, чтобы увидеть результат от Unity, мне нужно перенаправить маршрут / канал так, чтобы он был виден на моем coumputer. Я использую SEGGER RTT для печати в моем изображении, и в идеале я использую то же самое для вывода unity.c.

По единству

По умолчанию Unity печатает свои результаты в stdout как это работает. Это прекрасно работает в большинстве ситуаций, когда для тестирования вы используете собственный компилятор. Он работает на некоторых симуляторах, если они stdout перенаправлен обратно в командную строку. Однако бывают случаи, когда в симуляторе не будет поддержки вывода результатов или вы захотите направить результаты в другое место по другим причинам. В этих случаях вы должны определить UNITY_OUTPUT_CHAR макро. Этот макрос принимает один символ за раз (как int, так как это тип параметра стандарта C putchar функция чаще всего используется). Вы можете заменить это любым вызовом функции, который вам нравится.

* 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 или, если есть более подходящая альтернатива, что это?

0 ответов

Другие вопросы по тегам