我有一个具有时间紧迫的 ISR 的嵌入式应用程序,它需要遍历一个大小为256的数组(最好是1024,但最小为256) ,并检查一个值是否与数组内容匹配。在这种情况下,bool
将被设置为 true。
微控制器采用 NXP LPC4357,ARM Cortex M4核心,编译器采用 GCC。我已经结合优化级别2(3是较慢的)和放置在 RAM 的功能,而不是闪存。我还使用指针算法和 for
循环,它执行向下计数而不是向上计数(检查 i!=0
是否比检查 i<256
快)。总而言之,我最终的持续时间为12.5微秒,这必须大大减少,以便可行。这是我现在使用的(伪)代码:
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;
}
}
最快的方法是什么?允许使用内联程序集。其他“不那么优雅”的把戏也是允许的。