2017-06-29 113 views
-2

我正在爲LPC1343微控制器編程一個皮層m3。當我編譯我的代碼時,我得到一行SetLed((eLeds_t *)h1, false);錯誤,它說Error[Pe018]: expected a ")"好像這個演員我做的不夠好,我猜。傳遞一個typedef枚舉作爲c參數拋出錯誤

遵循枚舉類型定義聲明和:

#ifndef _LEDS_h 
#define _LEDS_h 

#ifndef bool 
typedef unsigned char bool; 
# define true 1; 
# define false 0; 
#endif // ifndef bool 

enum eLeds 
{ 
    noled, p1l, p1r, p2l, p2r, h1, h2 
}; 
typedef enum eLeds eLeds_t; 

void SetLed(eLeds_t led, bool action) 
{ 
    switch (led) 
    { 
    case p1l: 
     GPIOSetValue(PORT2, 5, action); 
     break; 

    case p1r: 
     GPIOSetValue(PORT2, 8, action); 
     break; 

    case p2l: 
     GPIOSetValue(PORT0, 9, action); 
     break; 

    case p2r: 
     GPIOSetValue(PORT0, 8, action); 
     break; 

    case h1: 
     GPIOSetValue(PORT0, 5, action); 
     break; 

    case h2: 
     GPIOSetValue(PORT0, 7, action); 
     break; 
    } 
} 

void leds_init(void) 
{ 
    GPIOSetDir(PORT2, 5, 1); // p1l 
    GPIOSetDir(PORT2, 8, 1); // p1r 
    GPIOSetDir(PORT0, 9, 1); // p2l 
    GPIOSetDir(PORT0, 8, 1); // p2r 

    GPIOSetDir(PORT0, 5, 1); // h1 
    GPIOSetDir(PORT0, 7, 1); // h2 

    LPC_IOCON->PIO2_5 &= ~0x07; 
    LPC_IOCON->PIO2_8 &= ~0x07; 
    LPC_IOCON->PIO0_9 &= ~0x07; 
    LPC_IOCON->PIO0_8 &= ~0x07; 

    LPC_IOCON->PIO0_5 &= ~0x07; 
    LPC_IOCON->PIO0_7 &= ~0x07; 

    eLeds_t value = h1; 
    SetLed(&value, false); 
} 

#endif // ifndef _LEDS_h 

enter image description here

+2

你爲什麼將枚舉值轉換爲指針? – Barmar

+1

您可以聲明eLeds_t類型的本地並分配該「h1」。您可以將該變量的引用傳遞給函數。但你爲什麼要這麼做? – MKR

+1

我無法重現該錯誤。你確定你正確地複製了代碼嗎? – Barmar

回答

1

您是鑄造枚舉(大概是這樣值爲0,1,2 ...)的指針,然後你傳遞的方法希望取消引用指針並使用它指向的內容?即使通過的語法是正確的(它看起來在語法上沒問題 - 如果不是合理的話),它將在解引用上調用未定義的行爲。

這將工作:

void leds_init(void) 
{ 
    eLeds_t value = h1; 
    SetLed(&value, false); 
} 

事實上,所有這一切都是在.h是錯誤的。如果你從多個地方包含它,你會有多個定義的符號。

您對bool的處理是錯誤的。 #ifndef bool只會在bool被哈希定義時纔會啓動。它不會選擇一個typedef-ed布爾。找出編譯器的內容並使用它。在C中,TRUE和FALSE通常被定義(stdio.h?) - 使用這些。或者更好,但不是一個布爾。爲什麼不動作枚舉「PERFORM_ACTION」和「SKIP_ACTION」?這樣,你不需要記得bool應該是什麼......

+0

這並不能解釋他爲什麼會出現語法錯誤。在他的真實代碼中可能缺少';'。 – Barmar

+0

John我剛剛嘗試過,它沒有工作,我也檢查了缺失的分號,它就在那裏。 –

+0

@RinaldiSegecin定義「沒有工作」 – John3136