parity

Uart接口TTL电平详解

馋奶兔 提交于 2020-12-29 05:17:15
Uart 接口的详细解释 我面试的时候一般喜欢问应聘者一个问题: UART 与 RS232/RS485 的区别与联系?很多人对于这个问题答得都不是很好。还有些人压根就没有想过这个问题,一直认为他们是同一个东西,就是咱们俗称的串口。 我刚入嵌入式的大门时,对这个问题也困惑过很久,后来终于弄明白了。跟大家一起分享一下吧。 简单来说,区别在于 UART 是一种接口,而 RS232/RS485 是一种总线。 UART 这个接口,后面可以接 TTL 电平,这就是我们俗称的普通的串口。而 UART 如果接了 RS232/RS485 的转换芯片,那么后面的总线上就是按照 RS232/RS485 规则来传输数据。 RS232/RS485 总线的具体规则我们后续再讨论,本篇主要详解 TTL 下的情况。 UART 接 TTL 电平时, +5V 等价于逻辑“ 1 ”, 0V 等价于逻辑“ 0 ”。 如下例子主要说明一下 UART 接 TTL 电平这种方式是怎么传输二进制数据的。这是我在项目中的一个例子,用 STM32F429 的 Uart4 口采集 TOF 模块测量得到的距离信息。 UART 的 Rx 连接测距模块 TOF 的 Tx 。 TOF 向 UART 发送了 0x32 0x33 0x6d 0x6d 0x0a 五个字节,对应的 ASCII 码是 23mm ,表示测到的距离。 0x32 0x33

杨福宇专栏 | 新车用CAN FD,你可能还会被忽悠!

China☆狼群 提交于 2020-12-17 15:06:15
杨福宇老师多年研究CAN总线在汽车中的应用,文章非常有实用价值,为了方便汽车行业的工程师关注杨老师的研究成果,本公众号特别开设了《杨福宇专栏》,敬请期待更多精彩内容。杨老师邮箱:yfy812@163.com,欢迎交流探讨! 当你的控制系统作功能安全评估时,不可避开通信系统的安全指标。ISO CAN FD已经对CAN的错帧漏检作了较多的修补,例如:更长的CRC多项式,可以把填充位也算进去,从而避免填充规则的不对称执行造成的收发位流的错位引起CRC计算中出现错误增多;引入了格雷码的填充位计数器及其奇偶校验位、格式校验位,以更多的校验来避免漏检。 但是这些措施依然有漏洞。这些漏洞造成的漏检率的数值分析异常冗长,这里仅把实例举出,让大家有一个基本的了解。 第一个出错的现象是关键字的读错未能查出来 在ISO CAN FD中有一位BRS用于切换位速率,如果这一位读错了,那么有可能发送节点以高速传送,而接收节点以低速读取。在一定条件下,他们最后又是对齐的,这就跳过了ISO CAN FD的补充检验。这是以前CAN没有的漏错场景,而且是只有一个错。 图1 BRS出错的收发的不同理解 图1中举了速度不同而对齐的情况,其中没有考虑增加填充位时传送对齐的例子,例如高速传送中加了填充位而低速读取时没遇到填充位规则的满足条件,或者反之,相信再花些力气总可以找到这样的例子,不过麻烦些。 以图1中2倍速为例

程序员需要了解的硬核知识之CPU

我怕爱的太早我们不能终老 提交于 2020-12-17 07:59:34
这是 Java 建设者的第 39 篇原创文章 大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。 CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。 它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。 通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。 此过程可以分为三个关键阶段: 提取,解码和执行 。 CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语: Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。 它可以随时读写(刷新时除外),而且速度很快

Solidity的三种合约间的调用方式 call、delegatecall 和 callcode

你离开我真会死。 提交于 2020-12-12 06:34:54
0x00 前言 Solidity(http://solidity.readthedocs.io/en/v0.4.24/) 是一种用与编写以太坊智能合约的高级语言,语法类似于 JavaScript。 Solidity 编写的智能合约可被编译成为字节码在以太坊虚拟机上运行。Solidity 中的合约与面向对象编程语言中的类(Class)非常类似,在一个合约中同样可以声明:状态变量、函数、事件等。同时,一个合约可以调用/继承另外一个合约。 在 Solidity 中提供了 call、delegatecall、callcode 三个函数来实现合约之间相互调用及交互。正是因为这些灵活各种调用,也导致了这些函数被合约开发者“滥用”,甚至“肆无忌惮”提供任意调用“功能”,导致了各种安全漏洞及风险: 2017.7.20,Parity Multisig电子钱包版本 1.5+ 的漏洞被发现,使得攻击者从三个高安全的多重签名合约中窃取到超过 15 万 ETH(https://blog.zeppelin.solutions/on-the-parity-wallet-multisig-hack-405a8c12e8f7) ,其事件原因是由于未做限制的 delegatecall 函数调用了合约初始化函数导致合约拥有者被修改。 2018.6.16,「隐形人真忙」在先知大会上演讲了「智能合约消息调用攻防」

What is the purpose of the Parity Flag on a CPU?

一个人想着一个人 提交于 2020-11-30 08:28:31
问题 Some CPUs (notably x86 CPUs) feature a parity flag on their status register. This flag indicates whether the number of bits of the result of an operation is odd or even. What actual practical purpose does the parity flag serve in a programming context? Side note: I'm presuming it's intended to be used in conjunction with a parity bit in order to perform basic error checking, but such a task seems to uncommon to warrant an entire CPU flag. 回答1: Back in the "old days" when performance was

What is the purpose of the Parity Flag on a CPU?

有些话、适合烂在心里 提交于 2020-11-30 08:23:12
问题 Some CPUs (notably x86 CPUs) feature a parity flag on their status register. This flag indicates whether the number of bits of the result of an operation is odd or even. What actual practical purpose does the parity flag serve in a programming context? Side note: I'm presuming it's intended to be used in conjunction with a parity bit in order to perform basic error checking, but such a task seems to uncommon to warrant an entire CPU flag. 回答1: Back in the "old days" when performance was

What is the purpose of the Parity Flag on a CPU?

家住魔仙堡 提交于 2020-11-30 08:22:45
问题 Some CPUs (notably x86 CPUs) feature a parity flag on their status register. This flag indicates whether the number of bits of the result of an operation is odd or even. What actual practical purpose does the parity flag serve in a programming context? Side note: I'm presuming it's intended to be used in conjunction with a parity bit in order to perform basic error checking, but such a task seems to uncommon to warrant an entire CPU flag. 回答1: Back in the "old days" when performance was

第四阶段组队训练赛第四场

∥☆過路亽.° 提交于 2020-11-03 02:27:08
题目来源:NAIPC2018 D: Missing Gnomes 题目描述 A family of n gnomes likes to line up for a group picture. Each gnome can be uniquely identified by a number 1..n written on their hat. Suppose there are 5 gnomes. The gnomes could line up like so: 1, 3, 4, 2, 5. Now, an evil magician will remove some of the gnomes from the lineup and wipe your memory of the order of the gnomes. The result is a subsequence, perhaps like so: 1, 4, 2. He then tells you that if you ordered all permutations of 1..n in lexicographical order, the original sequence of gnomes is the first such permutation which contains the

爱了爱了,这篇寄存器讲的有点意思

◇◆丶佛笑我妖孽 提交于 2020-10-25 12:56:12
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨cxuan 来源丨程序员cxuan 下面我们就来介绍一下关于寄存器的相关内容。我们知道, 寄存器 是 CPU 内部的构造,它主要用于信息的存储。除此之外,CPU 内部还有 运算器 ,负责处理数据; 控制器 控制其他组件; 外部总线 连接 CPU 和各种部件,进行数据传输; 内部总线 负责 CPU 内部各种组件的数据处理。 那么对于我们所了解的汇编语言来说,我们的主要关注点就是 寄存器 。 为什么会出现寄存器?因为我们知道,程序在内存中装载,由 CPU 来运行,CPU 的主要职责就是用来处理数据。那么这个过程势必涉及到从存储器中读取和写入数据,因为它涉及通过控制总线发送数据请求并进入存储器存储单元,通过同一通道获取数据,这个过程非常的繁琐并且会涉及到大量的内存占用,而且有一些常用的内存页存在,其实是没有必要的,因此出现了寄存器,存储在 CPU 内部。 认识寄存器 寄存器的官方叫法有很多,Wiki 上面的叫法是 Processing Register , 也可以称为 CPU Register ,计算机中经常有一个东西多种叫法的情况,反正你知道都说的是寄存器就可以了。 认识寄存器之前,我们首先先来看一下 CPU 内部的构造。 CPU

计算机系统基础:校验码知识笔记

丶灬走出姿态 提交于 2020-10-19 07:22:14
1、校验码概念 校验码主要是为了解决计算机各部件进行数据传输和交换,确保传送过程的正确无误,一是为了提高硬件电路的可靠性,二是提高代码的校验能力。通常会用校验码来检查传送的数据是否正确。 校验码编码分为两类:合法编码、错误编码。合理的设计错误编码和编码规则,可以在数据传输的时候发现某种错误是就会变成错误编码,从而达到检验错误的目的。 码距:指的是一个编码系统中任意两个合法编码之间至少有多少个二进制位不同。 常用的三种校验码:奇偶校验码、海明码、循环冗余校验码。 2、校验码分类 3.1 奇偶校验码(Parity Code) 奇偶校验码特点如下: 无论数据位多少位,校验位只有一位 数据位和校验位一共所含的1个数为奇数,称为奇校验 数据位和校验位一共所含的1个数为偶数,称为偶校验 原理:在数据传输前,我们会求一次校验位,传输后,会求一次校验位,那么,在奇偶校验中,我们通过比较这两个校验位是否相同,一般是采用异或的方式,若结果为1,则说明有奇数个错误,结果为0,则说明正确或者偶数个错误。 常见的奇偶校验码 :水平奇偶校验码、垂直奇偶校验码、水平垂直奇偶校验码。 3.2 海明码(Hamming Code) 设数据位是n位,校验位是k位,则n和k满足以下关系: 2^k-1>=n+k k 常取满足该关系的最小值。 选择题公式,可以记住 3个原则 海明码只能检测出2位错,纠1位错