[国嵌攻略][057][串口控制台建立]
控制台分类
1.菜单型控制台,通过选择菜单来执行命令
2.解析型控制台,通过输入命令来执行命令
printf()、scanf()函数移植
1.函数采用变参
2.打印信息到串口
3.关键在于把变参转换成字符串,相关函数需要从Linux内核或标准C库中移植
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
/********************************************************************
*名称:puts
*参数:
str 输出字符串
*返回:
i 输出字符数
*功能:输出字符串
*********************************************************************/
int puts(const char *str){
int i; //输出字符数
for(i = 0; str[i] != '\0'; i++){ //如果输出字符为结束符,那么结束输出字符串
putc(str[i]);
}
return i;
}
/********************************************************************
*名称:gets
*参数:
str 输入字符串
*返回:
i 输入字符数
*功能:输入字符串
*********************************************************************/
int gets(char *str){ //标准C中返回为char *类型的输入字符串指针
char ch; //输入字符
int i; //输入字符数
ch = getc_echo();
for(i = 0; ch != '\r'; i++){ //如果输入字符为回车,那么结束输入字符串
str[i] = ch;
ch = getc_echo();
}
str[i++] = '\r'; //添加回车
str[i++] = '\n'; //添加换行
str[i] = '\0'; //添加结束符
return i;
}
/********************************************************************
*名称:printf
*参数:
format 格式化字符串
*返回:
num 输出字符数
*功能:格式化输出字符串
*********************************************************************/
int printf(const char *format, ...){
char buffer[BUFSIZE]; //字符串缓存
va_list args; //参数列表
int num; //输出字符数
//转换参数为字符串
va_start(args, format); //读取参数
vsprintf(buffer, format, args); //转换参数为字符串
va_end(args); //结束转换
//输出字符串到串口
num = puts(buffer);
return num;
}
/********************************************************************
*名称:scanf
*参数:
format 格式化输入字符串
*返回:
num 输入字符数
*功能:格式化输入字符串
*********************************************************************/
int scanf(const char *format, ...){ //标准C中返回为int类型的是否成功标志
int num; //输入字符数
char buffer[BUFSIZE]; //字符串缓存
va_list args; //参数列表
//输入字符串到串口
num = gets(buffer);
//转换字符串为参数
va_start(args, format); //读取参数
vsscanf(buffer, format, args); //转换字符串为参数
va_end(args); //结束转换
return num;
}

浙公网安备 33010602011771号