2017-09-25 24 views
0

RL78コンパイラ用のVectorcastとIARを使い始めました。 RL78マイクロコントローラ向けのIARコンパイラを使用して、ベクターキャストで環境を構築したいと考えています。RL78用IARコンパイラを使ったベクトルキャスト

RL78のIAR組み込みワークベンチでテストに使用されたコードが正常にコンパイルされました。

モジュールのベクタキャストで環境を構築する際に、以下のエラーに直面しています。

エラー:

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バイトである必要がありますが、システム上では明らかにそうではありません。 Ditto for u16 2、およびu32 4.これを解決しようとしたコンパイラ設定は何ですか? – Ross

答えて

0

指定された種類のサイズがライブラリで必要とされていないようなら、彼らは、コンパイルに失敗することを目的と表現しています。

fdl_u16などのタイプの定義がターゲットに適しているかどうかを確認する必要があります。具体的なサイズは、例えばuint16_tようなタイプの面で、このようなタイプを定義する必要がある場合には、しかし、一般的に、よりポータブルで

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 

:IARのRL78コンパイラの基本的なタイプは、以下のサイズを持っています。

それはあなたがfdl_u8fdl_u32にはエラーがないことを考えると、2の大きさを持っていないだろうが、あなたがそのコードを提供していないfdl_u16の妥当な定義を考えることが困難です。

IAR RL78コンパイラのマニュアルでは、すべての列挙型定数を収容できる最小型が使用されると述べていますが、特定の列挙型のサイズが1であることは明らかではありません(たとえば、What is the size of an enum in C?を参照)。

fdl_u16の場合は構造型の障害が発生している可能性がありますが、これらの型の定義がない場合は、判りにくいことがあります。

+0

ありがとうございました。実際にはその解析エラー、私は解決した。 – Resves

関連する問題