CS+とe² studioではどんな違いがあるのですか?

ルネサスサポートさんからCS+を購入して使用しています、USBのサンプル等をダウンロードするとe² studio用のものでこれをCS+で変換して使用するようになっています、それでこのCS+とe² studioではどんな違いがあるのでしょうか、どちらがどんな点で優れているのか、コードの互換性、製作している会社、将来性など教えていただけませんでしょうか?

Parents
  • もの凄くザックリ言えばどちらもIDEに過ぎないので呼び出すコンパイラが同じならコマンドを呼び出すインターフェースの違いだけだと言えるかもしれません。
    理屈からすれば全く同じオプションでコマンドが呼ばれるようにすれば同じコードが吐かれるはずですが、CS+とe² studioとでは「プロジェクト」の内容も構成も違うので、なかなか同じにはならないかもしれません。動作に影響しないなら同じでなくても構わないのですけれど。

    CS+はオールルネサス製と言って良いと思いますが、e² studioだとルネサスデバイス用のプラグイン(主にビルドサポートとデバッグサポート)だけがルネサス製で、言い換えれば「公開されているeclipseにルネサス製プラグインが載ったもの」です。eclipseの拡張性を取るか、CS+の一体感を重視するかで評価が分かれると思います。
    開発ライフサイクルの長短、開発環境に期待する機能の違いなどでどちらが適しているかも分かれます。
    使い勝手の好みもあるでしょうし。

    RXフォーラムへの投稿なのでCC-RXについて言えば、CS+に同梱されたコンパイラはe² studioからもそのまま使えるので両方しばらく使ってみて馴染む方を選択すれば良いのではないでしょうか?

    ※ サンプルコードがe² studio用になっているのはe² studio推しではなくて単にCS+用とe² studio用を別々に用意しなくて済むからでは?
  • ほやさん
    有益な情報をありがとうございます、CS+からUSBのサンプルを取り込んでCS+に変換して動作させるのは可能なのですが、なぜサンプルがe² studio用になっているのかそしてCS+から「変換」して使用するようにしてあるのか疑問に思っています、e² studioがきっとCS+よりも早くからあったんでしょうね、ただ見た限り変換して使用しようとする場合iodefine等には互換性が無いように思うのですが、間違いなのでしょうか?
  • IKUZOさん
    > 変換して使用しようとする場合iodefine等には互換性が無いように思うのですが、間違いなのでしょうか?
    「互換性が無いように思う」の内容が分からないのですが、 ちなみにどのサンプルコードをお使いでしょう?

    iodefine.hのバージョンによってはレジスタ名が変更されたりしているので、バージョンが合わないコードと混ぜればエラーになったりはするかもしれません。
    (iodefine.hの頭には、どのハードウェアマニュアルに基づいて作られたかが書かれています)
  • ほやさん
    ルネサスサイトです、少し長いですが最初のところのみ
    /********************************************************************************/
    /* */
    /* Device : RX/RX600/RX63N */
    /* File Name : iodefine.h */
    /* Abstract : Definition of I/O Register. */
    /* History : V1.6A (2013-07-08) [Hardware Manual Revision : 1.60] */
    /* Note : This is a typical example. */
    /* */
    /* Copyright(c) 2013 Renesas Electronics Corp. */
    /* And Renesas Solutions Corp. ,All Rights Reserved. */
    /* */
    /********************************************************************************/
    /* */
    /* DESCRIPTION : Definition of ICU Register */
    /* CPU TYPE : RX63N */
    /* */
    /* Usage : IR,DTCER,IER,IPR of ICU Register */
    /* The following IR, DTCE, IEN, IPR macro functions simplify usage. */
    /* The bit access operation is "Bit_Name(interrupt source,name)". */
    /* A part of the name can be omitted. */
    /* for example : */
    /* IR(TPU0,TGI0A) = 0; expands to : */
    /* ICU.IR[126].BIT.IR = 0; */
    /* */
    /* DTCE(ICU,IRQ0) = 1; expands to : */
    /* ICU.DTCER[64].BIT.DTCE = 1; */
    /* */
    /* IEN(CMT0,CMI0) = 1; expands to : */
    /* ICU.IER[0x03].BIT.IEN4 = 1; */
    /* */
    /* IPR(SCI12,SCIX0) = 2; expands to : */
    /* IPR(SCI12,SCI ) = 2; // SCIX0,SCIX1,SCIX2,SCIX3 share IPR level. */
    /* ICU.IPR[122].BIT.IPR = 2; */
    /* */
    /* IPR(SCI0,RXI0) = 3; expands to : */
    /* IPR(SCI0, ) = 3; // SCI0 uses single IPR for all sources. */
    /* ICU.IPR[214].BIT.IPR = 3; */
    /* */
    /* Usage : #pragma interrupt Function_Identifier(vect=**) */
    /* The number of vector is "(interrupt source, name)". */
    /* for example : */
    /* #pragma interrupt INT_IRQ0(vect=VECT(ICU,IRQ0)) expands to : */
    /* #pragma interrupt INT_IRQ0(vect=64) */
    /* #pragma interrupt INT_CMT0_CMI0(vect=VECT(CMT0,CMI0)) expands to : */
    /* #pragma interrupt INT_CMT0_CMI0(vect=28) */
    /* #pragma interrupt INT_MTU0_TGIA0(vect=VECT(MTU0,TGIA0)) expands to : */
    /* #pragma interrupt INT_MTU0_TGIA0(vect=142) */
    /* #pragma interrupt INT_TPU0_TGI0A(vect=VECT(TPU0,TGI0A)) expands to : */
    /* #pragma interrupt INT_TPU0_TGI0A(vect=126) */
    /* */
    /* Usage : MSTPCRA,MSTPCRB,MSTPCRC of SYSTEM Register */
    /* The bit access operation is "MSTP(name)". */
    /* The name that can be used is a macro name defined with "iodefine.h". */
    /* for example : */
    /* MSTP(TMR2) = 0; // TMR2,TMR3,TMR23 expands to : */
    /* SYSTEM.MSTPCRA.BIT.MSTPA4 = 0; */
    /* MSTP(SCI0) = 0; // SCI0,SMCI0 expands to : */
    /* SYSTEM.MSTPCRB.BIT.MSTPB31 = 0; */
    /* MSTP(MTU4) = 0; // MTU,MTU0,MTU1,MTU2,MTU3,MTU4,MTU5 expands to : */
    /* SYSTEM.MSTPCRA.BIT.MSTPA9 = 0; */
    /* MSTP(TPU4) = 0; // TPU0,TPU1,TPU2,TPU3,TPU4,TPU5 expands to : */
    /* SYSTEM.MSTPCRA.BIT.MSTPA13 = 0; */
    /* MSTP(CMT3) = 0; // CMT2,CMT3 expands to : */
    /* SYSTEM.MSTPCRA.BIT.MSTPA14 = 0; */
    /* */
    /* */
    /********************************************************************************/
    このようになっていました、最後では
    #define TPU7 (*(volatile struct st_tpu1 __evenaccess *)0x88178)
    #define TPU8 (*(volatile struct st_tpu2 __evenaccess *)0x8817A)
    #define TPU9 (*(volatile struct st_tpu3 __evenaccess *)0x8817A)
    #define TPU10 (*(volatile struct st_tpu4 __evenaccess *)0x8817C)
    #define TPU11 (*(volatile struct st_tpu5 __evenaccess *)0x8817C)
    #define TPUA (*(volatile struct st_tpua __evenaccess *)0x88100)
    #define TPUB (*(volatile struct st_tpub __evenaccess *)0x88170)
    #define USB (*(volatile struct st_usb __evenaccess *)0xA0400)
    #define USB0 (*(volatile struct st_usb0 __evenaccess *)0xA0000)
    #define USB1 (*(volatile struct st_usb1 __evenaccess *)0xA0200)
    #define WDT (*(volatile struct st_wdt __evenaccess *)0x88020)
    #pragma bit_order
    #pragma packoption
    #endif
    このようになっていますが、CS+から作成したものでは、最後のほうが異なっていまして
    #define TPU7 (*(volatile struct st_tpu1 __evenaccess *)0x88178)
    #define TPU8 (*(volatile struct st_tpu2 __evenaccess *)0x8817A)
    #define TPU9 (*(volatile struct st_tpu3 __evenaccess *)0x8817A)
    #define TPU10 (*(volatile struct st_tpu4 __evenaccess *)0x8817C)
    #define TPU11 (*(volatile struct st_tpu5 __evenaccess *)0x8817C)
    #define TPUA (*(volatile struct st_tpua __evenaccess *)0x88100)
    #define TPUB (*(volatile struct st_tpub __evenaccess *)0x88170)
    #define USB (*(volatile struct st_usb __evenaccess *)0xA0400)
    #define USB0 (*(volatile struct st_usb0 __evenaccess *)0xA0000)
    #define USB1 (*(volatile struct st_usb1 __evenaccess *)0xA0200)
    #define WDT (*(volatile struct st_wdt __evenaccess *)0x88020)
    #define FLASHCONST (*(volatile struct st_flashconst __evenaccess *)0xFEFFFAC0)
    #define TEMPSCONST (*(volatile struct st_tempsconst __evenaccess *)0xFEFFFAD2)
    #pragma bit_order
    #pragma packoption
    #endif
    私の勘違いだったのかよく見るとほとんど同じでしたね。
  • IKUZOさん
    > CS+から作成したものでは、最後のほうが異なっていまして
    CS+の方が新しくてサンプルコードに入っているヘッダのバージョンが古いということでしょう。
    e2 studioでも、新規プロジェクト作成時に吐かれるヘッダの内容は(冒頭のコメントを除いて)CS+と変わらないのではないでしょうか?
    だとすればe2 studio用のサンプルコードだから、と言う理由ではなく作成時期の違いだと思いますが、いかがでしょう?

  • ほやさん
    回答ありがとうございます、おっしゃるように大きな違いはないようです、ただ評価ボードが違うと動作しないのは当然ですよね、このファームが手持ちの評価ボードと違うようで、これに合わせて改造しようかなと思います。
  • kcdです
    >e² studioがきっとCS+よりも早くからあったんでしょうね、
    e² studioは、2013年リリースで、CS+は、PM(プロジェクトマネージャ)からCS(キューブスイート?)、旧 CubeSuite+と旧NEC開発環境として存在してました。合併してから、ルネサス系(旧日立)のHEW開発環境を、後から組入れたものです。
Reply
  • kcdです
    >e² studioがきっとCS+よりも早くからあったんでしょうね、
    e² studioは、2013年リリースで、CS+は、PM(プロジェクトマネージャ)からCS(キューブスイート?)、旧 CubeSuite+と旧NEC開発環境として存在してました。合併してから、ルネサス系(旧日立)のHEW開発環境を、後から組入れたものです。
Children
  • kcdさん
    ははー、なるほど!「(旧日立)のHEW開発環境を、後から組入れた」それでHEWと似てるんですね、納得です。
  • kcdさんが歴史を少し書いてますが、リアルタイムで見ていたあまり価値が無い私の感覚です。

    CS+はNEC主体でPM+の流れがあると思います。三菱系のR8やM16などがHEWに統合されてしばらくはHEWとCubeSuiteの2本立てになっていたのがCS+に統合されました。e2studioはRZとほぼ同時に現れました。多数の英文ドキュメントなどから海外を意識して開発のように思えます。CS+かe2studioかはユーザー側の開発メンバーによるのではないでしょうか?グローバルチームあるいは多くのJAVAの経験があるメンバーのチームでアプリケーションを作成するならeclipseベースのe2studioが良さそうに思います。一方でコンスーマターゲットの組み込み一筋の日本人メンバーならCS+が使いやすいのではないでしょうか。