Arduino - 优化迭代数组的现有方法

时间:2012-01-23 02:58:00

标签: arrays loops arduino

是否有更有效,更清洁的方法来执行以下方法已经在做的事情?

void sendCode(prog_uint16_t inArray[], int nLimit) {

  unsigned int arr[nLimit];
  unsigned int c;
  int index = 0;

  while ((c = pgm_read_word(inArray++))) {
    arr[index] = c;
    index++;
  }

  for (int i = 0; i < nLimit; i=i+2) {
    delayMicroseconds(arr[i]);
    pulseIR(arr[i+1]);
  }

}

这是关于我已回答的现有问题。

Arduino - Iterate through C array efficiently

1 个答案:

答案 0 :(得分:2)

不需要本地arr数组变量。如果你不再这样做,你既可以节省临时堆栈空间,又可以通过消除复制数据的需要来加快执行速度。

void sendCode(const prog_uint16_t inArray[]) {
  unsigned int c;

  for (int i = 0; c = pgm_read_word(inArray++); i++) {
    if (i % 2 == 0) { // Even array elements are delays
      delayMicroseconds(c);
    } else {          // Odd array elements are pulse lengths
      pulseIR(c);
    }
  }
}

此代码假定存储在int中的最大整数大于inArray的最大大小(这似乎是合理的,因为原始代码基本上使用{{1}做出相同的假设} int)。