小编wla*_*ers的帖子

快速查找C数组中是否存在值?

我有一个具有时间要求严格的ISR的嵌入式应用程序需要迭代256个大小的数组(最好是1024,但256是最小的),并检查一个值是否与数组内容匹配.如果bool是这样,A 将设置为true.

微控制器是NXP 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;
     }
}
Run Code Online (Sandbox Code Playgroud)

什么是绝对最快的方法呢?允许使用内联汇编.其他'不太优雅'的技巧也是允许的.

c embedded optimization assembly arm

124
推荐指数
9
解决办法
1万
查看次数

标签 统计

arm ×1

assembly ×1

c ×1

embedded ×1

optimization ×1