Контекст: STM32, newlib nano, G CC -ARM, C / C ++, FreeRTOS
Я бы хотел, чтобы мои утверждения assert печатались в UART. printf работает отлично. Я также могу получить утверждение напечатать сообщение об ошибке в UART, но только если я сделаю отпечаток (stderr, "\ n") перед любым утверждением. Тем не менее, мне нужно сделать это один раз для потока, или первая запись в stderr ничего не делает.
Обратите внимание, что этот первый fprintf ("\ n") на самом деле никогда ничего не печатает и не вызывает _write_r, но любой следующий fprintf делает!
Есть ли у кого-нибудь советы о том, как правильно перехватить эти вызовы, поэтому мне не нужно делать fprintf ("\ n") в каждом новом потоке? У меня есть следующие переопределенные функции newlib nano слабых:
size_t _write(FILE* instance, const char* bp, size_t n)
{
return UARTWrite(gDbgUARTHndl, bp, n);
}
int _write_r(void *reent, int fd, char *ptr, size_t len)
{
return _write((FILE*)fd, ptr, len);
}
void someFunc(void)
{
// If this function is the first called (on a particular thread) it doesn't print the assertion
assert(false);
}
void someOtherFunc(void)
{
// If this function is the first called (on a particular thread) it DOES print the assertion (bot not the first "\n")
fprintf(stderr, "\n");
assert(false);
}
ПРИМЕЧАНИЕ: _write вызывается любым printf или вызывает. _write_r вызывается assert ( через __assert_fun c с вызовом fprintf ).