[国嵌攻略][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; }