这就跟fputc差不多了。
做互斥在这里做效率太低,重新封装个printf做互斥好很多,比如这样:
[C] 纯文本查看 复制代码 /*
*********************************************************************************************************
* 函 数 名: App_Printf
* 功能说明: 线程安全的printf方式
* 形 参: 同printf的参数。
* 在C中,当无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表
* 返 回 值: 无
*********************************************************************************************************
*/
static void App_Printf(const char *fmt, ...)
{
char buf_str[200 + 1]; /* 特别注意,如果printf的变量较多,注意此局部变量的大小是否够用 */
va_list v_args;
va_start(v_args, fmt);
(void)vsnprintf((char *)&buf_str[0],
(size_t ) sizeof(buf_str),
(char const *) fmt,
v_args);
va_end(v_args);
/* 互斥操作 */
tx_mutex_get(&AppPrintfSemp, TX_WAIT_FOREVER);
printf("%s", buf_str);
tx_mutex_put(&AppPrintfSemp);
} |