首页 文章

C / CAPL定义另一个数组

提问于
浏览
1

这是我的第一个问题,请注意我对编码很新 . 快速搜索对我没有帮助,因为我认为答案可能过于简单 .

我在CAPL中编写了一些代码(基于C的CANoe特定语言) . 让我的场景简化:我必须读取10个值Input,但我只能一次读取一个(由于HW的原因) .

我的值存储在缓冲区(rsBuf)中,现在我每次读取值时都试图定义一个帮助数组(rsBuf1 ... 10) . 最后,我将创建另一个带有rsBuf1 ... rsBuf10值的数组 .

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

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

我的“真实” Value 观:

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

是否有一种简单的方法可以从另一个阵列中执行此操作?我也尝试了一些我发现的其他符号,比如rsBuf1 = ,但没有帮助 . 当然我可以定义rsBuf1 [1] = rsBuf [1]; ... rsBuf1 [1024] = rsBuf [1024];

但那我想是浪费时间 . 提前谢谢,罗伯特欢呼

2 回答

  • 1

    您无法通过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 相同的机器代码 .

  • 2

    选项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]);
    }
    

相关问题