2017-09-25 22 views
0

我剛開始使用Vectorcast和IAR編譯RL78。我想使用IAR編譯器爲RL78微控制器構建vectorcast環境。這是用於測試使用IAR編譯器進行RL78的矢量直播

代碼編譯成功在RL78的IAR Embedded Workbench。

我對着下面的錯誤,而在VectorCAST的建設環境的模塊。

錯誤:

40_MCAL\Memory\FDL\fdl_types.h", line 133: error: 
      division by zero 
    enum { R_FDLT02_ASSERT_LINE_133 = 1/(! !(sizeof(fdl_u16)==2)) }; 
            ^

40_MCAL\Memory\FDL\fdl_types.h", line 137: error: 
      division by zero 
    enum { R_FDLT02_ASSERT_LINE_137 = 1/(! !(sizeof(fdl_command_t)==1)) }; 
            ^

40_MCAL\Memory\FDL\fdl_types.h", line 138: error: 
      division by zero 
    enum { R_FDLT02_ASSERT_LINE_138 = 1/(! !(sizeof(fdl_status_t)==1)) }; 
            ^
40_MCAL\Memory\FDL\fdl_types.h", line 141: error: 
      division by zero 
    enum { R_FDLT02_ASSERT_LINE_141 = 1/(! !(sizeof(fdl_request_t)==8)) }; 
            ^


40_MCAL\Memory\FDL\fdl_types.h", line 142: error: 
      division by zero 
    enum { R_FDLT02_ASSERT_LINE_142 = 1/(! !(sizeof(fdl_descriptor_t)==10)) }; 
            ^ 
5 errors detected in the compilation of "Flash.c". 

和源代碼如下:

# define R_FDLT02_ASSERT_CONCAT_(a, b) a##b   

#define R_FDLT02_ASSERT_CONCAT(a, b) R_FDLT02_ASSERT_CONCAT_(a, b)  

#define R_FDLT02_STATIC_ASSERT(e) enum { R_FDLT02_ASSERT_CONCAT  
(R_FDLT02_ASSERT_LINE_, __LINE__) = 1/(!!(e)) }  

/* assertion if unsigned data type size is not correct, please evaluate compiler settings for integer types */ 

R_FDLT02_STATIC_ASSERT(sizeof(fdl_u08)==1);  

R_FDLT02_STATIC_ASSERT(sizeof(fdl_u16)==2);  

R_FDLT02_STATIC_ASSERT(sizeof(fdl_u32)==4);  


/* assertion if enumeration type size is not correct, please evaluate compiler settings for enumeration types */  

R_FDLT02_STATIC_ASSERT(sizeof(fdl_command_t)==1);  

R_FDLT02_STATIC_ASSERT(sizeof(fdl_status_t)==1);  

/* assertion if structure type size is not correct, please evaluate compiler settings for structure types */  

R_FDLT02_STATIC_ASSERT(sizeof(fdl_request_t)==8);  

R_FDLT02_STATIC_ASSERT(sizeof(fdl_descriptor_t)==10);  
+2

如果您分享產生錯誤的代碼,那將會容易得多。 – norok2

+0

這些似乎是靜態斷言。他們的工作是確保您不會意外編譯錯誤行爲的代碼。也許你需要將這個庫(?)移植到你的編譯器系統中。 – user694733

+0

/*斷言如果無符號數據類型大小不正確,請評估整數類型的編譯器設置*/tdl_u08需要爲1個字節,但在系統上顯然不是。同上u16 2和u32 4.您試圖解決這個問題的哪些編譯器設置? – Ross

回答

0

他們打算如果沒有所要求的庫指定類型的大小失敗編譯表達式。

您需要檢查的類型,如fdl_u16的定義是適合你的目標。對於IAR的RL78編譯器的基本類型有以下尺寸:

bool    8 bits 
char    8 bits 
signed char  8 bits 
unsigned char  8 bits 
signed short  16 bits 
unsigned short  16 bits 
signed int   16 bits 
unsigned int  16 bits 
signed long  32 bits 
unsigned long  32 bits 
signed long long 32 bits 
unsigned long long 32 bits 

然而它通常是更便攜,如果需要特定尺寸的類型,如uint16_t例如來定義這樣的類型。

很難但是想fdl_u16,一個合理的定義,不會有大小2因爲你有fdl_u8fdl_u32沒有錯誤的,但你沒有提供的代碼。

對於任何特定枚舉的大小爲1的明顯期望是不安全的(例如參見What is the size of an enum in C?),但在IAR RL78編譯器手冊中,它指出將使用可容納所有枚舉常量的最小類型。

結構類型的故障是很可能,如果fdl_u16,但同樣沒有這些類型的定義是很難說失敗的結果。

+0

謝謝你的時間。其實它解析錯誤,我解決了。 – Resves

相關問題