启用/禁用功能与change_state的基本原理?

now*_*wox 6 c embedded

我正在实现一个加速度计的驱动程序,我必须实现启用/禁用低功耗模式等功能.

我可以写:

lis2dh12_low_power_enable();
lis2dh12_low_power_disable();
Run Code Online (Sandbox Code Playgroud)

要么:

lis2dh12_low_power_change_state(boolean_t enable);
Run Code Online (Sandbox Code Playgroud)

前一种解决方案通常更具可读性,但它可能会创建额外的代码,例如在这种特定情况下:

void foo(boolean_t status) {
    if (status)
        lis2dh12_low_power_enable();
    else
        lis2dh12_low_power_disable();
}
Run Code Online (Sandbox Code Playgroud)

是否有任何理由(MISRA规则)用于实现这种典型的启用/禁用功能?

alk*_*alk 5

我会lis2dh12_low_power_change_state(boolean_t enable);按原样实现并将其他两个定义为围绕它的宏,例如:

#define lis2dh12_low_power_enable() lis2dh12_low_power_change_state(1)
Run Code Online (Sandbox Code Playgroud)

BTW:boolean_t是不是C.由于C99是无论是内置型_Bool或宏boolstdbool.h.

_tPOSIX为后续类型保留了更多后缀.

  • @nowox因为`inline`只是对编译器的建议.对于这么简单的事情,你可能想要"强制内联",这可以使用宏实现,因为它实际上粘贴到源中. (4认同)
  • 我根本不会定义其他两个。避免使用多种方法来做同样的事情是好的 API 设计。 (2认同)