在FreeRTOS上将printf转换为USB-CDC

问题描述

我正在运行FreeRTOS的STM32 Cortex M4上工作。 我尝试将printf重定向到USB CDC输出,但是看来我的实现不是线程安全的。 printf('test')打印循环

ettttt
tttetttttttst
ttetettttttettttttettttttt
ttttttttttttt
t
tttttttttetttttttstttt
tettttttttttttt
t
tttttttetttetttttttett
ttttettttttetettetttt
ttttttttt
ttetetttt
t
ttt

我使用以下putchar原型

PUTCHAR_PROTOTYPE {
    CDC_Transmit_FS((uint8_t*)&ch,1);
    return ch;
}

另外,我使用printf-stdarg.c,至少我以为这样做。但是当我改变

int printf(const char *format,...)
{
        va_list args;
        va_start( args,format );
        return print( 0,format,args );
}

为空的实现

int printf(const char *format,...)
{
        return 0;
}

它仍然像以前一样打印到控制台。因此,似乎实际上并未使用printf-stdarg.c中的实现。 我的想法是在print调用周围加上互斥锁。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)