AUTOSAR —— NVM 5:数据处理机制

7 篇文章 63 订阅
订阅专栏

本文根据AUTOSAR4.4(Classic Platform)(https://www.autosar.org/standards/classic-platform/classic-platform-440/)标准中的 :

AUTOSAR_EXP_NVDataHandling.pdf

文章整理。仅为个人理解,不当之处,还请指正,感谢!

 

目录

1 Acronyms and abbreviations

2 NvM Stack Overview​

3 支持的同步机制(Synchronization Mechanism)

3.1 Implicit synchronization

3.2 Explicit synchronization

4. 其他机制

4.1 CRC 机制

4.2 错误恢复

4.2.1 对于 Read 操作的错误恢复机制

4.2.2 对于 Write 操作的错误恢复机制

4.3 写验证

4.4 NvMSetRamBlockStatusApi

4.4.1 During startup phase (NvM_ReadAll)

4.4.2 During shutdown phase (NvM_WriteAll)

4.5 Resistant to changed software



1 Acronyms and abbreviations

Abbreviation /
Acronym:
Description:
NvMNVRAM Manager
NVNon-volatile
NVRAMNon-volatile Random Access Memory
NVRAM BlockThe NVRAM Block is the entire structure, which is needed to
administrate and to store a block of NV data.
NV BlockThe NV Block is a Basic Storage Object. It represents the part of a
“NVRAM Block” which resides in the NV memory
RAM BlockThe RAM Block is a Basic Storage Object. It represents the part of a
“NVRAM Block” which resides in the RAM.
RAM MirrorRAM mirrors are NvM internal buffer used for operations that read and
write the RAM block of NVRAM blocks with
NvMBlockUseSyncMechanism set TRUE.
ROM BlockThe ROM Block is a Basic Storage Object. It represents the part of a
“NVRAM Block” which resides in the ROM.
ROMRead-Only Memory
RTERuntime Environment
SW-CSoftware Component
AppApplication
RTERun Time Environment

 

2 NvM Stack Overview

上图同时展示了整个 NvM Stack 的构成。

如上图所示,AUTOSAR规定,App只能通过NvM(NVRAM Manager)来访问NV Memory(比如FLASH)。

 

3 支持的同步机制(Synchronization Mechanism)

 

根据App对NvM Block‘’s RAM的访问方式,数据同步机制可以分为两种:

  1. 隐式同步(Implicit synchronization)
  2. 显示同步(Explicit synchronization)

3.1 Implicit synchronization

AUTOSAR规范:在隐式同步机制下,一个NvM Block的 RAM 被映射到一个固定的 SWC,不建议共享RAM。 每当SW-C使用RAM block(temporary/permanent)访问NVRAM时,都必须确保RAM块的数据一致性,直到NvM完成正在进行的操作为止。

说人话:

在隐式同步机制下,RAM block 和 SWC 之间是一一对应的关系,其他SWC不能访问该RAM。SWC要保持数据的一致性是说,从SWC调用NvM接口到NvM内部操作完成前,SWC不能再改变该RAM中的值。但是该RAM可以被read。

补充(个人理解):

temporary RAM:一般指局部变量;

permanent RAM:一般指全局变量。

使用隐式同步机制时分参考步骤:


3.2 Explicit synchronization
 

AUTOSAR 规范:在显式同步中,NvM会定义一个RAM mirror,用于与App的RAM block交换数据。 App将数据写入RAM block,然后调用NvM Write API(NvM_WriteBlock / NvM_WritePRAMBlock)。 NvM 调用API(NvMWriteRamBlockToNvM)将数据从 RAM Block 拷贝到RAM Mirror,进而写入 NV Block。

 

显示同步的优点:

  1. App可以更好地管理自己的RAM block。在App调用NvM_WriteBlock / NvM_WritePRAMBlock 到NvM 调用NvMWriteRamBlockToNvM()这段期间,App仍然可以修改RAM block中的数据。
  2. 几个SWC可以共享一个NvM Block;

 

显示同步的缺点:

  1.  浪费内存:除了RAM block,又多了一个RAM Mirror(additional RAM),且RMA Mirror需要和使用显示同步机制的最大的NvM Block 具有相同的大小;
  2. 多了一步RAM间的拷贝操作:即多了RAM block 和 RAM mirror之间的拷贝操作;

 

4. 其他机制

4.1 CRC 机制

NvM模块内部使用CRC生成例程(8/16/32bit)来对 NvM Block 进行相关的检查。当然是否使用CRC是可以配置的。NvM模块内的配置选项为 NvMBlockUseCRCCompMechanism,启用后,如果将要写入的数据(即RAM中的数据)没有改变,则NvM写入请求会被跳过。 基于此,使用CRC的风险在于:如果RAM中的数据内容改变了,但是改变前后计算得出的CRC一致,就会导致数据无法正常写入。因此,此选项应仅用于可以容忍此风险的 NvM Block 。

 

4.2 错误恢复

4.2.1 对于 Read 操作的错误恢复机制

1. 隐式错误恢复:

NvM 模块对于 Native 和 Redundant 类型的NvM Block 的 Read 操作提供隐式的错误恢复机制,即如果配置了 NvMRomBlockDataAddress 或者NvMInitBlockCallback,则加载对应的默认数据。

 

2. 显示错误恢复:

对于任何管理类型(NATIVE,Redundant,dataset)的NvM Block,如果其配置了ROM数据,都可以使用显示数据恢复机制来恢复数据,方法是调用 NvM_RestoreBlockDefaults()这个API。当然,对于 Dataset类型的NvM block,在调用API之前必须设置相应的Index(指向ROM Block)。
 

3. 其他

NvM 模块对于Redundant 类型的NvM Block 的 Read 操作还提供一种错误恢复机制,即将默认数据加载到RAM中。

 

4.2.2 对于 Write 操作的错误恢复机制

即重新重写写操作,不区分NvM Block的管理类型。


4.3 写验证

写验证即为,将RAM block中的数据写入NV block后,立刻将其回读并与RAM Block的原数据内容做比较,如果比较结果不一致:则再次执行写操作,如果启用DET,则同时回向DEM模块报告错误 NVM_E_VERIFY_FAILED;

如果回读比较失败,则不会再次执行读操作。

 

4.4 NvMSetRamBlockStatusApi

4.4.1 During startup phase (NvM_ReadAll)

对于某些NVRAM块,可能需要保留相应RAM块的数据内容,以免其在NvM_ReadAll() 期间被覆盖,尤其是在NV块中的数据早于RAM块中的数据的场景下(例如当RAM中的数据尚未写入NV block时发生了热复位)。 在这种情况下,必须将RAM block分配在复位安全(non-initialized)的RAM区域中,并且必须将配置参数CalcRamBlockCrc==TRUE 和 NvMSetRamBlockStatusApi==TRUE。(·CalcRamBlockCrc==TRUE,意味着相应的NV块也具有/具有 CRC配置)

每当RAM中的数据发生变化时都需要调用NvM_SetRamBlockStatus(blockID,TRUE),NvM 模块会重新计算RAM中的CRC并将其存储在一个内部变量(该变量存储在 reset-fase 区域)。当然前提 NVRAM Block 配置了PIM或启用显示同步机制。

在ReadAll()期间,会重新计算RAM的CRC,如果计算得出的CRC和之前存储的CRC一致,则RAM block的内容不会改变。如果不一致,则会将NV Block中的值读到RAM中(即RAM会重写),如果读失败,则会将使用默认数据恢复RAM(即将ROM中的值读到RAM中或者调用InitBlock )

4.4.2 During shutdown phase (NvM_WriteAll)

如果 NvMSetRamBlockStatusApi == FALSE,则 NvM_WriteAll() 会将所有 NVRAM Block 的RAM的内容拷贝到 NV Block中。当然前提是的这些 NVRAM Block 的要求配置: NvMSelectBlockForWriteAll ==TRUE 并且 配置了NvMRamBlockDataAddress 或者使用显示同步机制。

当然,为了提高 NvM_WriteAll() 的速度,我们可以将那些只有 RAM Block的内容发生变化的 NVRAM Block写到 NV Memory中,这就需要配置 NvMSetRamBlockStatusApi==TRUE。这种场景下,每当 RAM中的内容发生变化时,用户就需要调用 NvM_SetRamBlockStatus(BlockID, TRUE),从而告诉 NvM 模块在 NvM_WriteAll()时要处理该 NVRAM Block。

 

4.5 Resistant to changed software

NvM 模块的 start-up(即NvM_ReadAll() 的处理过程)行为受2个配置参数 NvMDynamicConfiguration 和 NvMResistantToChang 的影响。

在ECU项目中,如果如何处理NVRAM block的配置变更并不重要,则必须配置参数 NvMDynamicConfiguration==FALSE。对于每个NVRAM Block 的配置参数NvMCalcRamBlockCrc:

  1. NvMCalcRamBlockCrc == FALSE,直接检查NV block 的有效性(validty)。 如果检测结果为:
    1. NV Block有效,则将NV block中的数据加载到 其对应的RAM Block。
    2. NV Block无效,则将默认数据加载到RAM中(默认数据通过参数NvMRomBlockDataAddress或参数NvMInitBlockCallback进行配置)。
  2. NvMCalcRamBlockCrc == TRUE ,NvM首先检查其 RAM block 的有效性(validty)。 如果检测结果为:
    1. RAM block内容有效,不再检查NV block 的有效性,也不再从NV Block加载数据。
    2. RAM block内容无效,则继续检查NV block 的有效性。 如果:
      1. NV Block无效,则将默认数据加载到RAM中(默认数据通过参数NvMRomBlockDataAddress或参数NvMInitBlockCallback进行配置)。
      2. NV Block有效,则将NV block中的数据加载到 其对应的RAM Block。

如果更改了NVRAM block 的配置,而已经存储在NV memory(比如FLASH)中的 NV block 仍与旧配置相对应,则在NvM_ReadAll()过程中可能会出现严重问题。 例如,当添加新的NVRAM块时,许多其他块的标识符可能会隐式更改,这可能导致从NV存储器读取错误的数据。

在这种情况下,可以配置NvM模块,使其不使用NV memory 中的数据初始化RAM block。即配置参数 NvMDynamicConfiguration == TRUE。 这时候集成商要修改配置参数NvmCompiledConfigID 从而告诉 NvM模块 NVRAM配置已经更改。 NvM模块使用单独的NVRAM block 将 NvmCompiledConfigID 的值存储在NV memory中。 每次执行启动过程(NvM_ReadAll)时,NvM模块都会将存储在NV memory中的值与配置参数NvmCompiledConfigID的值进行比较。 如果两个值不相同,则NV memory 中的值将在下一个shutdown过程(NvM_WriteAll)中被新的配置值所覆盖。

在这种情况下,NvM 在 NvM_ReadAll()过程中会根据配置参数 NvMResistantToChangedSw 来决定如何初始化 NVRAM Blocks:

  1. NvMResistantToChangedSw == FALSE:不管 RAM Block是否有效,都将忽略NV Block中的值,使用默认数据(ROM或InitBlockCallback)加载RAM Block,则必须配置 ;
  2. NvMResistantToChangedSw == TRUE:必须将 NV Block中的数据加载到RAM中,即便是在配置变更的情况下。如此,NvM模块会像没有发生配置变更一样处理 NvM_ReadAll()。

因此,一旦将某个 NVRAM Block 配置为  NvMResistantToChangedSw == TRUE,则集成商必须确保在ECU的整个生命周期内不得更改以下配置参数,否则可能将无法成功地从NV memory 中恢复数据:

  •  NvMResistantToChangedSw (must not be changed from TRUE to FALSE)
  •  ShortName
  •  NvMBlockUseCrc
  •  NvmBlockCrcType (if NvMBlockUseCrc is set to TRUE)
  •  NvMStaticBlockIDCheck
  •  NvmNvramDeviceId
  •  NvmBlockManagementType
  •  NvmNvBlockLength
  •  NvmNvBlockBaseNumber
     

注意:根据所使用的NvM,Fee和Ea模块的具体实现,可能会施加其他约束。 请参考相应的用户手册。

 

总结一下:

NvMNvM_ReadAll()的过程如下:

  1. 首先检查NvmCompiledConfigID,看从NV Block中读出的ID和现在配置的ID(RAM中)是否一致:
    1. 一致,认为没有发生配置变更,正常加载所有NVRAM Block。
    2. 不一致,认为发生了配置变更,首先检查配置参数 NvMDynamicConfiguration:
      1. NvMDynamicConfiguration == FALSE,配置已变更,不会读取NV Block中的值到RAM,使用默认数据(ROM或InitBlockCallback)加载RAM Block(具体过程待定,要结合NvM模块的具体实现);
      2. NvMDynamicConfiguration==TRUE,对于每一个 NVRAM Block,查看参数 NvMResistantToChangedSw:
        1. NvMResistantToChangedSw == FALSE,不管 RAM Block是否有效,都将忽略NV Block中的值,使用默认数据(ROM或InitBlockCallback)加载RAM Block;
        2. NvMResistantToChangedSw == TRUE,将 NV Block中的数据加载到RAM中,NvM模块会像没有发生配置变更一样处理 NvM_ReadAll()。

 

 

 

 

 

 

 

AutoSAR配置与实践(实践篇)13.3 NVM RAM CRC机制写时间优化(优化专项一)
nihaoljq2010的博客
07-15 823
a. 如果有CRC功能,每次写Nv的时候都要计算CRC并写入Nv(若CRC不同),若配置了“计算RAM CRC”,则同时把最新的CRC 更新到RAM中,以便后续使用(如在上电时判断CRC有效性)b. 启动时候计算RAM BLOCK数据的CRC,计算结果和RAM BLOCK本身存储的CRC比较,如果CRC相同,则不再从FLASH中取。从以上的NvM_ReadAll执行步骤可以判断如下场景,数据一定从NV Block加载数据,从而使取数据耗费较长时间。基于第二项的优化方向,可以从如下几个角度去实施。
Autosar CP NvM模块标准
02-18
Autosar CP NvM模块标准
AUTOSAR NvM 基础篇(三)
weixin_46336143的博客
04-15 2271
今天主要讲第三种block type, Dataset block 这种类型的block,我们需要把NvMBlockManagementType 设置为NVM_BLOCK_DATASET。对于这种block,我们可以分配一个甚至多个ROM data block。 具体的NV block的数量由NvMNvBlockNum来决定,每个NV block的地址也是通过和NvMNvBlockBaseNumber以及index一起决定,第一个NV block 就是0,最后一个block的index就是NvMNvBl
Aurosar-NVM
最新发布
weixin_43373609的博客
05-08 991
如果在配置时没有可用的默认数据,则应用程序应负责提供默认的初始化数据。:在执行NvM_ReadAllNvM_WriteAll期间,启用切换内存驱动程序到快速模式的预处理程序切换。:在NVRAM管理器中启用/禁用轮询模式的预处理程序开关,同时禁用/启用较低层可以使用的回调函数。:定义ROM块数据的起始地址,如果未配置,则所选的块管理类型没有可用的ROM块。:在延迟当前操作之前,允许应用程序在NvM模块的镜像中复制数据的重试次数。:RAM块起始地址,若为配置则所选的块管理类型没有可用的永久RAM数据块。
[.小白一枚.]Autosar_Bootloader学习笔记_1
.小白一枚.的博客
01-16 1129
TransferData服务请求包括一个blockSequenceCounter,以便在多个TransferData请求的序列中,如果TransferData服务失败,可以改进错误处理。这意味着在RequestDownload (Ox34)或RequestUpload (Ox35)请求消息之后的第一个TransferData (Ox36)请求消息以1的blockSequenceCounter开始。客户端使用TransferData服务将数据从客户端传输到服务器(下载)或从服务器传输到客户端(上传)。
【小猫爪】AUTOSAR学习笔记16-Memory Stack之Nvm模块
Oushuwen的博客
03-21 3320
这一节开始来介绍一下在AUTOSAR架构中一个非常重要的部分,那就是存储系统,即AUTOSAR的Memory Stack。
AutoSAR NvM 问题分析
qq_43370254的博客
05-01 1273
NvM模块在开发阶段还是很简单的,配置项并不太多,但因为随着NvM版本的迭代,遇到问题还是很难调查解决的,协议栈是没有问题的。根源:各家配置工具对NvM协议的架构不同和相关的配置项介绍模糊不够具体,导致我们对配置的理解不够透彻,导致配置项选错,出现了一些奇怪的问题。
AUTOSAR NVM 显性和隐性同步
weixin_46336143的博客
05-07 1576
显性同步 显性同步是NVM 默认的机制,缺点是application之间分享相同的资源并同步比较难保证。 Application需要遵循的规则如下: Single-block write requests NvM_WriteBlock() and NvM_WritePRAMBlock(): Application提供一个RAM block,里面放要写进NV memory的数据,然后trigger 一个write request。 在NVM写完之前,不可以修改RAM block的内容,但是数据是可
Autosar模块介绍:Memory_2(NVM)
u012406840的博客
11-10 1235
NVM模块简介
[AutoSar]NVM模块介绍和使用说明
汽车-嵌入式-工作笔记-autosar
09-18 1248
autosar NVM模块介绍和使用说明
AUTOSAR NvM 基础篇(一)
weixin_46336143的博客
04-03 7249
NvM block model 一个block就是以字节为单位的连续的序列,他可以被细分为Data block和CRC block,Data block用于存放user data, CRC block则存放根据userdata算出的对应的checksum。 根据block存放的位置不同,我们可以将block分为以下三种: ►ROM block ► permanent RAM block ► temporary RAM block 如果一个block位于rom,那么他就叫ROM data bloc
Vector AUTOSAR Components BSW模块:NvM.zip
04-13
Vector AUTOSAR Components各个BSW模块。 1、BSWMD文件:存放arxm文件; 2、Documentation文件:存放关于BswM模块相关配置的说明文档pdf; 3、GeneratorMsr文件:BswM生成相关的工具文件*.jar; 4、Implementation...
Autosar NVM存储管理
03-18
4. 错误检测和纠正:NVM存储管理模块提供了错误检测和纠正机制,确保了数据的完整性和正确性。 5. 配置和监控:NVM存储管理模块提供了配置和监控功能,允许开发人员配置和监控NVM存储管理模块的行为。 Autosar ...
Vector AUTOSAR Components BSW模块:vMemAccM.zip
04-13
Vector AUTOSAR Components各个BSW模块。 1、BSWMD文件:存放arxm文件; 2、Documentation文件:存放关于BswM模块相关配置的说明文档pdf; 3、GeneratorMsr文件:BswM生成相关的工具文件*.jar; 4、Implementation...
Vector AUTOSAR Components BSW模块:Cdd.zip
04-13
Vector AUTOSAR Components各个BSW模块。 1、BSWMD文件:存放arxm文件; 2、Documentation文件:存放关于BswM模块相关配置的说明文档pdf; 3、GeneratorMsr文件:BswM生成相关的工具文件*.jar; 4、Implementation...
Autosar DEM 一 .初次了解 】
java ee人脸识别登录
03-18 4798
DEM全称diagnostic event manager,主要是用于处理诊断事件(如检测12伏电压是否异常)和存储相关数据(如扩展数据、冻结帧等)。同时也给其他模块通过标准接口提供信息,如DCM可以通过 Dem_ReturnGetStatusOfDTCType Dem_DcmGetStatusOfDTC( uint32 DTC, Dem_DTCOriginType DTCOrigin, uint8* DTCStatus) 这个标准接口同步或异步的取到指定的DTC的故障状态。 下面将从以下几个方面,感性.
AUTOSAR NvM 同步机制
weixin_42967006的博客
05-16 2727
把Nv Block中的数据copy到NvM_DstPtr指向的RAM中,NvM_DstPtr可以是临时RAM,也可以是永久RAM(永久RAM即配置工具中配置的RAM Block)。如果NvM_DstPtr是NULL_PTR,且配置了永久RAM,那么数据被copy到永久RAM中。
AutoSAR配置与实践(深入篇)7.5 NVM架构、存储形式及隐式显式同步
nihaoljq2010的博客
06-28 3035
模块简介:全称NVRAM Manager ,存储服务管理模块。主要提供抽象数据存储,在上电取下电存储数据,支持Immediately存储数据,将 NV data在ROM和RAM之间建立关联。全称Memory Abstraction Interface,存储抽象接口模块。实现存储数据Block在内部Flash或者外部EEP的分离操作。全称Flash EEPROM EMULATION,FLASH模拟模块。FEE实现对Flash的数据Block的抽象和动态数据的Layout。
AutoSAR配置与实践(深入篇)7.3 NVM主要接口、模块交互和数据流向(详细)
nihaoljq2010的博客
07-11 1662
通常AUTOSAR闪存驱动程序(FLS)是一个软件模块,在用于AUTOSAR存储器堆栈内的使用中是可配置的,可以选择使用带有vMem模块的MICROSAR内存堆栈。内存堆栈可供内存的一个用户使用,但是有时系统中有访问Flash的其他用户,例如软件下载用户同时使用存储器堆栈;许多设备不允许并行闪存访问,因此AUTOSAR存储器堆栈必须与其他用户同步,因此产生了扩展内存堆栈。vMem提供了基本Read/Write/Erase/State check等功能,功能类似传统的FLS驱动程序。
autosar nvm 存储机制
01-26
Autosar NVM(Non-Volatile Memory)存储机制是指在Autosar架构中用于存储非易失性数据的一种机制NVM存储机制被广泛应用于汽车电子控制单元(ECU)中,用于存储和恢复数据,例如错误码、校准参数和故障诊断信息等。 Autosar NVM存储机制的关键特点之一是非易失性,这意味着即使主电源断电,存储在NVM中的数据也不丢失。这是因为NVM使用了特殊的存储技术,例如闪存和电池备份等。这使得NVM成为存储关键数据的理想选择,因为它可以确保数据的长期存储和可靠性。 另一个重要的特点是数据的可擦写性和可取性。这意味着ECU可以根据需要随时取和写入NVM中的数据。由于汽车控制系统的需求经常变化,这种灵活性非常重要。例如,ECU可能需要存储新的校准参数或更新的软件版本等。 Autosar NVM存储机制还支持数据的保护和安全性。它提供了一些机制来防止数据的非授权访问和篡改。例如,使用访问控制机制对数据进行保护,确保只有授权的应用程序可以取和写入数据。 最后,Autosar NVM存储机制还具有高度的可扩展性和兼容性。它可以与不同类型的NVM设备进行交互,例如闪存、EEPROM和FRAM等。这使得它能够应用于多种不同的汽车控制单元,并在不同的汽车制造商之间实现兼容性。 总之,Autosar NVM存储机制是一种用于存储非易失性数据的高度可靠和可扩展的机制。它的特点包括非易失性、可擦写性、可取性、数据保护和可扩展性。通过使用Autosar NVM存储机制,汽车控制系统可以更可靠地存储和恢复重要的数据,以实现更安全和高效的车辆控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • VS Code 搭建 C/C++ 编译环境(clang) 14512
  • AUTOSAR —— NVM 1 11944
  • AUTOSAR —— NVM 5:数据处理机制 10392
  • AUTOSAR —— NVM 2 9811
  • 3 Tesseract-ocr 系列 : 安装 jTessBoxEditor,结合tesseract-ocr-3.4 训练 4349

分类专栏

  • TriCore 4篇
  • RTOS 4篇
  • tools 3篇
  • C 2篇
  • 笔记 19篇
  • tesseract 4篇
  • training 1篇
  • ubuntu 8篇
  • OCR 2篇
  • java 1篇
  • opencv 1篇
  • Qt 1篇
  • fonts 1篇
  • 自动驾驶 3篇
  • AUTOSAR 7篇

最新评论

  • C语言笔记 1——原码,反码和补码

    做而论道_CS: 由补码换算到十进制数,也极其简单。 你只需记住:【补码首位的权,是负数】。 一般的八位二进制数,各个位的权是:   128、64、32、16、8、4、2、1; 如果是八位的补码,各个位的权则是:  -128、64、32、16、8、4、2、1。   例如,有一个补码:1110 0001, 它代表的十进制是:-128 + 64 + 32 + 1 = -31。 如果,另一个补码:0110 0001, 它代表的十进制是:0 + 64 + 32 + 1 = +97。 仅仅使用【进制转换】,不就完事了吗? ---------------- 正负数与其补码的互相转换,直接就可以转换了。 根本就用不着扯什么:原码反码取反加一! 谁要是跟着老外学算术,立刻、马上、直接,就掉坑里了!

  • C语言笔记 1——原码,反码和补码

    做而论道_CS: 哪有什么原码反码补码啊! 不过是【卖拐、忽悠】而已。 码长八位时,各码的表示范围如下。  原码:-127 ~ +127;  反码:-127 ~ +127;  补码:-128 ~ +127。 -128 只有补码,没有原码和反码!  没有原码,拿什么取反?  没有反码,拿什么加一? 既然取反加一不可用,那么,  -128 的补码,又是怎么来的?  是特殊规定的吗? 其实,各个数的补码,都是算出来的。 取反加一,并非是补码的来源。 计算机的字长,是固定的。 八位机、16 位机,每次计算,就是 8 位、16 位数。 而且,计算机中,只有加法器,没有减法器。 想要做减法,就要用【加上补码】来实现。 那么,45-45 = 0,八位机将如下计算:  0010 1101 + xxxx xxxx = 0000 0000。 其中的:xxxx xxxx,就是【-45 的八位补码】。 这个补码,到底是什么? 你自己也能推导出来。 先移项:xxxx xxxx = 0000 0000-0010 1101, 可得出:xxxx xxxx = (借位 1) 1101 0011, 只取八位结果,即:1101 0011。 至此,就求出了 [-45]补 = 1101 0011。 求负数的补码,就是这么简单! ----------------- 实际上,任意负数(-X)的补码,都是:0 - X。 你用二进制简单算一下,立刻就能得到结果。 (-128 的 8 位补码,也就是这样求出来的。) 同理,任意正数(+X)的补码,也都是:0 + X。 0 + X,不就是 X 吗? 所以,零和正数的补码,就是 X 本身! ----------------- 在计算机中,只有加法器,只能使用补码。 各个数的补码,都是由人工算出,再存入计算机。 所以,计算机中,根本就没有原码和反码。 不存在的东西,为什么还要讲、还要学、还要考研? 其实,计算机专家和老师,就是指望这个混饭吃! 顺便,再抓几个不及格的,抖一下威风。 大家都知道,老外的算术能力太差,  算个简单的数,都恨不得掰出脚趾头。 所以,计算机专家就编造了一套谎言:  机器数真值符号位原码反码补码正数三码相同  负数取反加一符号位不变符号位也参加运算模同余 ... 写这些,明显就是【拿个鞋拔子当做玉如意】。 假货,不仅仅在古董行业才有啊!

  • AUTOSAR —— NVM 2

    蜗牛山: nvm模块自己开辟buffer

  • AUTOSAR —— NVM 2

    吃拉面的小波: 你好,我看您写的隐式恢复中,不适用API,NvM模块默认提供,是什么意思?

  • AUTOSAR —— NVM 5:数据处理机制

    蜗牛山: 不能 优化nvm栈的实现机制,抬升任务优先级,缩短任务周期等

大家在看

  • 工程领域 之 广泛应用的正弦波(其导数和积分仍是正/余弦波) 147

最新文章

  • TriCore:Interrupt 3
  • TriCore:Interrupt 2
  • TriCore:Interrupt 1
2024年5篇
2022年5篇
2021年1篇
2020年4篇
2019年7篇
2018年1篇
2017年13篇

目录

目录

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司坑梓外贸网站制作光明关键词按天收费同乐建站观澜网站优化按天收费西乡网站关键词优化盐田seo网站优化木棉湾seo网站推广坂田阿里店铺运营宝安百度竞价永湖百度竞价包年推广布吉网站搜索优化木棉湾营销网站光明网站改版石岩网站关键词优化深圳企业网站设计东莞网站设计永湖企业网站改版坪山百度关键词包年推广松岗网站制作荷坳模板制作深圳外贸网站制作木棉湾建站龙华网页设计坪地网站定制同乐模板网站建设横岗网络广告推广坂田网站关键词优化盐田设计公司网站大芬百度竞价包年推广广州建网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化