-
2016-08-29 18:11:08
其实这是从打字机的概念来的:
0x0d => /r, carrige return, 指打字头归位的动作
0x0a => /n, new line, 指打字机上卷一行的动作Windows 在行尾使用 CRLF (carriage return/line feed, 0d 0a)
UNIX 好像只使用 LF(0a)0d------回车符号------"/r"
0a------换行符号------"/n"
一般在windows系统中两个连用,"/r/n"------0d0a更多相关内容 -
关于STM32串口中 0x0a,0x0d的学习
2018-12-27 10:12:27其中 0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了, 0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行 像在windows超级终端里一条数据输入完按回车...**
以STM32正点原子的串口接收中断 服务程序为例:
**
void USART1_IRQHandler(void) //串口1中断服务程序 { u8 Res; #ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了. OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 if((USART_RX_STA&0x8000)==0)//接收未完成 { if(USART_RX_STA&0x4000)//接收到了0x0d { if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 else USART_RX_STA|=0x8000; //接收完成了 } else //还没收到0X0D { if(Res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } } } } #ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了. OSIntExit(); #endif }
其中 0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了, 0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行 像在windows超级终端里一条数据输入完按回车正好来了个0D 0A,表示数据发完了
0x0D(asc码是13) 指的是“回车” \r是把光标置于本行行首
0x0A(asc码是10) 指的是“换行” \n是把光标置于下一行的同一列
0x0D + 0x0A 回车换行 \r\n把光标置于下一行行首
\n是换行,英文是linefeed,ASCII码是0xA。
\r是回车,英文是carriage return ,ASCII码是0xD。
USART_RX_STA是16位的数据,原子定义了最高位15是接收完成标志位,USART_RX_STA[15]=1时表示接收完成。所以0x8000好理解吧,就是最高位为1其他都为0,跟USART_RX_STA相与,低15位都被置0了只留下最高位即接收完成标志位,所以就可以通过USART_RX_STA&0x8000这样的方式来判断是否接收完成。
USART_RX_STA与0X3FFF进行与运算是用来确定接收到的数据长度的,USART_RX_STA的每个bit的含义教程里面有详细的讲解。下面转自一个解读:
解读:
怎么写接收函数?只要收到一个字节 stm32会产生中断
进入中断编写
//接收状态
//bit15, 接收完成标志
//bit14, 接收到0x0d
//bit13~0, 接收到的有效字节数目
u16 USART_RX_STA=0; //接收状态标记第一步判断标志位是否正的接收到
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
第二步 接收下数据
Res =USART_ReceiveData(USART1); //读取接收到的数据
第三步判断标志位USART_RX_STA 上次是否接收完成(上次接收完成了会把标志位置1)
if((USART_RX_STA&0x8000)==0)//接收未完成
其中USART_RX_STA 是自己定义的16位变量用于标志接收完成或者接收到0x0d 类似于自己定义了一个寄存器
第四步 判断标志位USART_RX_STA 上次是否接收到了0xod
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始 如果上次接收到了/r(0x0d)这次应该是/n (0x0a)
else USART_RX_STA|=0x8000; //接收完成了
否则上次没有接收到0x0d
if(Res==0x0d)USART_RX_STA|=0x4000; //判断本次是否接收到了0x0d
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; //把接收到的数据存入buf缓存区
USART_RX_STA++; //记录接收的数据字节数量if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 接收的数据不能无限制的大
}
总结
这样的编程方式其实利用了状态机思想,增强稳定性,减少错误本次实验有两个状态bit15接收状态,bit14接收到/r状态
编程时应该观察两个状态,注意到临界态 切换状态
首先判断当前接收处于什么状态,而不是盲目的接收
1、首先观察bit15状态 如果处于接收态应该注意 观察下一个状态bit14 在满足条件时切换bit15
2、观察bit14状态 如果处于接收到了/r态 再应该判断接收值是否满足 切换bit15态的条件
如果处于没有接收到\r态,应该判断接收值是否满足切换bit14的条件
if(USART_RX_STA&0x4000)//上次接收到了0x0d /r
else USART_RX_STA|=0x8000; 改变接收状态bit15
if(Res==0x0d) 接收到了/r
USART_RX_STA|=0x4000; 切换状态bit14
https://blog.csdn.net/shenlong1356/article/details/79940280
版权声明:本文为博主原创文章,转载请附上博文链接! -
彻底搞定回车0d和换行0a
2017-06-09 14:27:05什么是0x0d和0x0a ,可能大部分人都知道是回车和换行字符,但那个是回车,那个是换行?估计很多人都一时说不清楚了--- 也许你不相信,那就调查下周围的同事吧,估计会包含以下字眼“大概。我记得。回车是0x0d吧”...什么是0x0d和0x0a
,可能大部分人都知道是回车和换行字符,但那个是回车,那个是换行?估计很多人都一时说不清楚了---
也许你不相信,那就调查下周围的同事吧,估计会包含以下字眼“大概。我记得。回车是0x0d吧”。这次我移植arm-linux C的程序,至VC++,
发现了很多不同,尤其是这个回车换行浪费我一上午的时间,我决定借此机会彻底搞定他们,
这两个令人讨厌的家伙。 先说下浪费我一上午的那个东西----
教训是很重要的,希望大家不要重蹈我的覆辙----,在arm-linux下,写二进制文件,打开文件的时候 这样写就可
以了fp_wthdisk = fopen(file_pathname,"w");,以w
格式写就可以了。把这段程序移植到vc++后,发现一旦我向文件写入0x0a,前边就会自动加上0x0d
,我以为是我写入数组的问题,反复检查也没有找到毛病,后来同事问我:“你是不是二进制格式写入的文件?”我说:
“是呀,fwrite w格式,没有问题呀”,后来他说,你试试“wb格式写入一下”
,改为wb后,果真就好了,厉害!,我对他竖起了大拇指。
看到这里,上边促使我下决心搞清楚回车换行的原因说完了。我想可能有人会犯同样错误的。
但如果你对以下几个问题,都知晓了,就不必浪费时间,继续看下去了。 1.在Windows XP Visual C++下,按下回车键,系统获得的字符是0x0d
还是0x0a,还是0x0d和0x0a?
2.
回车(0x0d)的作用是回到本行的行首位置,表示本行已经输入完毕,停留在最后一个位置,还是光标转移到下一行的起始位置?
1.的答案是仅获得字符
0x0d 2.
答案是回车的作用只是移动光标至该行的起始位置 注意:回车和换行在不同环境下的意义不同,正如sleep(1)和Sleep(1
)【注意S大写】这两个函数的不同一样,sleep(1)在linux下表示延时1s,而Sleep(1)在vc++下表
示延时1ms
,如果不依据环境来讨论回车和换行,是无意义的,只能是让人们误入歧途和浪费时间。
我只在arm-linux C和vc++
下做了试验,请大家在接触其它语言环境下,小心推广,不行就自己动手做试验,最可靠。在arm-linux C和vc++下回车换行的意义如下。
回车 代码:CR ASCII码:\ r ,十六进制,0x0d
,回车的作用只是移动光标至该行的起始位置;
换行 代码:LF ASCII码:\ n ,十六进制,0x0a,换行至下一行行首起始位置;
Linux和windows下,回车试验
CODE:
sprintf(versionbuf,"%s","TEST_VERSION_1_0_11\rabcdefg\r34567\n"); printf("%s",versionbuf);
均打印输出:34567fgRSION_1_0_11,证明了以上结论。
其实回车和换行之所以把大家搞迷糊的一个重要原因,是大家把键盘的
“回车键”,0x0d表示“回车”,我们在windows
下的txt文件下敲下的回车键等情况搅在了一起。在键盘上敲下回车键,在不同软件下获得字符大有不同。
Windows下在
txt文件中敲下回车键,然后16进制观察,你会发现获得了2个字符,0x0d和0x0a,这个大家都知道,但这不意味着,在任何情况下敲下回车键,都会获得0x0d和0x0a。 在linux下,你对一个文件,敲下回车键,你就会发现,它每次只增加一个字符。 -
读写文件时遇到0D、0A、00问题
2018-05-30 11:38:50若是以字符串的形式写入数据(如puts函数)则在字符串中不能有\0不然\0之后的内容将无法写入。问题:1、如何让系统不自动添加\r\n?在打开文件时打开方式中添加‘b’这样系统就会以二进制的形式打开文件之后再读写时...是写入\n则在\n前边自动添加\r。若是以字符串的形式写入数据(如puts函数)则在字符串中不能有\0不然\0之后的内容将无法写入。
问题:1、如何让系统不自动添加\r\n?在打开文件时打开方式中添加‘b’这样系统就会以二进制的形式打开文件之后再读写时,系统将不会自动补\r\n。2、如何向文件中写入\0?使用单个字符写入的形式可以将\0写入文件(fputc使用过可行)
-
回车换行问题0x0D和0x0A
2011-12-30 15:13:49在01.txt文件中输入12然后enter,在ultraedit中看到的二进制是3132 0d 0a 然后程序如下: int mian() { FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp6; char a[10]; char b[10]; ... -
TypeError:iteration over a 0-d tensor
2020-05-21 16:49:37参考numpy官方文档 ... 当0-D的数组转换为list时,必须使用tolist(),不能使用list...The base case for this recursion is a 0D array: >>> a = np.array(1) >>> list(a) Traceback (most recent cal -
TypeError: iteration over a 0-d tensor
2020-06-02 00:45:08模型训练报错: TypeError: iteration over a 0-d tensor 解决: total_loss+=loss 换成如下方式 total_loss+=loss.item() -
TypeError('iteration over a 0-d tensor') TypeError: iteration over a 0-d tensor
2019-06-12 11:43:32程序中有data[0]这种操作的换成data.item[] 我的错误是返回值个数不符 return loss loss, prec = sia_loss() AttributeError: 'list' object has no attribute 'requires_grad' 网路输出的特征用[ ]括起来变成... -
Invalid header signature; read 0x3C0A0D0A0DBFBBEF, expected 0xE11AB1A1E011CFD0
2018-07-30 13:32:27读取word文档报错 错误信息 ... read 0x3C0A0D0A0DBFBBEF, expected 0xE11AB1A1E011CFD0 private final static String filePath = "D:/Test.doc"; public static void main(String[] args) th... -
数组中&a与&a[0]的区别
2017-07-09 10:34:57在探讨这个问题之前,我们首先来看一道笔试题,如下: 【摘自牛客网】下列代码的结果是:(正确答案是 C)main() { int a[5]={1,2,3,4,5};...} A、3,5 B、2,4 C、2,5 D、3,4 下面我们来分 -
【无标题】[ WARN:0@0.261] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\load...
2022-02-27 01:33:12问题: 今天安装python及opencv-python环境,在pycharm运行实例程序时,图片无法加载,如下图: 搜索了很多文章都没有解决,一直以为是环境配置的问题,最后发现是路径出错。 (1)斜杠与反斜杠 ... -
启动docker容器时报iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport错误
2019-10-14 10:31:12错误原因: 在防火墙中默认 nat 是 REJECT的,所以端口映射被拒绝。 解决方法: vim /etc/sysconfig/iptables ##注释掉下面这一行,这行的意思是...#-A FORWARD -j REJECT --reject-with icmp-host-prohibited #... -
关于0x0d与0x0a的ASCII。
2007-04-17 21:43:00今天发现一个有趣的现象:在masm(我用的版本是6.11)中作汇编时发现,0x0d与0x0a有着不同的作用。比如:“dead for dream”在这个字符串后只加上0x0d则得到 “光标移到开头的那个d下面,而没有换行”,再输入字符的... -
使用opencv读取图片错误([ WARN:0@13.701] global D:\a\opencv-python\opencv-python\opencv\modules\...
2022-03-13 09:47:41解决方法: 参考 https://blog.csdn.net/qq_43521500/article/details/108751507 成功解决 -
c语言:以零输入结束的(scanf("%d",&a)!=0)问题
2018-06-26 21:50:05(scanf(“%d”,&a)!=0)的意思是:scanf(“%d”,&a)成功输入则为1,未输入则为0,所以会出现一直在等待输入的情况..与输入是否为0是不同概念 可将: 要输入为0结束写为: ... -
cmd: cd /D %~dp0 的含义
2018-07-21 08:11:57cd /d %~dp0是什么意思啊? 批处理文件中的一条语句 意思是 更改当前目录为批处理本身的目录 有些晕吧?不急,我举例 比如你有个批处理a.bat在D:\qq文件夹下 a.bat内容为 cd /d %~dp0 在这里 cd /d 表示... -
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destinatio
2019-03-16 08:47:05启动docker容器的时候报错 docker: Error response from daemon: driver failed programming external connectivity ...tensquare_mysql (83328102ca96365aa455c994239587acefdbc5cfd9e18676dee082d88ae0420d): (i... -
交易 4398eab04edf6d7dc775119d681f175a3d9cf015921f52840e07f75ffd04741b
2021-06-08 06:03:06483045022100f37c9b1f791e285f708972d48378ddd9ef45c4dfc1aa0ad5dd208aceda8404f702205ffac2e91f3a6f8f777105b8a16283833944583a1c5884e3e5c90069cf709073012102a4b9c5a3e7c6e6c6fded56e882da3d7790d6a211eac862a551... -
0x0d和0x0a 学习
2010-01-05 15:16:00今天在看代码时看到 0x0D和0x0A,那个是换行,那个是回车呢?说实话,不清楚,到网上搜一下吧,看到了,知道了! if (szCh == 0x0D) { continue; } if (szCh == 0x0A) { break; } *szBuf++ = szCh; -
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destinatio
2018-08-30 16:30:32iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination 172.18.0.4:5000 ! -i br-ff45d935188b: iptables: No chain/target/match by that name... -
单片机实验-A/D和D/A转换
2017-12-10 22:10:36ORG 0000H DATAR0 EQU 50H ;定义保存采集现场数据单元 LJMP MAIN ORG 000BH ;定义定时/计数器 T0 中断入口地址 LJMP T0P ORG 0100H MAIN : MOV SP , #60H -
查看源码: 252beb5c-d85a-4f9a-8447-13fe49da0c28.rar_returnbook.~dfm 第1页 - VerySource
2021-06-24 05:23:57{ 0A544A504547496D616765248D0100FFD8FFE000104A46494600010201013A01 3A...0A00000000000B00D00000000C00000000000D00000000000E00E80000000001 010000000101FF00000002018300000003018300000004018000000005018300 ... -
cheat-engine/frmmicrotransactionsunit.lfm at master · cheat-engine/cheat-engine · GitHub
2021-06-08 14:30:41{ 1754506F727461626C654E6574776F726B47726170686963BA13000089504E47 0D0A1A0A0000000D4948445200000080000000800806000000C33E61CB000000 097048597300000B1200000B1201D2DD7EFC0000136C49444154789CED5D7D6C ... -
Invalid header signature; read 0x6D78206C6D74683C, expected 0xE11AB1A1E011CFD0 (2012-07-19 17:01:21)
2018-03-13 15:54:55分析:用POI读取Excel文件时报错。通常的原因:是读取的文件头信息不对,http://blog.sina.com.cn/robertlizhiqiang经常出现在: FileInputStream in = ... HSSFWorkbook workbook = null; in = new FileI... -
int a[ ]={0};
2018-07-21 10:07:09如题,这样初始化数组究竟可不可以。 下面看一段代码: #include <stdio.h>... int a[]={0};... for(i=0;...a[%d]=%d\t",i,a[i]); } int b[]={0}; putchar('\n'); for(i=0;i... -
IP地址分类(A类 B类 C类 D类 E类)
2019-01-10 22:17:20IP地址由四段组成,每个字段是一个字节,即4个字节、 每个字节有8位,最大值是255(=256:0~255)。 全世界范围是唯一的 32 位(4个字节 * 8位)的标识符。 IP地址由两部分组成,即网络地址和主机地址,二者是主从... -
简单正则^(?![^a-zA-Z]+$)(?!\D+$)[0-9a-zA-Z]{6,35}$
2018-07-30 18:35:20\D+$)[0-9a-zA-Z]{6,35}$ ^ (?![^a-zA-Z]+$) (?!\D+$) [0-9a-zA-Z] {6,35} $ 1. ^ 匹配字符串开始(或行首) 2. (?![^a-zA-Z]+$)断言 此位置 后,字符串结尾之前,所有的字符不能全部由数字([^a-zA-Z]表示... -
QUIC协议是如何做到0RTT加密传输的(addons)
2018-07-06 08:51:46QUIC作为HTTP2.0形成...首先解释一下什么是0RTT。 所谓的0RTT就是,通信双方发起通信连接时,第一个数据包便可以携带有效的业务数据。而我们知道,这个使用传统的TCP是完全不可能的,除非你使能了TCP Fast Open特...