所以,要我请你吃饭q同步的方法,要请我吃饭就用异步的ҎQ这样你可以省钱?br />--------------------------------------------------------------------------------------------------------------------
举个例子 打电话时同步 发消息是异步
lD?
异步通信”是一U很常用的通信方式。异步通信在发送字W时Q所发送的字符之间的时间间隔可以是L的。当Ӟ接收端必Ld好接收的准备Q如果接收端L的电源都没有加上Q那么发送端发送字W就没有意义Q因为接收端Ҏ无法接收Q。发送端可以在Q意时d始发送字W,因此必须在每一个字W的开始和l束的地方加上标志,卛_上开始位和停止位Q以便接收端能够正地每一个字W接收下来。异步通信的好处是通信讑֤单、便宜,但传输效率较低(因ؓ开始位和停止位的开销所占比例较大)?
异步通信也可以是以作ؓ发送的单位。接收端必须随时做好接收帧的准备。这是,帧的首部必须设有一些特D的比特l合Q得接收端能够扑և一帧的开始。这也称为定界。定界q包含确定的结束位|。这有两U方法。一U是在的尾部设有某U特D的比特l合来标志的结束。或者在帧首部中设有帧长度的字段。需要注意的是,在异步发送Ӟq不是说发送端对中的每一个字W都必须加上开始位和停止位后再发送出去,而是_发送端可以在Q意时间发送一个Q而与之间的时间间隔也可以是Q意的。在一帧中的所有比Ҏq箋发送的。发送端不需要在发送一帧之前和接收端进行协调(不需要先q行比特同步Q?每个字符开始发送的旉可以是Q意的t0 0 1 1 0 1 1 0起始位结束位t每个帧开始发送的旉可以是Q意的以字Wؓ单位发送以帧ؓ单位发送开始l束
“同步通信”的通信双方必须先徏立同步,卛_方的旉要调整到同一个频率。收发双方不停地发送和接收q箋的同步比Ҏ。但q时q有两种不同的同步方式。一U是使用全网同步Q用一个非常精的L钟对全网所有结点上的时钟进行同步。另一U是使用准同步,各结点的旉之间允许有微的误差Q然后采用其他措施实现同步传输?br />
串口q行通信的方式有两种Q同步通信方式和异步通信方式。同步通信方式要求通信双方以相同的旉频率q行Q而且准确协调Q通过׃n一个单个时钟或定时脉冲源保证发送方和接收方的准同步,效率较高Q异步通信方式不要求双方同步,收发方可采用各自的时钟源Q双斚w循异步的通信协议Q以字符为数据传输单位,发送方传送字W的旉间隔不确定,发送效率比同步传送效率低?
具体
专业?
串行通信可以分ؓ两种cdQ同步通信、异步通信?br />
1.异步通信的特点及信息帧格式:
以v止式异步协议ZQ下图显C的是v止式一帧数据的格式Q?
?
h式异步通信的特ҎQ一个字W一个字W地传输Q每个字W一位一位地传输Qƈ且传输一个字W时QL以“v始位”开始,以“停止位”结?字符之间没有固定的时间间隔要求。每一个字W的前面都有一位v始位Q低电^Q逻辑|Q字W本w由5-7位数据位l成Q接着字符后面是一位校验位Q也可以没有校验位)Q最后是一位或一位半或二位停止位Q停止位后面是不定长的空闲位。停止位和空闲位都规定ؓ高电qI逻辑|Q,q样׃证v始位开始处一定有一个下x?br /> 从图中可看出Q这U格式是靠v始位和停止位来实现字W的界定或同步的Q故UCؓh式协议?
异步通信可以采用正逻辑或负逻辑Q正负逻辑的表C如下表所C:
逻辑0 | 逻辑1 | |
正逻辑 | 低电q?/font> | 高电q?/font> |
负逻辑 | 高电q?/font> | 低电q?/font> |
起始?/font> | 逻辑0 | 1?/font> |
数据?/font> | 逻辑0? | 5位?位?位??/font> |
校验?/font> | 逻辑0? | 1位或?/font> |
停止?/font> | 逻辑1 | 1位,1.5位或2?/font> |
I闲?/font> | 逻辑1 | L数量 |
?
2.异步通信的接收过E?/p>
接收端以“接收时钟”和“L特率因子”决定一位的旉长度。下面以波特率因子等?6Q接收时钟每16个时钟周期,使接收移位寄存器UM一ơ)、正逻辑Z说明Q如?所C?br />
?
Q?Q开始通信Ӟ信号UؓI闲Q逻辑1Q?当检到??的蟩变时Q开始对“接收时钟”计数。
Q?Q当计到8个时钟时Q对输入信号q行,若仍Z电^Q则认q是“v始位”BQ而不是干C受?/p>
Q?Q接收端到起始位后Q隔16个接收时钟,对输入信h一ơ,把对应的g为D0位数据。若为逻辑1, 作ؓ数据?Q若为逻辑0Q作为数据位0?/p>
Q?Q再?6个接收时钟,对输入信h一ơ,把对应的g为D1位数据。?Q直到全部数据位都输入?/p>
Q?Q检校验位PQ如果有的话Q?/p>
Q?Q接收到规定的数据位个数和校验位?通信接口电\希望收到停止位S(逻辑1)Q若此时未收到逻辑1Q说明出C错误Q在状态寄存器中置“错误”标志。若没有错误Q对全部数据位进行奇偶校验,无校验错Ӟ把数据位从移位寄存器中送数据输入寄存器。若校验错,在状态寄存器中置奇偶错标志?/p>
Q?Q本q信息全部接收完,把线路上出现的高电^作ؓI闲位?/p>
Q?Q当信号再次变ؓ低时Q开始进入下一q的检?/p>
3、异步通信的发送过E?/p>
发送端以“发送时钟”和“L特率因子”决定一位的旉长度?/p>
Q?Q当初始化后Q或者没有信息需要发送时Q发送端输出逻辑1Q即I闲位,I闲位可以有L数量?/p>
Q?Q当需要发送时Q发送端首先输出逻辑0Q作v始位?/p>
Q?Q接着Q发送端首先发送D0位,直到各数据位发送完?/p>
Q?Q如果需要的话,发送端输出校验位?/p>
Q?Q最后,发送端输出停止位(逻辑1Q?/p>
Q?Q如果没有信息需要发送时Q发送端输出逻辑1Q即I闲位,I闲位可以有L数量。如果还有信息需要发送,转入W(2Q步?/p>
对于以上发送、接收过E应注意以下几点Q?/p>
Q?Q接收端L在每个字W的头部Q即起始位)q行一ơ重新定位,因此发送端可以在字W之间插入不{长的空闲位Q不影响接收端的接收?/p>
Q?Q发送端的发送时钟和接收端的接收旉Q其频率允许有一定差异,当频率差异在一定范围内Q不会引h收端错位,能够正确接收。ƈ且这U频率差异不会因多个字符的连l接收而造成误差累计Q因为每个字W的开始(起始位处Q接收方均重新定位)。只有当发送时钟和接收旉频率差异太大Q引h收端采样错位Q才造成接收错误?/p>
Q?Qv始位、校验位、停止位、空闲位的信P由“发送移位寄存器”自动插入。在接收方,“接收移位寄存器”接收到一帧完整信息(起始、数据、校验、停止)后,仅把数据的各位送至“数据输入寄存器”,即CPU从“数据输入寄存器”中d的信息,只是有效数字Q不包含起始位、校验位、停止位信息?/span>
1、同步通信方式的特点:
采用同步通信Ӟ许多字W组成一个信息组Q这P字符可以一个接一个地传输Q但是,在每l信息(通常UCؓ帧)的开始要加上同步字符Q在没有信息要传输时Q要填上I字W,因ؓ同步传输不允许有间隙。在同步传输q程中,一个字W可以对??位。当Ӟ对同一个传输过E,所有字W对应同LCQ比如说n位。这P传输Ӟ按每n位划分ؓ一个时间片Q发送端在一个时间片中发送一个字W,接收端则在一个时间片中接收一个字W?br />同步传输Ӟ一个信息中包含许多字W,每个信息帧用同步字符作ؓ开始,一般将同步字符和空字符用同一个代码。在整个pȝ中,׃个统一的时钟控制发送端的发送和I字W用同一个代码。接收端当然是应该能识别同步字符的,当检到有一串数位和同步字符相匹配时Q就认ؓ开始一个信息Q于是,把此后的C作ؓ实际传输信息来处理?
2、面向字W的同步协议QIBM的BSC协议Q?/b>
该协议规定了10个特D字W(UCؓ控制字符Q作Z息传输的标志。其格式?br /> SYN SOH 标题 STX 数据?ETB/ETX 块校?br /> SYNQ同步字W(Synchronous characterQ,每可加1个(单同步)?个(双同步)同步字符?
SOHQ标题开始(Start of HeaderQ?br /> 标题QHeaderQ包含源地址Q发送方地址Q、目的地址Q接收方地址Q、\由指C?br /> STXQ正文开始(Start of TextQ?br /> 数据块:正文QTextQ,由多个字W组成?br /> ETB:块传输结束(end of transmission blockQ, 标识本数据块l束?br /> ETXQ全文结束(end of textQ,Q全文分q块传输Q?br /> 块校验:对从SOH开始,直到ETB/ETX字段的检验码?br /> 3、面向bit的同步协议(ISO的HDLCQ?/b>
一帧信息可以是L位,用位l合标识帧的开始和l束?帧格式ؓQ?br /> F?A?C?I?FC?F?br /> F场:标志?作ؓ一帧的开始和l束Q标志字Wؓ8位,01111110?
A场:地址场,规定接收方地址Q可?的整倍位。接收方查每个地址字节的第1位,如果?0"Q则后边跟着另一
个地址字节。若?1"Q则该字节ؓ最后一个地址字节?br /> C场:控制场。指CZ息场的类型,8位或16位。若W?字节的第1位ؓ0Q则q有W?个字节也是控制场?br /> I场:信息场。要传送的数据?br /> FC场:帧校验场?6位@环冗余校验码CRC。除F场和自动插入?0"位外Q均参加CRC计算?br /> 4、同步通信?0位插入和删除技?
在同步通信中,一帧信息以一个(或几个)Ҏ字符开始,例如QF?01111110B?br />但在信息帧的其他位置Q完全可能出现这些特D字W,Z避免接收Ҏq些Ҏ字符误认为的开始,发送方采用?位插入技?Q相应地Q接收方采用"0位删除技??br /> 发送方?位插入:除了起始字符外,当连l出??Ӟ发送方自动插入一?。得在整个信息帧中Q只有v始字W含有连l的6??br /> 接收方的"0位删除技?Q接收方收到q箋6?Q作为的v始,把连l出??后的0自动删除?br /> 5、同步通信?字节填充技?
N要传送的原始信息帧ؓQ?br /> SOT DATA EOT
节填充技术采用字W替换方式,使信息的DATA中不出现起始字符SOT和结束字WEOT?
设按下表方式q行替换Q?br /> DATA中的原字W? 替换?br /> SOT ESC X
EOT ESC Y
ESC ESC Z
其中QESC=1AHQX、Y、Z可指定ؓL字符Q除SOT、EOT、ESC外)?br /> 发送方按约定方式对需要发送的原始帧进行替换,q把替换后的新的帧发送给接收斏V例如图所C:
接收ҎU定方式q行相反替换Q可以获得原始信息?br /> 6、异步通信和同步通信的比?/b>
Q?Q异步通信单,双方旉可允怸定误差。同步通信较复杂,双方旉的允许误差较?br /> Q?Q异步通信只适用于点<--> 点,同步通信可用于点<--> 多?br /> Q?Q通信效率Q异步通信低,同步通信高?
W3Eval 的数学表辑ּ由数字、变量、操作符、函数和括号l成。除了缺省的十进制计数制?W3Eval q支持二q制、八q制和十六进制。这些以其它计数制计数的数必M #
开_q紧?b
?o
或?h
来分别表CZq制、八q制或十六进制?
W3Eval 的变量是不限长度的大写字母和数字序列Q其首字W必L字母。W3Eval 有一些预定义的变量,不过它也支持用户定义的变量?/p>
W3Eval 支持带有固定或不定数量自变量的函数?函数可分Z下几l:
W3Eval 对表辑ּq行 语法分析Q也是指它识别辑ּ的算术成分,q将它们转化成语aW号QtokenQ,然后把它们放入向量。表辑ּ一旦处于这U状态,׃ؓ下面两步做好了准备:表达式检查和求倹{?
W3Eval ?W号QtokenQ?/i>是算术表辑ּ的组成部分; 记号QmarkQ?/i>是独立的字符Q??applet 使用Q作别各U符L内部标志。每U符h唯一?mark 与之对应。W3Eval 的表辑ּp 1 所C的W号l成?
Token | Mark | c?/b> |
十进制数 | Double | |
二进制数 | String | |
十六q制?/td> | String | |
八进制数 | String | |
变量 | Variable | |
函数 | Function | |
操作W?/td> | Operator | |
开括号 | String | |
闭括?/td> | String | |
逗号 | String |
用以表示函数、操作符和变量类的定义如清单 1 所C:
|
Token
cd清单 2 所C?
|
查正规表辑ּ正确性的所有代码都在一个独立的cM。详l的表达式检查能够确定错误确切的cd和位|?错误查有七类Q?/p>
括号查?/b>W3Eval 的表辑ּ可以包含三种括号Q标准圆括号、方括号和花括号。如果表辑ּ包含相同数量的开括号和闭括号Qƈ且每个开括号与一个相应的同种闭括L匚wQ则表达式的括号语法正确。三U括号在语义上等P如下面的代码D|C?
|
token 查?/b>查表辑ּ语法。确保表辑ּ所有部分都被认为是合法的?
表达式开头的?/b>Q请参阅 清单 4Q??/b>保表达式从合法的符号开始。不可以用操作符、逗号或闭括号作ؓ表达式的开始符?
|
表达式末查?/b>保表达式以合法W号l束。不可以用操作符、函数、逗号或开括号作ؓ表达式结束符?
W号序列的检查?/b>查表辑ּ中的W号序列。在下面的表gQ若 X 轴上的符号和 Y 轴上的符号对应的交界处用 X 作了记号Q则相应 X 轴上的符号可以接?Y 轴上W号的后面?
_ | D | B | H | O | V | F | P | ( | ) | Z |
D | _ | _ | _ | _ | _ | _ | ?/td> | _ | ?/td> | ?/td> |
B | _ | _ | _ | _ | _ | _ | ?/td> | _ | ?/td> | ?/td> |
H | _ | _ | _ | _ | _ | _ | ?/td> | _ | ?/td> | ?/td> |
O | _ | _ | _ | _ | _ | _ | ?/td> | _ | ?/td> | ?/td> |
V | _ | _ | _ | _ | _ | _ | ?/td> | _ | ?/td> | ?/td> |
F | _ | _ | _ | _ | _ | _ | _ | ?/td> | _ | _ |
P | ?/td> | ?/td> | ?/td> | ?/td> | ?/td> | ?/td> | _ | ?/td> | _ | _ |
( | ?/td> | ?/td> | ?/td> | ?/td> | ?/td> | ?/td> | _ | ?/td> | _ | _ |
) | _ | _ | _ | _ | _ | _ | ?/td> | _ | ?/td> | ?/td> |
Z | ?/td> | ?/td> | ?/td> | ?/td> | ?/td> | ?/td> | _ | ?/td> | _ | _ |
函数查?/b>保表达式中所有函数的自变量数量正?
逗号查?/b>逗号只能用于分隔函数的自变量。若用于表达式其它地方,׃合法?
只有能顺利通过以上概括的所有检查的表达式,W3Eval 才求倹{从而确保内Z W3Eval 中的前提条g不会出现问题。后面的法用于单步执行表达式求|
现在Q我们将更ؓ详细的查看算法的每一步,同时查看大部分有意思的代码片段?/p>
步骤 1Q?/b>为避免括L处理QW3Eval 定哪个子表辑ּ处于嵌套最q那对括号中。这Q务需要两步。第一步,W3Eval 必须扑ևW一个闭括号Q?
|
W二步,扑և与第一步找到的闭括L匚w的开括号Q如 清单 6 所C?/font>?
|
步骤 2Q?/b>要实现求值的单步执行QW3Eval 在嵌套最q那对括号中找Z先最高的操作W。(操作W的优先U已编码到 applet 中;请参?参考资?/font>以获取完整的代码清单。)
|
步骤 3Q?/b>如果表达式中不包含其它括P求值的q程完成。如果表辑ּ包含括号Q但不包含操作符Q则存在需要求值的函数?
|
步骤 4Q?/b>所有的操作W都是二元的Q也是说第一个操作数位于操作W之前,W二个操作符位于操作W之后?
|
操作数可以是变量Q还可以是十q制、十六进制、八q制或二q制数?/p>
清单 10. 获取操作?/b>
|
接下来的Ҏ不同计数制的数转化为十q制的Ş式?/p>
清单 11. 数转化为十q制?/b>
|
一旦确定操作数和操作符后,可以执行运了Q如 清单 12所C?
步骤 5Q?/b>在这步中QW3Eval 从向量中除去用过的符号ƈ在同一位置攑օl果。对于函数求DcL况,除去的是函数、括受自变量和逗号Q而对于操作符求DcL况而言Q除ȝ则是操作数和操作W?
步骤 6Q?/b>在求值的q一步,W3Eval 从表辑ּ中除d余括受?
|
步骤 7Q?/b>在求值的最后一步,向量中剩余的W号被结合到字符Ԍq在屏幕上显C?
|
![]() ![]() |
![]()
|
本文分析了一?applet Q它能一步一步的对算术表辑ּ求倹{同时还按顺序回了最有意思的代码片段Qƈ了两U不同的表达式求值方法?/p>
下一?W3Eval 有望在各斚w得到增强Q包括有能力d用户定义的功能;支持分数、复数和矩阵Q改良的囑Ş用户界面QGUIQ;大小和速度优化以及安全性方面的增强。我鼓励您提供您自己对于增强斚w的设惟?/p>
我希望您会发?W3Eval 是个对表辑ּ求值有益的在线工具Q它在某U程度上比经典的Ҏ更简单自然。我q期待这里谈到的代码和算法您明?Java 语言有助于处理数学问题?/p>
![]() ![]() |
![]()
|
![]() ![]() |
![]()
|
![]() | ||
![]() | Nikola Stepan ?ABIT Ltd. 的Y件工E师Q他在那里从事银行业软g的设计和开发。他有广博的信息pȝ斚w的学术背景和丰富的编E经验(从低U编E到信息pȝQ。他特别喜欢面向对象~程语言、关pL据库、因特网~程和系l编E。他?1999 q在克罗C Varazdin ?Faculty of Organisation and Informatic 获得信息pȝ学士学位。他会说克罗C语、英语和一点d语。请通过 nikola.stepan@vz.tel.hr?Nikola 联系? |