使用举例:
at_conn_hal_err( "%s sim800 gprs module haven't init yet \r\n", __func__);
#define at_conn_hal_err(...) do{HAL_Printf(__VA_ARGS__);HAL_Printf("\r\n");}while(0)
打印: HAL_AT_CONN_DomainToIp sim800 gprs module haven't init yet
我完成的:
void HAL_Printf(const char *fmt, ...)
{
va_list ap;//初始化指向可变参数列表的指针
char string[256];
va_start(ap,fmt);//将第一个可变参数的地址付给ap,即ap指向可变参数列表的开始
vsprintf(string,fmt,ap);//将参数fmt、ap指向的可变参数一起转换成格式化字符串,放string数组中,其作用同sprintf(),只是参数类型不同
HAL_UART_Transmit(&huart1 , (uint8_t *)string,strlen(string) , 0xffff);
va_end(ap); //ap付值为0,没什么实际用处,主要是为程序健壮性
return;
}