我有一个具有时间关键型ISR的嵌入式应用程序,它需要迭代大小为256的数组(最好是1024,但256是最小值),并检查值是否与数组内容匹配。如果是这种情况,bool
将被设置为true。
微控制器采用恩智浦LPC4357,ARM Cortex M4内核,编译器为GCC。我已经组合了优化级别2 (3更慢),并将函数放在RAM中而不是闪存中。我还使用了指针算法和一个for
循环,它执行向下计数而不是向上计数(检查i!=0
是否比检查i<256
更快)。总而言之,我最终得到了12.5µs的持续时间,必须大幅减少才能实现。这是我现在使用的(伪)代码:
uint32_t i;
uint32_t *array_ptr = &theArray[0];
uint32_t compareVal = 0x1234ABCD;
bool validFlag = false;
for (i=256; i!=0; i--)
{
if (compareVal == *array_ptr++)
{
validFlag = true;
break;
}
}
做这件事的绝对最快的方法是什么?允许使用内联程序集。其他“不太优雅”的把戏也是允许的。
https://stackoverflow.com/questions/25661925
复制相似问题