【发布时间】:2014-02-27 16:53:15
【问题描述】:
我正在使用 C 在嵌入式系统上实现定点数学。
为了便于阅读,我将分母表示为 2 的幂:
#define Fixed_Point_Base 4096U
但是,当我在定点数学之间进行转换时,我需要移位量:
#define Fixed_Point_Bit_Position 12U
为了使维护更容易,代码更健壮,我想有一个#define 用于表示 Fixed_Point_Base 数的位位置(移位数):
#define Fixed_Point_Bit_Position(x) {/*...*/}
我知道的唯一方法涉及对数和除法,我真的不想在嵌入式系统中使用对数或除法:
bit count = ln(4096) / ln(2)
我正在寻找返回 2 的幂的位位置的预处理器宏或编译时解决方案。
我的网络搜索返回了代码中的示例,但不是编译时/预处理器解决方案。
仅供参考,我使用的是带有 ARM7TDMI 处理器的 IAR Embedded Workbench。
编辑 1:我使用的是 MISRA C 2004 指南以及 Parasoft 静态分析和 Coverity 静态分析工具。答案必须通过这些限制。
【问题讨论】:
-
反过来(定义
Fixed_Point_Bit_Position,使用Fixed_Point_Base(x)得到分母)将是微不足道的。你不能这样做吗? -
那可读性差,
Fixed_Point_Base(12)可读性不如 4096U。
标签: c embedded c-preprocessor compile-time fixed-point