是否有更有效,更清洁的方法来执行以下方法已经在做的事情?
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]);
}
}
这是关于我已回答的现有问题。
答案 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
)。