首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将9位值写入字节数组(或EEPROM),而不浪费下一个字节中的剩余位

将9位值写入字节数组(或EEPROM),而不浪费下一个字节中的剩余位,可以使用位操作来实现。以下是一种可能的实现方式:

  1. 创建一个长度为2字节的字节数组,用来存储9位值。
  2. 使用位操作来将9位值写入字节数组。
  3. 首先,将字节数组的第一个字节的前7位清零,然后将9位值的前7位右移并与第一个字节进行按位或运算,将结果赋值给第一个字节。
  4. 然后,将字节数组的第二个字节的前7位清零,然后将9位值的后2位右移并与第二个字节进行按位或运算,将结果赋值给第二个字节。

以下是具体的实现代码(以Java语言为例):

代码语言:txt
复制
// 将9位值写入字节数组
public void write9BitValueToByteArray(byte[] byteArray, int value) {
    // 将第一个字节的前7位清零
    byteArray[0] &= 0x80;

    // 将9位值的前7位右移并与第一个字节进行按位或运算
    byteArray[0] |= (value >> 2) & 0x7F;

    // 将第二个字节的前7位清零
    byteArray[1] &= 0x80;

    // 将9位值的后2位右移并与第二个字节进行按位或运算
    byteArray[1] |= (value << 6) & 0xC0;
}

此实现方式能够将9位值写入字节数组,并且不会浪费下一个字节中的剩余位。在这个特定的场景中,没有特定的推荐腾讯云产品与之相关。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ESPcopter无人机源码分析.1

数组定义了 GPIO 寄存器,对应 PIN 脚 IO 复用,和 GPIO 对应序号。 例如:初始化一个 3 通道 PWM。...当然基于ArduinoESP8266也例外。但是,和真正Arduino板子不一样是,ESP8266采用方式是flash某一块4K存储模拟成EEPROM。至于为什么是4K呢?...commitflash eeprom地址4K 存储内容删除后才Buffer写入flash(也就是说就算你buffer只有4个字节,但是最终还是会刷新整个sector) 和标准EEPROM库不一样是...返回:无 注意点:写入数据只是写入到申请内存空间,并不是立刻写入到flash EEPROM其实是从外部flash存储器最末尾开辟4096字节空间 【write只写一个字节数据,所以数据应该在...但是size大小决定了内存空间剩余量以及回写快慢,所以根据具体情况来设置size 函数:end() 该功能用于写入flash,并且释放内存空间 参数:无 返回:无 注意点:end包含了写入

75620

【STM32】HAL库 STM32CubeMX教程十二—IIC(读取AT24C02 )

EEPROM存储器(掉电丢失),内部含有256个字节。...AT24CXX EEPROM Board模块默认为接地。所以A2~A0默认为000,最后一表示读写操作。所以AT24Cxx读地址为0xA1,写地址为0xA0。...发送要存储数据第一字节、第二字节、…注意在写数据过程,E2PROM每个字节都会回应一个“应答0”,老告诉我们写E2PROM数据成功,如果没有回应答,说明写入不成功。...所以,当我们在写多个字节时,写入一个字节之后,再写入下一个字节之前,必须延时5ms才可以 从AT24C02读数据 1,读当前地址数据 2、读随机地址数据 MCU先发送一个开始信号...: 从机寄存器地址 ,每写入一个字节数据,地址就会自动+1 MemAddSize: 从机寄存器地址字节长度 816 写入数据字节类型 8还是16 I2C_MEMADD_SIZE

3.9K31
  • EEPROM页写

    EEPROM页写,EEPROM内部低位地址自动加1,高位地址还是由主器件程序发出。 低位地址正好对应页大小,如三低位地址对应8个字节页地址0~7,这8个地址由EEPROM内部自动加1寻址。...所以主器件程序控制,需要用取余运算计算出写入字节地址,开始时未按页大小对齐字节数,以及最后剩余不足一页大小字节数,按字节写执行。中间N个满页大小字节,按页写执行。...如果写完一页,主器件程序控制没有把高位地址加1(也就是整个写地址加页大小),没有发送停止信号且继续发送数据,那么EEPROM会重新刷写该页。...按页写数据,不用每个字节都发送起始信号、写地址、停止信号等,提高了写入速度。

    1.1K10

    java.nio.heapbytebuffer_javastringbuffer和string区别

    下图就表示初始化了一个容量为16个字节ByteBuffer,其中每个字节用两16进制数表示: 向ByteBuffer写数据 手动写入数据 可以手动通过put(byte b)put(byte[...] b)方法向ByteBuffer添加一个字节一个字节数组。...val) 方法将对应 int long 进行转换。...该方法就是 position 到 limit 之间还未读取数据拷贝到 ByteBuffer 数组最前面,然后再将 position 移动至这些数据之后 limit 移动至 capacity...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站立刻删除。

    34820

    【工控技术】S7-200CPU掉电数据保持常见问题集

    S7-200电池卡不能充电,使用完毕就不能再用了,只能购买新电池卡了。 S7-200没有检测电池卡内剩余电量状态和这种功能。...图2 MB0—MB13如果在系统块设置成掉电保持区域,如图2红框中所示,并将系统块下载到CPU之后,则这14个字节数据在掉电瞬间会将数值写入EEPROM,如果掉电时间超过超级电容和电池保持时间之后...图3 3、使用SMB31和SMW32控制字来实现将V区数据存到EEPROM 特殊存储器字节31 (SMB31)命令S7-200V存储区某个复制到永久存储器V存储区,置SM31.7提供了初始化存储操作命令...回答:每次下载程序块/数据块/系统块或者执行一次SMB31.7置操作都算作对EEPROM一次写操作,所以请注意在程序中一定不要每周期都调用SMB31/SMW32用于数据写入EEPROM内,否则CPU...具体操作方法可参照如下例子,即使用SMB31/SMW32送完一个数据(字节/字/双字)之后,通过一个标志(如M0.0)来触发下一个SMB31/SMW32操作,之后需要将上一个标志清零,以用于下一次存储数据操作

    86120

    树莓派4B-SPI读写flash-FM25CL16B(同时支持FM25CL64等其它系列Flash)

    1024*16非易失性存储器(2048个字节)。...FM25L16数据在掉电后可以保存45年。相对EEPROM其他非易失性存储器,FM25L16具有结构更简单,系统可靠性更高等诸多优点。...与EEPROM系列不同是,FM25L16以总线速度进行写操作,无须延时。数据发到FM25L16后直接写到具体单元地址,下一个总线操作可以立即开始,无需数据轮询。...我们必须将BP1和BP0设置为0,才可以有写所有地址权限. 2.2 写寄存器(0x06)介绍 所有对内存数组写入都以WREN(0X06)操作码开头,下一个操作码是WRITE指令,这个操作码后面跟着一个双字节地址...地址前5将被忽略(最多存储2048字节),然后就可以一直写入数据.最后CS置高则完成写操作. 3.最终代码 #include #include #include

    1.4K20

    单片机通信之SPI通信

    (4)写保护寄存器WP为写保护,当WP=1,写保护,当WP=0未写保护,当对日历、时钟寄存器片内RAM进行写时WP应清零,当对日历、时钟寄存器片内RAM进行读时WP一般置1。...(3)SCLK – 时钟信号,由主器件产生 (4)/CS – 从器件使能信号,由主器件控制 数据输入输出:在控制指令字输入后下一个SCLK时钟上升沿时,数据被写入DS1302,数据输入从低位即位...(1)首先,与IIC类似,要单独编写读和写程序方便调用。写函数——在SCK为0时片选CE由低变高,开始传送八地址(注意是从低位开始),然后写入数据。读函数类似,不过有一个返回。...(2)编写好具体读写函数之后就是调用了。读出数据存放到数组里,如果要用数码管显示则要将数据进行相应处理转换,然后显示出来即可。...基本可以概括为 读:总线上数据存放到定义变量。 写:命令字节放到总线上。 在时序上,SPI 是不是比 I2C要简单多?

    1.1K20

    【STM32H7教程】第71章 STM32H7内部Flash应用之模拟EEPROM

    第3个参数必须是32字节整数倍,长度不是32字节整数倍时,最后几个字节补0写入。  ...第41到57行,先将32字节整数倍数据通过函数HAL_FLASH_Program编程,此函数每次可以固定编程32字节数据。   第60到79行,剩余不足32字节数据补0,凑齐32字节编程。...第3个参数是数据大小,单位字节。   返回: FLASH_IS_EQU               0   Flash内容和待写入数据相等,不需要擦除和写操作。...返回,0-成功,1-数据长度地址溢出,2-写Flash出错(估计Flash寿命到)。 注意事项:   第1个参数必须32字节对齐,即要编程Flash地址对32求余为0。  ...第3个参数必须是32字节整数倍,长度不是32字节整数倍时,此函数会将几个字节补0写入 71.4 模拟EEPROM驱动移植和使用 模拟EEPROM移植步骤如下:   第1步:复制bsp_cpu_flash.c

    1.9K10

    EEPROM详细分析

    本例EEPROM型号为AT24CM01,在电路引脚连接如下图所示: ? 1,该器件特性如下: 时钟支持标准模式(100KHZ),快速模式(400KHZ),极快速模式(1MHz)。...该EEPROM器件地址定义如下: 地址高4是预定义好为"1010",bit3,bit2根据引脚A2,A1连接电平来决定,在该设计,A2,A1均为0,bit1为寄存器地址最高位(A16...该EEPROM寄存器地址为双字节,定义如下 ? ? 首先发送寄存器地址高8字节地址,然后发送寄存器地址低8字节地址。...非应答信号(NAK):在连续读数据时,当读取完最后一个字节数据时,从机产生响应信号。...该器件支持3模式读操作: 当前地址读, 随机地址读, 顺序读取。 1,当前地址读 内部数据字地址计数器保存上次读写操作期间访问最后一个地址上增加一个地址。只要保持电源,此地址一直有效。

    1.4K40

    自定义类型:结构体,枚举,联合 (2)

    这个是不确定,所以说段是跨平台,不同编译器可能有所差异。当我们使用了30个bit,还剩下2个bit,但是下一个成员需要使用6个bit,那么剩下这2个bit用不用呢?...我们来测试一下,到底是怎样。结果是3,那么就是浪费了这剩余一个字节。  ...通过调试我们发现就是这样情况,那么我们猜测就是对,内存是从低位到高位使用,同时当剩余空间不够下一个成员使用时,就直接浪费掉,开辟新空间。...成员在内存从左向右分配,还是从右向左分配标准尚未定义。 4. 当一个结构包含两个位段,第二个段成员比较大,无法容纳于第一个剩余时,是舍弃剩余还是利用,这是不确定。...c是个数组,最大对齐数是按元素算,相当于放了5个char类型变量,那么最大对齐数就是1,i最大对齐数是4,那么就要浪费掉3个字节,就是8.

    13110

    4.6 51单片机-EEPROM存储芯片(AT24C02)

    AT24C02是一颗2kbit(256字节EEPROM。 实验板原理图上描述是24C16,实际实验板上使用具体芯片型号是AT24C02。...4.6.2 AT24C02介绍 AT24C02是一个2K串行EEPROM,内部含有256个字节空间。AT24C02内部有一个8字节页写缓冲器。...图4-6-4 AT24C02设备地址 AT24C02一个写周期时间为10ms,单片机向AT24C02传输数据时,AT24C02是数据暂存在8字节缓冲区里,单片机发送完数据之后需要等待10ms时间...,等待AT24C02缓冲区数据存到内部EEPROM里,存放到EEPROM之后,掉电才不会丢失。...函数参数: u16 addr 数据位置(0~255) u16 len 写入长度 u8 *buffer 存放即将写入数据 返回: 读到数据 */ void AT24C02

    2K40

    (32)STM32——SPI实验

    主机和从机都有一个串行移位寄存器串行寄存器写入一个字节来发起一次传输。 串行移位寄存器通过MOSI信号线字节传送给从机,从机也将自己串行移位寄存器内容通过MISO信号线返回给主机。...通过 SPI_CR1 寄存器 CPOL 和 CPHA ,可以用软件选择四种可能时序关系。 CPOL(时钟极性)控制传任何数据时时钟电平状态。此对主器件和从器件都有作用。...数据帧格式 移出数据时 MSB 在前还是 LSB 在前取决于 SPI_CR1 寄存器 LSBFIRST 。...每个数据帧长度均为 8 16 ,具体取决于使用 SPI_CR1 寄存器 DFF 。所选数据帧格式适用于发送和/接收。 其实就是我们上面也简单概括了一下。...256),该数不应该超过该页剩余字节数!!!

    60020

    SMBus学习记录

    丢失仲裁主机可以继续提供时钟脉冲,直到丢失仲裁字节完成为止。 在两个Master试图访问同一Slave情况下,仲裁可能会继续超过地址字节。在这种情况下,仲裁继续处理剩余传输数据。...命令参数和返回长度可能不同。访问不存在不受支持命令可能会导致错误情况。首先传输最高有效。 对于任何给定设备,有15种可能命令协议。从设备可以使用15个协议任何一个全部来通信。...ACK表示读取位置结束。 4.Write Byte/Word 写字节/字访问第一个字节是命令代码。接下来一个两个字节分别是要写入数据。在本例,主机发送从设备地址,后跟写入。...在命令代码之后,主机发出一个写字节计数(M),它描述了在消息第一部分还将写入多少字节。如果主机有6个字节要发送,字节计数字段为6(0000 0110b),后跟6个字节数据。...写入字节计数(M)可以为零。 消息第二部分是一个读取数据块,以重复开始条件开始,然后是从地址和读取下一个字节是读字节计数(N),它可能与写字节计数(M)不同。读取字节计数(N)可能为零。

    1.7K20

    STM32入门开发: 编写DS18B20温度传感器驱动(读取环境温度、支持级联)

    第 1、 2 个字节是温度转换后数据信息,第 3、 4 个字节是用户 EEPROM(常用于温度报警储存)镜像。在上电复位时其将被刷新。第 5 个字节则是用户第 3 个 EEPROM镜像。...Copy Scratchpad ( RAM 数据复制到 EEPROM ) [48H] 此指令 RAM 数据存入 EEPROM ,以使数据掉电丢失。...Recall EEPROM EEPROM 报警复制到 RAM) [B8H] 此指令 EEPROM 报警复制到 RAM 第 3、 4 个字节里。...这样 RAM 两个报警字节始终为 EEPROM 数据镜像。 11....注意:必须在读间隙开始 15uS 内读取数据才可以保证通信正确。 在通信时是以 8 “0”“1”为一个字节字节写是从低位开始

    2.2K30

    Linux应用开发【第十二章】I2C编程应用开发

    4) 数据帧格式 ​ SDA线上每个字节必须是8长,在每个传输(transfer)中所传输字节数没有限制,每个字节后面必须跟一个ACK。8数据,先传输最高有效(MSB)传输。...-q 使用SMBus“快速写入”命令进行探测。一般推荐。 -r 使用SMBus“接收字节”命令进行探测。一般推荐。 -F 显示适配器实现功能列表并退出。 -V 显示I2C工具版本并推出。...默认情况下,i2cget拒绝访问已经在内核驱动程序控制下设备。 -r 在写入之后立即读取它,并将结果与写入进行比较。 -y 取消交互模式。...掩码设置为1将从取出,而设置为0将从数据地址读取,从而由操作保存。...本例当前最大支持为8个字节 22 **返回:负数表示操作失败,其他为成功 23 */ 24 int eeprom_write(int fd, unsigned char dev_addr, unsigned

    3.7K31

    计算机组织结构(五) 内置存储器

    地址:单元唯一标识符(采用二进制). 地址空间:可唯一标识单元总数. 寻址能力: 存储在每个单元信息位数 大多数存储器是字节可寻址,执行科学计算计算机通常是64寻址....电容器是否存有电荷被解释称二进制1和0 需要定期刷新来维持数据,因为电容器有放电趋势 本质是模拟设备,因为电容可以存储一定范围内任何电荷,因此需要使用一个阈值来确定保存是1还是0....处理器地址和控制信号提供给存储器,表示存储器特定单元一组数据应当被读出写入DRAM....经过一段延时后,DRAM写入读出数据.在这段时间内,DRAM 执行各种内部功能,如激活行地址线列地址线高电容, 读取数据,以及通过输出缓冲数据输出,处理器只是等待,降低了性能....,比 EPROM 要快得多 可以擦除存储器某些块,但不能提供字节级擦除 相较于 EEPROM ,闪存与EPROM有一样高存储密度 芯片逻辑 可寻址单元 由拥有相同地址存储位元(memory cell

    75530

    树莓派I2C接口技术及Python SMBus串行I2C EEPROM应用编程

    (6)控制信号[R/nW] 控制信号占1,IIC主机发出读写控制信号,高为读、低为写(对IIC主机而言)。控制(方向)在寻址字节给出。...(7)地址信号 地址信号为从机地址,占7,称之为“寻址字节”(见表1)。 表1 寻址字节  下面对表1各字段进行说明。...总线在启动条件后被认为处于忙状态,在停止条件某段时间后,总线被认为再次处于空闲状态。如果产生重复启动条件Sr产生停止条件P,总线一直处于忙状态。 5....下面是用Python和Python SMBus库函数编写名为I2CAT24C02.py程序向AT24C02器件256字节单元顺序写入0~255,然后再顺序读取AT24C02字节单元并显示输出,程序清单见图...由图7和图8可知,读取AT24C02设备字节单元内容显示结果与写入到AT24C02设备字节单元数据完全相同。

    1.2K20

    stm32 spi协议_STM32库开发实战指南:基于STM32F4

    CPOL为’1’时就是下降沿采样,CPOL为’0’时就是上升沿采样) 所以说不能绝对说数据一定在上升下降沿采样,要看CPOL与CPHA他们组合起来就有四种结果。...关闭SPI(SPE=0),最后进入停机模式(关闭该模块时钟) 溢出错误 当主设备已经发送了数据字节从设备还没有清除前一个数据字节产生RXNE时,即为溢出错误。...FLASH简介 FLSAH 存储器又称闪存,它与 EEPROM 都是掉电后数据丢失存储器,但 FLASH存储器容量普遍大于 EEPROM,现在基本取代了它地位。...若写入未对齐地址数上写入数据数量不能超过256否则超出部分写入失败 5)读取数据 该地址在每个地址之后自动递增到下一个更高地址数据字节被移出。...当仅用于获取设备 ID 处于关机状态时,启动该命令通过 CS# 引脚驱动至低电平,然后移动指令代码“ABH”,后跟 3 个虚拟字节(空字节)。

    81020

    5分钟带你了解

    有些成员甚至只要3个比特就够了。如果给一个整形空间似乎有点多,这时就可以使用段。 一、什么是段又称为域是以为单位来定义结构体(联合体)成员变量所占空间。...a存10二进制为1010,a只有3个空间截断后存入010,b同理存入1100.到c时开始开辟8比特剩下空间不够所以剩下比特浪费掉,开辟一个新字节。存完后如下图。...对于vs环境内一个字节内从低位往高位放入数据,当剩下空间不够所以剩下比特浪费掉,开辟新空间。...,下一个段从下一个段存储单元(这里段存储单元经测试在VC环境下是4个字节)开始存放; 6)若段出现在表达式,则会自动进行整型升级,自动转换为int型或者unsigned int。...7)对位段赋值时,最好不要超过位段所能表示最大范围,否则可能会造成意想不到结果。 8)段不能跨类型存储,类型不同,也存在字节对应。 9)段不能出现数组形式。

    12410

    PHP内存池分析

    从操作系统分配内存后,PHP会根据前面的换算关系,内存块放到相应内存块,便于后续快速分配。...这样设计还会有个问题,可能会造成巨大内存浪费,如下标10管理1024-2047之间内存,如果释放一块长度为2046内存,但申请时候只要1030字节,则多余1016字节就白白浪费了,对于这个问题...举个例子,这时如果要申请2900字节内存,转成二进制为101101010100,从左往右第2为1,所以走到3100这里就返回了,不会分配到4093字节内存。...但是为了浪费内存,采用树+双向列表来管理,方便快速查找,也不会浪费太多内存。...4、内存分配时先从操作系统分配较大块内存,分配完后放入上述相应数组,方便下次使用。

    1.3K20
    领券