/*
* 函数名:信息输出及编译
* 描述 :
* 输入 :无
* 输出 :无
* 调用 :LOG_PRINTF_FLAG 定义则编译及输出
*/
void LogPrintfSmart(char *fmt, ...){
//输出信息
#ifdef LOG_PRINTF_FLAG
char mother_temp[256];
char child_temp[128];
char *pchar = mother_temp;
char c;
uint16_t child_leng = 0;
uint16_t i;
//等待串口发送完毕,避免在发送期间 对发送内容进行修改
while(sUart1Handle.gState != HAL_UART_STATE_READY);
//清空数据内容
memset(mother_temp, 0, strlen(mother_temp));
va_list ap;
va_start(ap,fmt);
//非空字符处理
while((c = *fmt++) != '\0'){
if(c == '%'){
c = *fmt++;
switch(c){
case 'd':
//转字符
sprintf(child_temp,"%d",va_arg(ap, int));
//获取字符长度
child_leng = strlen((char *)(child_temp));
//获取每个字符,并清空临时数组
for(i = 0;i < child_leng;i++){
*pchar++ = child_temp[i];
child_temp[i] = '\0';
}
break;
case 'f':
sprintf(child_temp,"%f",va_arg(ap, double));
child_leng = strlen((char *)(child_temp));
for(i = 0;i < child_leng;i++){
*pchar++ = child_temp[i];
child_temp[i] = '\0';
}
break;
case 'c':
sprintf(child_temp,"%c",va_arg(ap, int));
child_leng = strlen((char *)(child_temp));
for(i = 0;i < child_leng;i++){
*pchar++ = child_temp[i];
child_temp[i] = '\0';
}
break;
case 's':
sprintf(child_temp,"%s",va_arg(ap, char *));
child_leng = strlen((char *)(child_temp));
for(i = 0;i < child_leng;i++){
*pchar++ = child_temp[i];
child_temp[i] = '\0';
}
break;
default:
break;
}
}else{
*pchar++ = c;
}
}
va_end(ap);
HAL_UART_Transmit_IT(&sUart1Handle, (unsigned char *)&mother_temp[0], strlen((char *)&mother_temp[0]));
#endif
}
感觉作用不大