【发布时间】:2014-02-28 16:58:24
【问题描述】:
我必须将两个 16 位字组合成一个 32 位字数百次,这需要大量的计算能力。我想找到一种更有效的方法来做到这一点。
我有 2 个名为 A 和 B 的 16 位字。我想要一个名为 C 的 32 位字。A 中的位应复制到 C 中的偶数位。B 中的位应复制到奇数位C中的位数。例如:A:0b0000000000000000 B:0b1111111111111111处理后的C应该是0b10101010101010101010101010101010。
我目前的解决方案是这样的:
for (i = 0; i < 32; i+=2)
{
C |= (A & (1 << (i/2))) << (i/2);
C |= (B & (1 << (i/2))) << (i/2 + 1);
}
当我要处理数百个 C 时,此解决方案需要太多时间。我正在寻找更好的!
添加:此程序在 TriCore 上运行。我别无选择,只能以这种方式处理数据,因为 AB 和 C 之间的这种关系是由协议定义的。
谢谢!
【问题讨论】:
-
你在用什么处理器?
-
我们真的必须知道我们在谈论什么嵌入式MCU。它有桶形移位器吗?它是否具有必须手动使用的能够进行桶形移位的外围设备?
-
从长远来看,也许你应该回顾一下为什么你有这些数据输入,看看你能做些什么来改变事情,这样你就不必做如此扭曲的操作序列。粗略地说:为什么数据会以如此粗鲁的方式呈现,因为它必然会使处理速度变慢。
-
我不会点击 TriCore 许可协议来阅读他们的文档,但它是 32 位的,并且 RISC 架构具有桶形移位器并不少见,所以你的 C 可能是好的。你看过它的拆解吗?
标签: c performance embedded bitwise-operators