iodefine.h で、IODEFINE_H_HISTORY キーワードについて

hirakuni45 です。

最近(既に数か月経過してるけど・・)、RXマイコン用、TinyUSB/Host ドライバーがコミットされたので、機能を試しています。

RX65N Envision Kit、RX72N Envision Kit での動作を確認しました。

そこで、USB の構成がほぼ同じ RX72T も試そうと思い、e2Studio/gcc でプロジェクトを作成し、出力された iodefine.h を利用しようとしましたが・・

iodefine.h が中途半端でgccのコンパイルに失敗します。 

RX72N、RX65N では、ビットフィールドは、リトルエンディアンとビッグエンディアンで分かれていて、全ての定義があるので、gcc でも適切にコンパイル可能です。

ところが、RX72T 用の iodefine.h では、USB 関係のレジスタ定義が中途半端で、コンパイル出来ません・・

具体的には、表題の通り「IODEFINE_H_HISTORY」で囲まれていて、「ビッグエンディアン」の定義しか無い場合があります。

※レジスターによっては、RX72N と同じようにちゃんと定義されている場合もある。

何故、このような中途な状態になっているのか?、回避策などご存じの方がいれば教えて下さい。

※もちろん、RX72N 用のUSB部分を切り貼りすれば出来るでしょうが、iodefine.hを触りたくありません。

又、「IODEFINE_H_HISTORY」キーワードは、どのような意味があるのでしょうか?

RX72N iodefine.h USB 関係:

typedef struct st_usb0 {
	union {
		unsigned short WORD;
		struct {
			
#ifdef __RX_LITTLE_ENDIAN__
			unsigned short USBE : 1;
			unsigned short  : 3;
			unsigned short DPRPU : 1;
			unsigned short DRPD : 1;
			unsigned short DCFM : 1;
			unsigned short  : 3;
			unsigned short SCKE : 1;
			unsigned short  : 5;
#else
			unsigned short  : 5;
			unsigned short SCKE : 1;
			unsigned short  : 3;
			unsigned short DCFM : 1;
			unsigned short DRPD : 1;
			unsigned short DPRPU : 1;
			unsigned short  : 3;
			unsigned short USBE : 1;
#endif
	} BIT;
	} SYSCFG;

RX72T iodefine.h USB 関係:

typedef struct st_usb {
	union {
		unsigned short WORD;
#ifdef IODEFINE_H_HISTORY
		struct {
			unsigned short :5;
			unsigned short SCKE:1;
			unsigned short :3;
			unsigned short DCFM:1;
			unsigned short DRPD:1;
			unsigned short DPRPU:1;
			unsigned short :3;
			unsigned short USBE:1;
		} BIT;
#endif
	} SYSCFG;
Parents
  • > 具体的には、表題の通り「IODEFINE_H_HISTORY」で囲まれていて、「ビッグエンディアン」の定義しか無い場合があります。
    詳しい状況が分からないので推測ですが、元がCC-RXのプロジェクトでGCCコンバータを通して作られた iodefine.h であれば記述がおかしくなることは考えられなくもありません。

    いずれにせよ最初からGCCで作られたプロジェクトから持って来た iodefine.h に差し替えれば解決すると思います。

  • ほや さん、こんにちは。NoMaYです。

    hirakuni45さんは、CC-RXなど歯牙にも掛けません。e2 studioで生成したGCC向けiodefine.hの該当部分が最初からendianに対応していない構成で生成されてしまうのですよ。e2 studioのプロジェクトジェネレータの原本のフォルダのiodefine.hがそうなってしまっているのですよ。

  • > e2 studioのプロジェクトジェネレータの原本のフォルダのiodefine.hがそうなってしまっている
    あああー  確かに。

Reply Children
No Data