比memcpy更快的方法吗?

时间:2014-07-22 21:03:38

标签: c pointers struct memcpy

我使用SPI端口将一些配置数据(存储在结构中)转移到某些ASIC。我有一个“活动”结构,其中包含要移位的下一个配置,但实际配置可以是存储在结构数组中的十几个不同配置中的任何一个。目前,我正在使用memcpy将配置结构从数组实际复制到“活动”SPI缓冲区位置。问题是,它很慢,而且当我一遍又一遍地这样做时,延迟开始加起来。由于与我的ASIC的菊花链相关的原因,每次我必须做三次。

似乎应该通过将“active”结构设置为指向正确的存储结构来更快地完成此操作,但我很难找到它。通过使g_spi4_config_buf实际上只是成为指向另一个指针的指针来实现它的唯一方法是什么?

代码目前看起来像这样:

    if(x < 10)                                                //Lower third
    {
      memcpy((u8*)&g_spi4_config_buf.rx2, (u8*)&g_spi4_zone_config_buf[Zone0].rx2, sizeof(g_spi4_config_buf.rx2));       
      memcpy((u8*)&g_spi4_config_buf.rx1, (u8*)&g_spi4_zone_config_buf[Zone1].rx1, sizeof(g_spi4_config_buf.rx1));
      memcpy((u8*)&g_spi4_config_buf.rx0, (u8*)&g_spi4_zone_config_buf[Zone2].rx0, sizeof(g_spi4_config_buf.rx0));
    }
    else if(x >= 10) && (x < 20)            //Middle third
    {
      memcpy((u8*)&g_spi4_config_buf.rx2, (u8*)&g_spi4_zone_config_buf[Zone3].rx2, sizeof(g_spi4_config_buf.rx2));
      memcpy((u8*)&g_spi4_config_buf.rx1, (u8*)&g_spi4_zone_config_buf[Zone4].rx1, sizeof(g_spi4_config_buf.rx1));
      memcpy((u8*)&g_spi4_config_buf.rx0, (u8*)&g_spi4_zone_config_buf[Zone5].rx0, sizeof(g_spi4_config_buf.rx0));
    }
    else                                             //Upper third
    {
      memcpy((u8*)&g_spi4_config_buf.rx2, (u8*)&g_spi4_zone_config_buf[Zone6].rx2, sizeof(g_spi4_config_buf.rx2));
      memcpy((u8*)&g_spi4_config_buf.rx1, (u8*)&g_spi4_zone_config_buf[Zone7].rx1, sizeof(g_spi4_config_buf.rx1));
      memcpy((u8*)&g_spi4_config_buf.rx0, (u8*)&g_spi4_zone_config_buf[Zone8].rx0, sizeof(g_spi4_config_buf.rx0));
    }

0 个答案:

没有答案