【问题标题】:how to write 4 bytes and read 2nd byte after some delay in C programming?在 C 编程中经过一段时间的延迟后,如何写入 4 个字节并读取第 2 个字节?
【发布时间】:2012-12-05 12:04:56
【问题描述】:

我有一个嵌入式 SBC(主)和一个基于 8051 的射频模块,它具有 32kb 的内部 ROM。我有 SPI 总线来访问该内部 ROM。当我使用 SPI 总线从我的主设备向从设备发送一些数据时,我可以在 MOSI 线上看到一些数据,在这些数据之后,我需要从从设备获得一些响应。我不确定数据是否正确写入闪存 ROM 的 00,01,02,03 地址。我也期待 MISO 线上的一些数据,但我什么也没得到。我怀疑这四个字节是否正确写入我的闪存 ROM 是否以 4 个地址开头??我已经添加了代码供您参考,请让我知道我在做什么错。

    typedef unsigned char uint8;

    void run_test(int fd)
    {
        int i;
        uint8 buffer[20];
        //int size,l,size1;
        uint8 *value[4] = {0xAC,0x53,0xAA,0x55};
        uint8 address=0x0000;

        /*Writing 4 bytes*/

        for(i=0;i<4;i++)
        {
             printf("address:%.4x \t value : %2X\n",address,value[i]);
         write(fd,&value,4);
         address++;
        }
   /*Reading the 2nd byte*/

    read (fd, buffer, sizeof (buffer));
    printf("%2X\n",);   
    }

我想从缓冲区读取我的第二个字节。请让我知道我在做什么错? 而且我需要让我的地址不断变化,我想在第零个地址上写第一个字节等等。

问候, 拉维

【问题讨论】:

    标签: c


    【解决方案1】:

    我不是很熟悉您的特定应用程序,所以我真的不知道当您在设备库中调用“写入”和“读取”时会发生什么。但是,从纯 C/C++ 的角度来看,我注意到一些可能需要也可能不需要注意的事情。据我了解,您想通过 SPI 总线将 4 个字节的数据写入内存的前 4 个字节。在您的写入循环中,我看到了几件事。

    首先,您循环 4 次,每次写入 4 个字节。总共是 16 个。另外,当您写作时,我根本看不到“地址”在哪里发挥作用。我注意到您正在传递 uint* 数组的地址的“值”数组。 write 函数需要一个 void*,而您实际上是在传递一个 void***。这意味着您绝对没有写入您声明的值数组中的字节。

    所以在我看来,你可以像这样写 4 个字节,一次一个字节或一次 4 个字节。

       int i;
       uint8 value[4] = { 0xAC, 0x53, 0xAA, 0x55 };
       uint8 address = 0;
    
       // Writing 4 bytes METHOD 1
       for (i = 0; i < 4; ++i)
       {
          write(fd, &(value[i]), 1);
       }
    
       // Writing 4 bytes METHOD 2
       write(fd, value, 4);
    

    您可以像这样从缓冲区中打印第二个字节。

       uint8 buffer[20];
       read(fd, buffer, sizeof(buffer));
       printf("%2X\n", buffer[1]);  
    

    我曾使用过一些微控制器,之前没有使用文件描述符在 SPI 总线上读/写。所以我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多