• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

24C02的写函数不明白

huihui163 2017-07-10 浏览量:2127
const u8 TEXT_Buffer[]={"WarShipSTM32 IIC TEST"};

#define SIZE sizeof(TEXT_Buffer)


AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);​                size到底为多少啊


void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)这个数据长度是不是就是字节的个数啊
{
while(NumToWrite--)
{
AT24CXX_WriteOneByte(WriteAddr,*pBuffer);
WriteAddr++;
pBuffer++;
}
}

void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len)为啥要写入数据的长度为2,4​
{  
u8 t;
for(t=0;t<Len;t++)
{
AT24CXX_WriteOneByte(WriteAddr+t,(DataToWrite>>(8*t))&0xff);
}    
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 捕获.JPG


    void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite)

    这个函数中,要写入的数据是u8指针pBuffer所指向的地址中的数据,而这个pBuffer是u8类型的,所以写入的长度就是字节的个数。
    如果pBuffer是u16,那么写入的应该是字的个数了。

    void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len)
    其中要写入的数据是u32的,就是4个字节的,所以Len应该是4,但如果DataToWrite只用到了16位,那么Len就是2.
    • 发布于 2017-07-10
    • 举报
    • 评论 4
    • 0
    • 0
huihui163 回复了 汉云:谢谢您的回答,如果我想写入12位AD转换的值ADCX,void AT24CXX_Write(u16 WriteAddr,(u8 *)ADCX,4?),比如这个AD值为2048,这个数据长度为4吧 回复
汉云 回复了 汉云:因为是12位ADC,只要占用16位,也就是2个字节就可以了,所以数据长度为2,但是你写4也没有错,只是有两个字节一直是0 回复
huihui163 回复了 汉云:你们回答的我都晕了,void AT24CXX_Write(u16 WriteAddr,(u16 *)ADCX,2),这样写对吗 回复
汉云 回复了 huihui163:对 回复

其他答案 数量:7

  •  SIZE=sizeof(TEXT_Buffer)  21个字节 TEXT_Buffer是定义的u8 一般也就是unsigned char

    u16 NumToWrite 这个数据长度 是就是字节的个数 因为你传入的数组参数是 U8类型的 所以不存在 word 或者 32bit long型

    void AT24CXX_WriteLenByte 是写入u32 DataToWrite (根据函数参数定义 ​) 也就是默认的32bit 数据 所以len =4;当DataToWrite 是有效数据为16bit时,可以使len=2.

    • 发布于2017-07-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 问题一:size为21

    问题二:这个数据长度就是字节的个数啊

    问题三:Len为4和2分别代表了数据长度为32位和16位,这个器件只能是8位8位写的

    • 发布于2017-07-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 1.size是textbuffer的长度,为22,楼上各位说21的都是C语言不达标的,楼主不要被他们误导

    1.jpg2.jpg

     

    2.对

    3.第三个问题没读懂

    • 发布于2017-07-10
    • 举报
    • 评论 1
    • 0
    • 0
huihui163 回复了 donatello :len的数据长度, 回复

  • 您好

    1. 字串尾須加上'\0',所以為21+1=22

    2. 3. 因為最長的Data type為4個Byte的long / double這類,所以這函數有兼容性讓您可以按照長度去寫入

    (DataToWrite>>(8*t))&0xff

    這段code就是取出最低8個Bit = 1個Byte做寫入,並右移位8個bit,因此您傳入長度len=2時候,就寫入2次,同理4就寫入4次,一次寫入1個Byte

    如果您要寫入ADC=2048,則需寫入4個字元'2','0','4'.'8',每個Char 8bit,所以長度len=4

    另外就是改用2進制,2048=0xfff=100000000000,只需12個bit,長度len=2 (16 bit來存),前面補0

    以上


    • 发布于2017-07-10
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

24C02的写函数不明白