工程代码:
#include "stdarg.h" //包含需要的头文件
#define USART1_TXBUFF_SIZE 256 //定义串口3发送缓冲区大小 256字节
__align(8) char Usart3_TxBuff[USART1_TXBUFF_SIZE];//串口3缓存区
#if 1
//串口1
int fputc(int ch, FILE *s)
{
/* 阻塞判断串口是否发送完成 */
while((USART1->ISR & 0X40) == 0);
/* 串口发送完成,将该字符发送 */
USART1->TDR = (uint8_t) ch;
return ch;
}
#endif
//串口3,AT指令发送端口,操作wifi
void u3_printf(char* fmt,...)
{
unsigned int i,length;
va_list ap;
//va_list 可变参数列表,存参数地址
va_start(ap,fmt);//获取可变参数地址 fmt地址赋给ap
vsprintf(Usart3_TxBuff,fmt,ap);/*使用参数列表发送格式化输出到字符串,
函数功能将可变参数格式化输出到一个字符数组
*/
//fmt中内容赋给Usart3_TxBuff,
va_end(ap); //清空参数列表
//
length=strlen((const char*)Usart3_TxBuff);
while((USART3->ISR&0X40)==0);
for(i = 0;i < length;i ++)
{
USART3->TDR = Usart3_TxBuff
;
while((USART3->ISR&0X40)==0);
}
}
代码分析:
可变参数:c语言可变参数输出
va_list ap;
//va_list 可变参数列表,存参数地址
va_start(ap,fmt);//获取可变参数地址 fmt地址赋给ap
vsprintf(Usart3_TxBuff,fmt,ap);/*使用参数列表发送格式化输出到字符串,
函数功能将可变参数格式化输出到一个字符数组
*/
//fmt中内容赋给Usart3_TxBuff,
va_end(ap); //清空参数列表
把可变参数地址存到ap中,存储图如下。
函数形式参数存储:
void func(char * parameter0,char * parameter1,char * parameter2,char * parameter3){
}
栈向下生长,先入后出。
工程代码:
#include "stdarg.h" //包含需要的头文件
#define USART1_TXBUFF_SIZE 256 //定义串口3发送缓冲区大小 256字节
__align(8) char Usart3_TxBuff[USART1_TXBUFF_SIZE];//串口3缓存区
#if 1
//串口1
int fputc(int ch, FILE *s)
{
/* 阻塞判断串口是否发送完成 */
while((USART1->ISR & 0X40) == 0);
/* 串口发送完成,将该字符发送 */
USART1->TDR = (uint8_t) ch;
return ch;
}
#endif
//串口3,AT指令发送端口,操作wifi
void u3_printf(char* fmt,...)
{
unsigned int i,length;
va_list ap;
//va_list 可变参数列表,存参数地址
va_start(ap,fmt);//获取可变参数地址 fmt地址赋给ap
vsprintf(Usart3_TxBuff,fmt,ap);/*使用参数列表发送格式化输出到字符串,
函数功能将可变参数格式化输出到一个字符数组
*/
//fmt中内容赋给Usart3_TxBuff,
va_end(ap); //清空参数列表
//
length=strlen((const char*)Usart3_TxBuff);
while((USART3->ISR&0X40)==0);
for(i = 0;i < length;i ++)
{
USART3->TDR = Usart3_TxBuff
;
while((USART3->ISR&0X40)==0);
}
}
代码分析:
可变参数:c语言可变参数输出
va_list ap;
//va_list 可变参数列表,存参数地址
va_start(ap,fmt);//获取可变参数地址 fmt地址赋给ap
vsprintf(Usart3_TxBuff,fmt,ap);/*使用参数列表发送格式化输出到字符串,
函数功能将可变参数格式化输出到一个字符数组
*/
//fmt中内容赋给Usart3_TxBuff,
va_end(ap); //清空参数列表
把可变参数地址存到ap中,存储图如下。
函数形式参数存储:
void func(char * parameter0,char * parameter1,char * parameter2,char * parameter3){
}
栈向下生长,先入后出。
举报