[国嵌攻略][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;
}
时间: 2024-08-03 23:36:11

[国嵌攻略][057][串口控制台建立]的相关文章

[国嵌攻略][131][串口驱动分析-接收]

tty数据接收流程 //tty子系统 1.tty_fops中的tty_read响应系统调用 2.tty_read调用tty_ldisc_N_TTY中的n_tty_read n_tty_read 1.设置app的状态 2.如果没有数据可读,让阻塞生效 3.如果有数据可读,从read_buf中读走数据 什么时候串口驱动会把数据送到n_tty_read的read_buf中 当串口接收到数据时会产生接收中断,然后中断处理程序会把数据送到read_buf中. 串口驱动如何收到数据 串口中断处理程序s3c2

[国嵌攻略][132][串口驱动实现]

如何开发Linux驱动程序 一般情况下都会有现成的驱动程序,不需要从零开始开发驱动程序.所以Linux驱动开发主要分为两个步骤:1.读得懂驱动程序:2.写的了核心功能. 发送中断处理程序 发送中断处理函数在/drivers/serial/samsung.c的s3c24xx_serial_tx_chars 循环缓冲 struct circ_buf { char *buf; int head; int tail; }; 存数据的时候移动head,取数据的时候移动tail. static irqret

[国嵌攻略][091][TCP网络程序设计]

server.c #include <sys/socket.h> #include <netinet/in.h> #include <strings.h> #include <stdio.h> #define SERVER_PORT 3333 void main(){ //创建标识 int serverfd; serverfd = socket(AF_INET, SOCK_STREAM, 0); //建立TCP连接 //绑定地址 struct sockadd

[国嵌攻略][161][USB总线介绍]

USB发展史 USB(universal serial bus),通用串行总线,是一种外部总线标准.用于规范电脑与外部设备的连接和通讯.USB是在1994年底由英特尔.康柏.IBM.Microsoft等多家公司联合提出的.自1996年堆出后,已经成功替代了串口和并口.成为当今个人电脑和大量智能设备的必备接口之一. USB1.0出现在1996年,速度只有1.5Mbps.1998年升级为USB1.1,速度也提升到了12Mbps,称之为full speed. USB2.0规范是由USB1.1规范演变而

[国嵌攻略][162][USB协议分析]

USB设备逻辑结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点. USB设备描述符 当我们把USB设备(例如USB鼠标)插到我们的PC时,主机能够自动识别出我们的USB设备类型.在每一个USB设备内部,包含了固定格式的数据,通过这些数据,USB主机就可以获取USB设备的类型.生产厂商等信息.这些固定格式的数据,我们称之为USB描述符.标准设备有5种USB描述符:设备描述符.配置描述符.接口描述符.端点

[国嵌攻略][135][网络子系统深度分析]

网络发包模型 1.选择路由 2.交给邻居子系统(路由中紧挨着发送方的网关).如果没有邻居信息,那么由Linux中的邻居子系统来建立邻居信息. 发送数据过程 //系统调用层和协议无关层 1.发送入口sock_aio_write 2.调用do_sock_write 3.调用__sock_sendmsg //网络协议栈 4.调用udp_sendmsg 5.调用ip_route_output_flow(选择路由) 6.调用udp_push_pending_frames 7.调用ip_push_pendi

[国嵌攻略][070-095][Linux编程函数手册]

第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 <time.h> 1.1.5 返回值 成功:日历时间失败:-1 1.1.6 参数说明 t:不为空的情况下保存返回值   1.2 获取格林威治时间 1.2.1 函数名 gmtime 1.2.2 函数原形 struct tm *gmtime(const time_t *timep) 1.2.3 函数功

[国嵌攻略][049][中断处理流程深度剖析]

中断的生命周期 1.串口控制器产生事件,送到中断控制器,如果通过中断控制器的过滤,由中断控制器把事件送到CPU核 2.中断信号产生(中断源)->中断信号过滤(中断控制器)->中断信号处理(CPU) 中断源在中断的生命周期中,中断源的作用是负责产生中断信号.2440支持60个中断源:6410支持64个中断源:210支持93个中断源 中断过滤 1.中断信号送到中断控制器来了之后,中断控制器要进行过滤 2.串口子中断TX0的过滤过程: 2.1.首先,当TX0产生中断后SUBSRCPND中相应的位会被

[国嵌攻略][093][并发服务器设计]

server.c #include <sys/socket.h> #include <netinet/in.h> #include <strings.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define SERVER_PORT 3333 void main(){ //创建标识 int serverfd; serverfd = socket(AF_IN