簡體   English   中英

Vectorcast 使用 IAR 編譯器進行 RL78

[英]Vectorcast using IAR compiler for RL78

我剛剛開始為 RL78 編譯器使用 Vectorcast 和 IAR。 我想使用 IAR Compiler for RL78 Microcontroller 在 vectorcast 中構建環境。

用於測試的代碼已在 RL78 的 IAR 嵌入式工作台中成功編譯。

在 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);    

如果指定類型的大小與庫要求不符,則它們是旨在使編譯失敗的表達式。

您需要檢查諸如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_u8fdl_u32沒有錯誤,但是您沒有提供該代碼,很難想到fdl_u16的合理定義,其大小不會為2。

顯然期望任何特定枚舉的大小為1是不安全的(例如,請參見C中的枚舉的大小是多少 ),盡管在IAR RL78編譯器手冊中指出,可以容納所有枚舉常量的最小類型將是不安全的。使用。

如果使用fdl_u16 ,則結構類型的失敗很可能是失敗的結果,但是同樣,如果沒有這些類型的定義,就很難說了。

對於像 VectorCAST 這樣的測試工具,總是建議找出錯誤的來源是來自我們的源代碼還是來自工具。 例如,VectorCAST 使用預處理文件來解析代碼,通過模仿使用自己的解析器的編譯器來識別是否存在任何語法或語義錯誤。

通常,該工具的解析器配置為通用默認設置,如果使用非通用項目,它可能會以錯誤告終。 在 VectorCAST 中,可以使用測試設置選項來查找錯誤來源是來自編譯階段還是來自解析階段(測試工具端)。 如果是解析器錯誤(如 user8270915 所示),請聯系工具供應商支持團隊獲取其他標志以解決此類問題。 如果錯誤源自測試設置的編譯階段,那么在這種情況下,必須將測試環境中使用的設置與其實際項目進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM