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

 

posted @ 2015-11-16 21:04  盛夏夜  阅读(734)  评论(0编辑  收藏  举报