0

Android用のLinuxカーネルをコンパイル中にエラーが発生しました...

バッテリードライバーを改造しました:

ここに github のコミットとすべてのファイルがあります:

コンパイル時にエラーが発生します:

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

私を助けてもらえますか?:)

前もって感謝します、マッテオ

4

2 に答える 2

0

前に # が付いているものは、コードがコンパイルされるときに 1 回だけ処理されます。実行時には処理されません。これにより、たとえば、次のコードが不適切になります。

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

2 回実行するためです#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 に答える