Linux 程序设计学习笔记----终端及串口编程及实例应用
转载请注明出处,http://blog.csdn.net/suool/article/details/38385355。
部分内容类源于网络。
终端属性详解及设置
属性
为了控制终端正常工作,终端的属性包括输入属性、输出属性、控制属性、本地属性、线路规程属性以及控制字符。
其在系统源代码的termios.h中定义(具体的说明文档http://pubs.opengroup.org/onlinepubs/7908799/xsh/termios.h.html),其结构体成员主要是
Thetermiosstructure is defined, and includes at least the following members:
tcflag_t c_iflag // input modes 输入属性
tcflag_t c_oflag // output modes 输出。。
tcflag_t c_cflag // control modes 控制。。
tcflag_t c_lflag // local modes 本地。。
cc_t c_cc[NCCS] // control chars 控制字符
应用层可以通过tcgetattr()函数来获取某个打开终端的属性,通过tcsetattr()函数设置某个终端的属性。
终端控制选项
包括:波特率、数据位长、停止位长度、奇偶校验等与终端通信相关的信息。
1. 波特率
1> 表示每秒传输的比特数,串口通信的双方必须保持一致才能通信。
2> 说明:若波特率为115200,它表示什么呢?
Ø 对于发送断,即每秒钟发送115200bit。
Ø 对于接收端,115200波特率意味着串口通信在数据线上的采样率为115200HZ.
注:波特率和距离之间成反比,距离相隔很近的设备之间可以实现高波特率通信。
2. 数据位
1> 表示通信中实际数据位的参数。在计算机发送的数据包中,实际的数据往往不会是8位。
2> 说明:在串口通信中,可以选择5,6,7,8位。设定数据位时,主要考虑所要传输的数据内容。
3> 事例:如果要传输的是标准的ASCII码。那么又该如何设定数据位呢?
Ø 由于ASCII码的范围是0~127,因此设定数据位为7就OK了。
Ø 若为扩展ASCII码,其范围是0~255,必须使用8位。
注:7位或8位数据中不仅仅是数据,还包括开始/停止位,数据位以及奇偶校验位等。
3. 奇偶校验位
1> 作用:该位用于串口通信中的简单检验错,在通信前,可以约定是否使用以及使用多少位。
2> 类型:主要有偶校验,奇校验,标记,空格的方式
在ARM7(LPC2200)中,只有偶校验,奇校验两种方式。
3> 方法:如何进行校验?
Ø 奇偶校验是通过统计数据中高位或低位的个数来实现校验的。
Ø 标记,空格并不是真正校验错误的,只是通过简单的置位来实现对数据的检测。通过置位方式,可以判断出是否存在噪声干扰数据通信或数据传输,以及是否存在不同步的现象
4. 停止位
1> 作用:停止位用于标志该数据包数据结束,可以取1位,1.5位或2位。
2> 说明:
Ø 停止位不仅仅用于数据包的传输结束标志,还提供了计算机之间校正同步时钟的机会。
Ø 用于停止位的位数越多,不同时钟同步的容忍程序越大。
Ø 但是由于停止位占用了数据空间,过多的停止位将导致数据传输速度的下降。
5. 数据流控制
1> 通过串口传输数据时,由于计算机之间处理速度或其他因素的影响,会造成丢失数据的现象。
2> 作用:数据流控制用于解决上面的问题,通过控制发送数据的速度,确保数据不会出现丢失。
3> 类型:数据流控制可以分为软件流控制(Xon/Xoff)和硬件流控制,当然你可以选择不使用数据流控制。
Ø 软件流控制使用特殊的字符作为启动或停止的标志
Ø 硬件流控制通过使用硬件信号(CTR/RTS)来实现。
注:使用硬件流控制时,在接收端准备好接收数据后,设为CTS为1,否则CTS为0。同样,如果发送端准备好要发送数据时,则设定RTS为1;如果还未准备好,设置CTS为0.
其他的各个终端选项具体使用的时候搜索相关的信息即可,没有必要再赘述了。
串口编程
串口编程的步骤如下:
1. 打开串口
2. 串口初始化
3. 读串口或写串口
4. 关闭串口
串口终端的基本操作
需要的头文件
#include <stdio.h> /*标准输入输出定义*/
#include <stdlib.h> /*标准函数库定义*/
#include <unistd.h> /*Unix 标准函数定义*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> /*文件控制定义*/
#include <termios.h> /*PPSIX 终端控制定义*/
#include <errno.h> /*错误号定义*/
打开一个终端
打开一个串口设备(/dev/ttyS0)可以直接使用open函数
在 Linux 下串口文件是位于 /dev 下的
串口一 为 /dev/ttyS0
串口二 为 /dev/ttyS1
打开串口是通过使用标准的文件打开函数操作:
int fd;
/*以读写方式打开串口*/
fd = open( "/dev/ttyS0", O_RDWR);
if (-1 == fd){
/* 不能打开串口一*/
perror(" 提示错误!");
}
设置串口
最基本的设置串口包括波特率设置,效验位和停止位设置。
串口的设置主要是设置 struct termios 结构体的各成员值。
struct termio
{ unsigned short c_iflag; /* 输入模式标志 */ unsigned short c_oflag; /* 输出模式标志 */ unsigned short c_cflag; /* 控制模式标志*/ unsigned short c_lflag; /* local mode flags */ unsigned char c_line; /* line discipline */ unsigned char c_cc[NCC]; /* control characters */
};
设置这个结构体很复杂,我这里就只说说常见的一些设置:
波特率设置
下面是修改波特率的代码:
struct termios Opt;
tcgetattr(fd, &Opt);
cfsetispeed(&Opt,B19200); /*设置为19200Bps*/
cfsetospeed(&Opt,B19200);
tcsetattr(fd,TCANOW,&Opt);
设置波特率的例子函数:
/**
*@brief 设置串口通信速率
*@param fd 类型 int 打开串口的文件句柄
*@param speed 类型 int 串口速度
*@return void
*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed){int i; int status; struct termios Opt;tcgetattr(fd, &Opt); for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { if (speed == name_arr[i]) { tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arr[i]); cfsetospeed(&Opt, speed_arr[i]); status = tcsetattr(fd1, TCSANOW, &Opt); if (status != 0) { perror("tcsetattr fd1"); return; } tcflush(fd,TCIOFLUSH); } }
}
效验位和停止位的设置
无效验 | 8位 | Option.c_cflag &= ~PARENB; Option.c_cflag &= ~CSTOPB; Option.c_cflag &= ~CSIZE; Option.c_cflag |= ~CS8; |
---|---|---|
奇效验(Odd) | 7位 | Option.c_cflag |= ~PARENB; Option.c_cflag &= ~PARODD; Option.c_cflag &= ~CSTOPB; Option.c_cflag &= ~CSIZE; Option.c_cflag |= ~CS7; |
偶效验(Even) | 7位 | Option.c_cflag &= ~PARENB; Option.c_cflag |= ~PARODD; Option.c_cflag &= ~CSTOPB; Option.c_cflag &= ~CSIZE; Option.c_cflag |= ~CS7; |
Space效验 | 7位 | Option.c_cflag &= ~PARENB; Option.c_cflag &= ~CSTOPB; Option.c_cflag &= &~CSIZE; Option.c_cflag |= CS8; |
设置效验的函数
/**
*@brief 设置串口数据位,停止位和效验位
*@param fd 类型 int 打开的串口文件句柄
*@param databits 类型 int 数据位 取值 为 7 或者8
*@param stopbits 类型 int 停止位 取值为 1 或者2
*@param parity 类型 int 效验类型 取值为N,E,O,,S
*/
int set_Parity(int fd,int databits,int stopbits,int parity)
{ struct termios options; if ( tcgetattr( fd,&options) != 0) { perror("SetupSerial 1"); return(FALSE); }options.c_cflag &= ~CSIZE; switch (databits) /*设置数据位数*/{ case 7: options.c_cflag |= CS7; break;case 8: options.c_cflag |= CS8;break; default: fprintf(stderr,"Unsupported data size\n"); return (FALSE); }
switch (parity)
{ case 'n':case 'N': options.c_cflag &= ~PARENB; /* Clear parity enable */options.c_iflag &= ~INPCK; /* Enable parity checking */ break; case 'o': case 'O': options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/ options.c_iflag |= INPCK; /* Disnable parity checking */ break; case 'e': case 'E': options.c_cflag |= PARENB; /* Enable parity */ options.c_cflag &= ~PARODD; /* 转换为偶效验*/ options.c_iflag |= INPCK; /* Disnable parity checking */break;case 'S': case 's': /*as no parity*/ options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;break; default: fprintf(stderr,"Unsupported parity\n"); return (FALSE); }
/* 设置停止位*/
switch (stopbits)
{ case 1: options.c_cflag &= ~CSTOPB; break; case 2: options.c_cflag |= CSTOPB; break;default: fprintf(stderr,"Unsupported stop bits\n"); return (FALSE);
}
/* Set input parity option */
if (parity != 'n') options.c_iflag |= INPCK;
tcflush(fd,TCIFLUSH);
options.c_cc[VTIME] = 150; /* 设置超时15 seconds*/
options.c_cc[VMIN] = 0; /* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&options) != 0)
{ perror("SetupSerial 3"); return (FALSE);
}
return (TRUE);
}
需要注意的是:
如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯,设置方式如下:
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
options.c_oflag &= ~OPOST; /*Output*/
读写串口
设置好串口之后,读写串口就很容易了,把串口当作文件读写就是。
发送数据char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length)
读取串口数据
使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。
可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。
char buff[1024];int Len;int readByte = read(fd,buff,Len);
关闭串口
关闭串口就是关闭文件。
close(fd);
实例应用
下面是一个简单的读取串口数据的例子,使用了上面定义的一些函数和头文件
/**********************************************************************
代码说明:使用串口二测试的,发送的数据是字符,
但是没有发送字符串结束符号,所以接收到后,后面加上了结束符号。
我测试使用的是单片机发送数据到第二个串口,测试通过。
**********************************************************************/
<pre>#include <stdio.h> /*标准输入输出定义*/
#include <stdlib.h> /*标准函数库定义*/
#include <unistd.h> /*Unix标准函数定义*/
#include <sys/types.h> /**/
#include <sys/stat.h> /**/
#include <fcntl.h> /*文件控制定义*/
#include <termios.h> /*PPSIX终端控制定义*/
#include <errno.h> /*错误号定义*//***@brief 设置串口通信速率
*@param fd 类型 int 打开串口的文件句柄
*@param speed 类型 int 串口速度
*@return void*/int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300,38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{int i;int status;struct termios Opt;tcgetattr(fd, &Opt);for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++){if (speed == name_arr[i]){tcflush(fd, TCIOFLUSH);cfsetispeed(&Opt, speed_arr[i]);cfsetospeed(&Opt, speed_arr[i]);status = tcsetattr(fd, TCSANOW, &Opt);if (status != 0)perror("tcsetattr fd1");return;}tcflush(fd,TCIOFLUSH);}
}
/**
*@brief 设置串口数据位,停止位和效验位
*@param fd 类型 int 打开的串口文件句柄*
*@param databits 类型 int 数据位 取值 为 7 或者8*
*@param stopbits 类型 int 停止位 取值为 1 或者2*
*@param parity 类型 int 效验类型 取值为N,E,O,,S
*/
int set_Parity(int fd,int databits,int stopbits,int parity)
{struct termios options;if ( tcgetattr( fd,&options) != 0){perror("SetupSerial 1");return(FALSE);}options.c_cflag &= ~CSIZE;switch (databits) /*设置数据位数*/{case 7:options.c_cflag |= CS7;break;case 8:options.c_cflag |= CS8;break;default:fprintf(stderr,"Unsupported data size\n");return (FALSE);}switch (parity){case 'n':case 'N':options.c_cflag &= ~PARENB; /* Clear parity enable */options.c_iflag &= ~INPCK; /* Enable parity checking */break;case 'o':case 'O':options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/ options.c_iflag |= INPCK; /* Disnable parity checking */break;case 'e':case 'E':options.c_cflag |= PARENB; /* Enable parity */options.c_cflag &= ~PARODD; /* 转换为偶效验*/ options.c_iflag |= INPCK; /* Disnable parity checking */break;case 'S':case 's': /*as no parity*/options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;break;default:fprintf(stderr,"Unsupported parity\n");return (FALSE);}/* 设置停止位*/ switch (stopbits){case 1:options.c_cflag &= ~CSTOPB;break;case 2:options.c_cflag |= CSTOPB;break;default:fprintf(stderr,"Unsupported stop bits\n");return (FALSE);}/* Set input parity option */if (parity != 'n')options.c_iflag |= INPCK;options.c_cc[VTIME] = 150; // 15 secondsoptions.c_cc[VMIN] = 0;tcflush(fd,TCIFLUSH); /* Update the options and do it NOW */if (tcsetattr(fd,TCSANOW,&options) != 0){perror("SetupSerial 3");return (FALSE);}return (TRUE);}
/**
*@breif 打开串口
*/
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAYif (-1 == fd){ /*设置数据位数*/perror("Can't Open Serial Port");return -1;}elsereturn fd;}
/**
*@breif main()
*/
int main(int argc, char **argv)
{int fd;int nread;char buff[512];char *dev ="/dev/ttyS1";fd = OpenDev(dev);if (fd>0)set_speed(fd,19200);else{printf("Can't Open Serial Port!\n");exit(0);}if (set_Parity(fd,8,1,'N')== FALSE){printf("Set Parity Error\n");exit(1);}while(1){while((nread = read(fd,buff,512))>0){printf("\nLen %d\n",nread);buff[nread+1]='\0';printf("\n%s",buff);}}//close(fd);//exit(0);
}
下面是一个简单的对终端属性进行修改的程序,取消了终端本地。
(1)以O_NOCTTY方式打开,不允许Ctrl+C结束当前进程。
(2)设置波特率位B38400,数据位为8bit,忽略奇偶校验。
(3)将CR映射为NL,从而回车表示一次输入结束。
(4)将输入回显功能取消,输出模式设置为原始模式。
完成以上设置后,将从给定的终端读取相应的数据(不回显),遇到CR结束,然后将输入的内容在标准设备输出。整个过程是死循环,只有遇到第一个字符shiE的时候,结束,无法Ctrl+C结束。代码如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{int fd,c, res;struct termios oldtio,newtio;char buf[255];fd = open(argv[1], O_RDWR | O_NOCTTY ); // O_NOCTTY不能被ctrl+c中止if (fd <0) {perror("open"); exit(EXIT_FAILURE); }memset(&newtio,'\0', sizeof(newtio));newtio.c_cflag = B38400 | CS8 | CLOCAL | CREAD;//设置波特率,数据位,使能读newtio.c_iflag = IGNPAR | ICRNL;//忽略奇偶校验,映射CRnewtio.c_oflag = 0; //输出模式为RAW模式newtio.c_lflag = ICANON;//本地模式,不回显tcflush(fd, TCIFLUSH); //刷新tcsetattr(fd,TCSANOW,&newtio); //设置属性while (1) {res = read(fd,buf,255); //从该终端读数据,如果是/dev/tty,即当前终端,遇到CR结束buf[res]=0; //最后一个设置为结束符printf(":recv %d bytes:%s\n\r", res,buf); //打印输出字符数if (buf[0]=='E') //只有第一个字符为E时,才结束 break;}tcsetattr(fd,TCSANOW,&oldtio);
}
示例控制终端字体颜色、光标位置、固定显示:
#include<stdio.h>
#include<stdlib.h>
#include <unistd.h>int main(int argc,char *argv[])
{int i=0;system("clear");for(i=0;i<argc;i++){printf("\033[2J\033[5;10H%s\n",argv[i]);sleep(1);}
}
下面的示例完成闪烁显示内容:
#include<stdio.h>
#include<stdlib.h>
#include<unsitd.h>int main(void)
{while (1){fprintf(stderr, "\033[;\033[s"); /*使用stderr是因为其是不带缓存的*/fprintf(stderr, "\033[47;31mhello world\033[5m");sleep(1);fprintf(stderr, "\033[;\033[u");fprintf(stderr, "\033[;\033[K");sleep(1);}return 0;
}
编译运行后将会闪烁显示。
下一个示例是终端获取信息不回显:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<termios.h>
#define PASSWD_LEN 8
char *getpasswd(char *prompt)
{FILE *fp=NULL;if(NULL==(fp=fopen(ctermid(NULL),"r+"))){perror("fopen");exit(EXIT_FAILURE);}printf("%s\n",ctermid(NULL));setvbuf(fp, (char *) NULL, _IONBF, 0);sigset_t myset,setsave;sigemptyset(&myset);sigaddset(&myset,SIGINT);sigaddset(&myset,SIGTSTP);sigprocmask(SIG_BLOCK,&myset,&setsave);struct termios termnew,termsave;tcgetattr(fileno(fp),&termsave);termnew=termsave;termnew.c_lflag=termnew.c_lflag &~(ECHO|ECHOCTL|ECHOE|ECHOK);tcsetattr(fileno(fp),TCSAFLUSH,&termnew);fputs(prompt,fp);static char buf[PASSWD_LEN+1];int c;char *ptr=buf;while((c=getc(fp))!=EOF&&c!='\0'&&c!='\n'&&c!='\r'){if(ptr<&buf[PASSWD_LEN])*ptr++=c;fflush(fp); }*ptr='\0';putc('\n',fp);tcsetattr(fileno(fp),TCSAFLUSH,&termsave);sigprocmask(SIG_BLOCK,&setsave,NULL);return buf;
}
int main(void)
{char *ptr=NULL;ptr=getpasswd("#");printf("%s\n",ptr);
}
Reference
http://digilander.libero.it/robang/rubrica/serial.htm
Next:
进程及其概念
转载请注明出处,http://blog.csdn.net/suool/article/details/38385355。
部分内容类源于网络。如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Visual Studio 2017中如何打包exe安装文件
注意:阅读本篇文章前,请先按照 https://blog.csdn.net/DonetRen/article/details/88185150 的步骤添加相应扩展,并创建安装项目创建完Windows安装项目之后,接下来讲解如何制作Windows安装程序。一个完整的Windows安装程序通常包括项目输出文件、内容文件、桌面快捷方式和注…...
2024/5/2 11:59:01 - 课程 4: 偏好
这节课是 Android 开发(入门)课程 的第三部分《访问网络》的最后一节课。这节课为 Quake Report App 添加一个偏好 (Preference) 页面,入口放在应用栏,使应用能够根据用户的偏好修改查询地震信息的最小震级,以及按震级大小或时间顺序排列显示地震信息列表。 关键词:Share…...
2024/5/2 10:43:33 - 游戏引擎之寒霜引擎
Frostbite引擎(Frostbite Engine),是EA DICE开发的一款3D游戏引擎,主要应用于2000年代晚期的战地系列游戏。该引擎从2006年起开始研发,第一款使用寒霜引擎的游戏《战地:叛逆连队》在2008年上市。多平台 Frostbite引擎支持多种平台的后端。在Xbox 360、Microsoft Windows上…...
2024/5/3 0:12:17 - 如何让打包的C++安装程序以管理员身份在Win7下运行
问题描述:使用VS2010开发的C++项目,使用inno打包后的安装程序,安装在系统盘后,在桌面创建的快捷方式必须右键以管理员身份才能正常运行,否则双击运行程序出现异常。解决方法:在VS2010解决方案资源管理器中右键启动项目->属性,弹出 个工程属性页,定位到链接器->清…...
2024/5/2 19:21:36 - JS中字符串截取与php中字符串截取函数总结
1. JS中关于字符串截取的函数var stringObj = "123abcstring";(1) substr()函数stringObj.substr(start, length): 表示从start位置开始,截取length长度(指定长度)的子字符串。例如: stringObj.substr(1, 3); // 返回值为:“23a”(2) substring()函数string…...
2024/5/2 4:02:46 - linux串口转TCP程序
include”test.h”include”modbus.h”define BUFFER_SIZE 29int ret; modbus_t *mb; int16_t tab_reg[32]={0}; //初始化串口端口号啊 void ComInit() { mb = modbus_new_rtu(“/dev/ttySAC3”,19200,’N’,8,1);//open port modbus_set_slave(mb,1);//set slave addre…...
2024/5/2 9:36:48 - Android 关于Preference相关类的分析
系统里设置Settings app 里面是用Preference来做的,这些在其他app里也有涉及,比如dialer的设置部分,关于Preference这里涉及到一些类,以后会常用碰到的,做一个笔记记录和分析一下。Activity :PreferenceActivity Fragment :PreferenceFragment Preference :Preference 多…...
2024/5/2 9:18:46 - linux查看串口信息
每个UART控制器包含一个波特率发生器,发送器,接收器和控制单元,发送和接收器包括FIFO和数据移位器,首先数据被写到FIFO中,然后复制到发送移位器中准备发送,最后数据被发送数据管脚移位发出。数据接收过程是:首先从接收管脚上面的到数据,然后将数据从移位器中复制到FIFO…...
2024/5/3 0:38:13 - JS截取字符串数组的方法总结
1.slice 字符串和数组 string.slice(start, end) 截取一个字符串 start到end不包括end end支持负数 返回新的字符串不会改变原字符串 2.substring string.substring(start, end)截取一个字符串 start到end不包括end 跟slice不同的是end不支持负数 返回新的字符串不会改变原字符…...
2024/5/5 4:07:26 - MFC应用程序打包发布教程
MFC应用程序打包发布 转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/49766051 本篇文章介绍如何把做好的MFC软件打包,变成一个安装文件,方便在其他电脑上运行。使用上篇文章制作好的"视频播放器"工程作为例子。 1.在同一个解决方案下,新建…...
2024/5/2 7:28:45 - Manjaro Gaming:当 Manjaro 的才华遇上 Linux 游戏 | Linux 中国
Manjaro Gaming 是一个专门为游戏人群设计的,带有 Manjaro 所有才能的发行版。之前用过 Manjaro Linux 的人一定知道为什么这对于游戏人群来说是一个如此好的一个消息。-- Munif Tanjim本文导航◈ 优化35%◈ 软件41%◈ 模拟器57%◈ 其它76%◈ 下载85%编译自 | https://itsfo…...
2024/5/4 1:24:07 - AM335X 串口驱动学习(1)-基于linux3.8内核
学习串口驱动,先从数据结构入手吧。串口驱动有3个核心数据结构:(/drivers/tty/serial/omap-serial.c) - UART特定的驱动程序结构定义:struct uart_driver serial_omap_reg; - UART端口结构定义: struct uart_omap_port *ui[OMAP_MAX_HSUART_PORTS]; - UART相关操作函…...
2024/4/20 18:30:23 - 《游戏设计艺术(第二版)》读书笔记
《游戏设计艺术(第二版)》读书笔记 书名:游戏设计艺术 作者:Jesse Schell 翻译:刘嘉俊、陈闻、陆佳琪、杨逸、王楠 出版社:中国工信出版社 简评: 本书对游戏设计的开发、团队合作、商业售卖、责任等各个环节进行了介绍;使用了科学研究的方法和态度,对一些经验设计方法…...
2024/4/20 18:30:22 - SharedPreferences的使用
本文介绍SharedPreferences及PreferenceActivity、PreferenceFragment。 1、SharedPreferences简单使用示例 public class MainActivity extends Activity {private static final String TAG = MainActivity.class.getSimpleName();@Overrideprotected void onCreate(Bundle sa…...
2024/4/20 18:30:21 - sbt的安装以及用sbt编译打包scala编写的spark程序
众所周知,spark可以使用三种语言进行编写,分别是scala,phython,java三种语言,而且执行方式不同,Scala是用sbt编译打包,Java是用Maven进行编译打包,而phython则是用spark-submit提交运行。而sbt本身就是用scala进行编写的。这里记录以下自己在Linux下安装sbt的过程以及编…...
2024/5/4 3:52:07 - Linux串口编程
一、串口通信介绍串口是计算机上的串行通信的物理接口。首先先介绍一下串行通信,串行通信的分类:1、按照数据传送方向,分为:单工:数据传输只支持数据在一个方向上传输;就像路上的单行线。半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输…...
2024/4/26 0:19:11 - 打包ArcGIS Engine应用程序的几种方式
打包ArcGIS Engine应用程序的几种方式 2010-09-19 16:381.使用InstallShield打包ArcGIS Engine应用程序ArcGIS Engine开发的应用程序必须要在装有ArcGIS Engine运行时并且正确的授权的机器上才可以运行。因此,在制作安装包的时候可以把ArcGIS Engine运行时一起打进来,用户在安…...
2024/5/4 7:00:46 - js截取字符串第一个和最后一个字符
var s = .str,;s = s.substring(1,s.length-1); //str...
2024/5/4 9:35:32 - Android Studio TV开发教程(十一)首次将用户引入您的应用
Android Studio TV开发教程(转自Android官网https://developer.android.com/training/tv/start)文章源自:光谷佳武 https://blog.csdn.net/jiawuhan/article/details/80647450首次将用户引入您的应用要向初次使用者展示如何充分利用您的应用,请在应用启动时提供入职信息。 …...
2024/5/1 8:52:31 - Fruit Ninja(水果忍者)游戏源代码下载、分析(中)---可运行Android,Ios,Window,Mac,Html5平台
背景:上一篇,已经实现了水果不断向上抛的效果和开始界面,这一篇我们将分析如何切水果,获得分数;运行demo需要配置好CocosEditor,暂不支持其他工具。demo是跨平台的,可移植运行android,ios,html5网页等,代码是基于javascript语言,cocos2d-x游戏引擎,CocosEditor手游…...
2024/5/5 4:35:13
最新文章
- 数据库常问4
表锁和行锁? 表锁: 表锁是对整个表进行加锁,可以分为表共享读锁(表读锁)和表独占写锁(表写锁)两种模式。在表级锁中,读锁之间不互斥,但写锁和任何其他锁都互斥。表锁粒…...
2024/5/5 6:20:50 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - C语言学习笔记day18
1. 指针基本概念 1.地址:用来区分内存中不同字节的编号 2.指针:地址就是指针,指针就是地址 3.指针变量:存储指针的变量,有时去掉变量,称为指针 2. 指针运算符 1.&: 1.获得一个变量在内存空间中的首地址 2.让表达式类型升级 2.*: 1.取…...
2024/5/2 23:19:47 - 巨控科技新品发布:全方位升级,引领智能控制新纪元
标签: #巨控科技 #智能控制 #新品发布 #GRM560 #OPC560 #NET400 在智能控制领域,巨控科技始终以其前沿技术和创新产品引领着市场的潮流。近日,巨控科技再次以其行业领先的研发实力,推出了三大系列的新产品,旨在为各行各业提供更…...
2024/5/1 13:03:39 - windows更新驱动导致Linux虚拟机网卡找不到
windows更新驱动导致Linux虚拟机网卡找不到 1、现象2、解决过程3、参考 1、现象 原先虚拟机配置了静态IP,更新windows驱动后xshell连接不上这台虚拟机(其他几台也是)。 2、解决过程 service network restart出现一下报错: Rest…...
2024/5/2 12:18:32 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/4 2:59:34 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57