2

这是我在这里的第一个问题,请注意我对编码很陌生。快速搜索对我没有帮助,因为我认为答案可能太简单了。

我用 CAPL(一种基于 C 的 CANoe 特定语言)编写了一些代码。让我的场景简化:我必须读取 10 个值输入,但我只能一次读取一个(由于硬件原因)。

我的值存储在缓冲区(rsBuf)中,现在我尝试为每次读取值(rsBuf1 ... 10)定义一个帮助数组。最后,我将创建另一个数组,添加 rsBuf1 ... rsBuf10 的值。

对于每个“读取操作”,我想定义 rsBuf1 = rsBuf; rsBuf2 = rsBuf;等等...

错误:对于“rsBuf1 = rsBuf;” (732,16) 处的错误 1112:操作数类型不兼容。编译失败 -- 1 个错误,0 个警告

我的“真实”价值观:

variables
{
byte rsBuf[1024];
byte rsBuf1[1024];
}

有没有一种简单的方法可以做到这一点?我还尝试了一些我发现的其他符号,例如 rsBuf1 = {rsBuf},但没有帮助。当然我可以定义 rsBuf1[1]=rsBuf[1]; ... rsBuf1[1024]=rsBuf[1024];

但我想那将是浪费时间。在此先感谢,干杯罗伯特

4

2 回答 2

2

您不能通过 C 中的赋值来复制数组,因为语法不允许这样做。最好的解决方案是使用该memcpy功能。

或者,如果它对程序设计有意义,您可以将数组放在包装器结构中:

typedef struct
{
  int array [5];
} array_wrapper_t;

array_wrapper_t this = {1,2,3,4,5};
array_wrapper_t that;
that = this;

这应该产生与调用相同的机器代码memcpy

于 2016-03-03T10:40:24.007 回答
1

选项1

您可以使用memcpy如下方式复制整个数组:

memcpy(rsBuf1, rsBuf, elcount(rsBuf));

以下将复制前四个字节:

memcpy(rsBuf1, rsBuf, 4);

选项 2

您可以选择定义您的复制功能,请参阅copy_buffer()实现:

variables
{
  byte rsBuf[1024] = {1, 2, 3, 4, 5, 6, 7, 8};
  byte rsBuf1[1024]; 
}

on start
{
  print_buffer(rsBuf, 8);
  print_buffer(rsBuf1, 8);

  copy_buffer(rsBuf1, rsBuf, elcount(rsBuf));

  print_buffer(rsBuf1, 8);
}

void copy_buffer(byte dest[], byte src[], long len)
{
  int i;
  for (i = 0; i < len; i++)
    dest[i] = src[i];
}

void print_buffer(byte buf[], byte len)
{
  int i;
  writeLineEx(0, 0, ">");
  for (i = 0; i < len; i++)
    writeEx(0, 0, " 0x%02x", buf[i]);
}
于 2016-03-07T16:47:25.753 回答