首页
学习
活动
专区
工具
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。...当然基于Arduino的ESP8266也不例外。但是,和真正的Arduino板子不一样的是,ESP8266采用的方式是将flash中某一块4K的存储模拟成EEPROM。至于为什么是4K呢?...commit将flash eeprom地址的4K 存储内容删除后才将Buffer写入flash中(也就是说就算你buffer只有4个字节,但是最终还是会刷新整个sector) 和标准的EEPROM库不一样的是...返回值:无 注意点:写入的数据只是写入到申请的内存空间,并不是立刻写入到flash中 EEPROM其实是从外部flash中存储器最末尾开辟的4096字节空间 【write只写一个字节的数据,所以数据的值应该在...但是size的大小决定了内存空间的剩余量以及回写的快慢,所以根据具体情况来设置size 函数:end() 该功能用于写入flash,并且释放内存空间 参数:无 返回值:无 注意点:end包含了写入

77320

【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: 从机寄存器地址字节长度 8位或16位 写入数据的字节类型 8位还是16位 I2C_MEMADD_SIZE

4.4K31
  • 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...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    35220

    EEPROM的页写

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

    1.1K10

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

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

    87820

    单片机通信之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.2K20

    【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

    2.1K10

    树莓派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

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

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

    13710

    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

    STM32快速读写AT24C16 代码 模拟I2C

    AT24C16总共2048字节,分为128页,每页16字节,地址范围是0~2047。 128页只需要7位地址,分为高3位和低4位,高3位在设备地址中,低4位在字节地址中。...(16字节) *调用: 底层I2C写函数 *被调用:外部调用 *形参: *pBuffer:指向写入缓存区 WriteAddr:要写入的地址 Len:写入数据长度 *返回值:无 *...*调用: *被调用:外部调用 *形参: WriteAddr:要写入的首地址 *pBuffer:指向写入缓存区 NumToWrite:写入的字节数 *返回值:无 *其他:快速模式 不用每次写一个字节就启动一次...%AT24CXX_Page_Size;//剩余需写入的字节数 while(NumOfPage--)//先按页写入 { AT24CXX_Write_Bytes...= 0)//还剩余字节 { AT24CXX_Write_Bytes(pBuffer,WriteAddr,NumOfSingle);//把剩下的字节写入

    5100

    (32)STM32——SPI实验

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

    66820

    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

    2.2K40

    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.9K31

    SMBus学习记录

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

    1.9K20

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

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

    77630

    树莓派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 个虚拟字节(空字节)。

    84920

    5分钟带你了解位段

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

    14810

    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.8K30
    领券