Android用のLinuxカーネルをコンパイル中にエラーが発生しました...
バッテリードライバーを改造しました:
ここに github のコミットとすべてのファイルがあります:
コンパイル時にエラーが発生します:
drivers/power/max8986-power.c:188: error: expected specifier-qualifier-list before 'if'
私を助けてもらえますか?:)
前もって感謝します、マッテオ
Android用のLinuxカーネルをコンパイル中にエラーが発生しました...
バッテリードライバーを改造しました:
ここに github のコミットとすべてのファイルがあります:
コンパイル時にエラーが発生します:
drivers/power/max8986-power.c:188: error: expected specifier-qualifier-list before 'if'
私を助けてもらえますか?:)
前もって感謝します、マッテオ
前に # が付いているものは、コードがコンパイルされるときに 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 ステートメントを修正して、代入ではなく等価性をチェックします。