0

我在为 android 编译 linux 内核时遇到错误...

我修改了一个电池驱动程序:

这里有 github 上的提交和所有文件:https ://github.com/Lopicl/android_samsung_thunderkernel_cooperve/commit/6385d6206119a3f8551e17bbeae130d3230965bf

编译时出现错误:

drivers/power/max8986-power.c:188: error: expected specifier-qualifier-list before 'if'

你能帮帮我吗?:)

提前致谢, 马特奥

4

2 回答 2

0

您想使用 C-preprocessor#if#else's 而不是 C-languageifelse's。

于 2013-09-06T10:19:20.673 回答
0

当你的代码被编译时,前面带有# 的东西只被处理一次;它们不在运行时处理。例如,这使得下面的代码很糟糕:

if (max8986_power->isFullcharged == TRUE)
{
    #define FULLY_CHARGED 1
}
else
{
    #define FULLY_CHARGED 0
}

因为您将生效#define FULLY_CHARGED x两次(预处理器忽略实际的 C 代码;if不使用检查)。

稍后,当您if (FULLY_CHARGED = 0)不仅尝试检查无效定义的宏,而且您的代码尝试分配值而不是仅仅检查它!IF FULLY_CHARGED是一个变量,你的意思是你的代码是if (FULLY_CHARGED == 0)(注意双等号,用于相等检查)。

也许您想将宏的定义更改为:

#if defined CONFIG_BLX
    #define FULLY_CHARGED (max8986_power->batt_percentage == MAX_CHARGINGLIMIT) && (max8986_power->charging_status == POWER_SUPPLY_STATUS_CHARGING)
#else
    #define FULLY_CHARGED  (max8986_power->isFullcharged == TRUE)
#endif

并修复所有 IF 语句以检查相等性而不是赋值。

于 2013-09-06T10:40:16.407 回答