NEC ELECTRONICS NEC ELECTRONICS
NEC electronics NEC electronics NEC
ホーム
アプリケーション
製品情報
先端技術
サポート
WEBショップ
ニュース&イベント
会社案内
header
GO
詳細検索機能/特性検索
サイトマップ お問い合わせ

その他全般


目次

    
FAQ-ID = v850-nnn
961: PM+ Ver.6.00で、リアルタイムOS(RX850 Pro)が使用できません。
959: リセット時に、リアルタイムOS(RX850 Pro)初期化処理前に必要な処理は何ですか?
463: エラー・メッセージ "Ffa01:PC位置の行情報が見つかりませんでした。" が表示されます。
649: RX850 Pro で、リンク時に、エラー・メッセージ "undefined: ’__e_sysfnc’ referenced in ’c:\nectools32\lib850e_ghs\r32\rxcore.o’" が表示されます。
709: PMを使用してビルドをすると、hx850実行時に、メッセージ "Warning:address is too long" が表示されます。
819: Multi2000のリンカで "_memcpy" のシンボル解決ができずに、エラーとなります。
650: RX850 Pro で、システムが暴走します。
811: ブート処理において、システムが HALT 状態になります。
646: システム・コールを発行しても、期待した動作をしません。
565: RX850 Pro のシステム・コール戻り値で、"-17" は何を意味するのですか?
810: PMで、オブジェクトをファイル一覧に登録することができません。
812: ニュークリアス・オブジェクト rxcore.o と rxtmcore.o の違いは何ですか?
rx_p87: RX850 Ver.3.1では、.sitセクションを0番地±32Kバイト以内に配置しなくてはなりませんでしたが、RX850 Proでも同じですか?
813: RX850 Pro 本体だけを ROM や FLASH ROM に焼くには、どうすればよいですか?

v850
-961
PM+ Ver.6.00で、リアルタイムOS(RX850 Pro)が使用できません。
Q
PM+ Ver.6.00で、リアルタイムOS(RX850 Pro)が使用できません。
A
RX850 Pro Ver.3.15以前のバージョンは、PM+ Ver.5.21以前にのみ対応しており、 PM+ Ver.6.00以降では登録することができません。

ただし、以下の方法でPM+ Ver.6.00以降でもビルドを行うことができます。

(1) パスを変更する PM+のメニュー・バーから、以下の2つのパスを「RX850 Proのインストール・ディレクトリ」に指定します。
  • RX850 Proライブラリへのパス
    [ツール]→[リンカのオプション設定]で指定します。
  • RX850 Proインクルード・ファイルへのパス
    [ツール]→[コンパイラのオプション設定]で指定します。
(2) CF850 Proが出力する情報ファイルを作成する 以下のどちらかの方法でCF850 Proが出力する情報ファイルを作成します。
  • コマンド・ラインでCF850 Proを実行する
    例) C:\NECTools32\bin\cf850pro -i sit.s -c sct.s -d sys.h sys.cf
  • ビルド前処理で CF を実行する PM+ の[ビルド]→[ビルド設定]でビルド前処理を開き、CF850 Proの実行コマンドを登録します。
    例) 登録コマンド
    C:\NECTools32\bin\cf850pro -i sit.s -c sct.s -d sys.h sys.cf
(3) 2で作成した情報ファイルをソース・ファイルへ登録する
例) sit.s、sct.sProjectWindow
drop
この情報はお役にたちましたか?
back to top  

v850
-959
リセット時に、リアルタイムOS(RX850 Pro)初期化処理前に必要な処理は何ですか?
Q
リセット時に、リアルタイムOS(RX850 Pro)初期化処理前に必要な処理は何ですか?
A
リセット時に必要な処理は以下のとおりです。
  • CPUクロックの設定(PLLの設定など)
  • tp、gp、epレジスタの設定
  • RX850 Pro初期化処理(__rx_start)へのジャンプ
なお、RX850 Pro初期化処理では、システム・コンフィギュレーション・ファイルで定義した システム・メモリ(SPOL0、SPOL1、UPOL0、UPOL1)を操作しますので、 これらのセクションが外部メモリに存在する場合は、メモリ・コントローラの 初期化も必要です。

初期値ありデータのROMからRAMへのコピー処理や、その他H/Wの初期化処理は、 リセット時、または初期化ハンドラで行ってください。

この情報はお役にたちましたか?
back to top  

v850
-463
エラー・メッセージ "Ffa01:PC位置の行情報が見つかりませんでした。" が表示されます。
Q
エラー・メッセージ


Ffa01:PC位置の行情報が見つかりませんでした。


が表示されます。


(補足)
ID850 V2.51以上では、メイン・ウインドウのステータス・バーに表示するようになりました。

A
プログラムの停止時にソース・ウインドウが開かれていると、 停止時のプログラム・カウンタ(PC)値に対応するソース・ファイルを表示します。
このエラー・メッセージは、 その時のプログラム・カウンタ(PC)の値に対応するソース・ファイルが見つからない場合に表示されます。


原因として、


(1) ソース・ファイルがソース・パスが通っていない場所に存在する。
(2) ライブラリ、リアルタイムOSのシステム・コールなど、 ソース・ファイルが存在しないところでプログラムを停止した。
(3) プログラムが暴走し、プログラムで使用していないアドレスへ実行が飛んで、 そこで停止した。
(4) デバッグ・モードでビルドしていないために、オブジェクトにデバッグ情報が含まれていない。


などが考えられます。


(1) の場合、ソース・パスは、デフォルトでダウンロードしている ロード・モジュール・ファイルが存在するディレクトリになっています。
それ以外のディレクトリにソースが置いてある場合には、[オプション]メニュー→ [デバッガ・オプション]で、ソース・パスを指定してください。


(2) のように、プログラムの構成上、このメッセージの表示を避けられない場合には、 コンソール・ウインドウを使用してエラー・ダイアログの表示をさせないことが可能です。


[参考] エラー・メッセージをエラー・ダイアログ以外で表示させる方法

この情報はお役にたちましたか?
back to top  
(2007/05)

v850
-649
RX850 Pro で、リンク時に、エラー・メッセージ "undefined: ’__e_sysfnc’ referenced in ’c:\nectools32\lib850e_ghs\r32\rxcore.o’" が表示されます。
Q
リンク時に、エラー・メッセージ


undefined: ’__e_sysfnc’ referenced in ’c:\nectools32\lib850e_ghs\r32\rxcore.o’


が表示されます。

A
このメッセージは、svc.s をアセンブルして得られる svc.o がリンクされていないために、 表示されます。


このファイルは、コンフィギュレータ cf850pro によって作られるシステム・コール・テーブルです。
このテーブルの先頭アドレスが、__e_sysfunc となります。
RX850 V3.1x では必要のないファイルのために忘れがちなので、注意が必要です。


なお、使用するシステム・コールを、 コンフィギュレーション定義(CF)ファイルに記述する必要があります。
記述方法、およびコンフィギュレータの起動方法については、 ユーザーズ・マニュアル インストレーション編の章「システム・コンフィギュレーション・ファイル」の 「SCT情報の記述形式」、および章「コンフィギュレータの操作方法」を参照してください。

この情報はお役にたちましたか?
back to top  

v850
-709
PMを使用してビルドをすると、hx850実行時に、メッセージ "Warning:address is too long" が表示されます。
Q
プロジェクト・マネージャ(PM)を使用してビルドをすると、hx850実行時に、メッセージ


Warning:address is too long


が表示されます。

A
これはインテル・ヘキサの制限なので、インテル・ヘキサ・フォーマットを指定し、かつ、 1Mバイト空間を越えるようなプログラムの場合、必ず表示されています。
実際の開発では、ロード・モジュールをヘキサ・フォーマットに変換する際に考慮すればよいことなので、 このメッセージは無視して構いません。


どうしてもメッセージを表示したくない場合は、モトローラ・ヘキサ・フォーマットを選択すれば、 表示されなくなります。

なお、PM+ではこのメッセージが次のように変更されました。

The address of hex convert area exceeds the maximum value of the address that can be expressed in the Intel expanded hex format

この情報はお役にたちましたか?
back to top  

v850
-819
Multi2000のリンカで "_memcpy" のシンボル解決ができずに、エラーとなります。
Q
GHS版でMulti2000を使用してサンプル・プログラムをビルド しましたが、リンカで"_memcpy"のシンボル解決ができずにエラーと なります。
どうすればよいですか?
A
Multi1.8.9からMulti2000にバージョン・アップした際に、memset関数や memcpy関数がlibstartup.aというライブラリに移動したために起こっています。
サンプルではこれらの関数をvarfunc.c内で使用していますので、 リンカが参照するライブラリとして、libstartup.aを追加する必要があります。
ビルダの「ファイルオプション」にある「ライブラリ」に libstartup.aを追加記述してください。
この情報はお役にたちましたか?
back to top  

v850
-650
RX850 Pro で、システムが暴走します。
Q
システムが暴走しています。

A
次のような原因が考えられます。


  • タスクのスタック領域、 および割り込みスタック領域 (システム・スタック領域) は十分ありますか?


    リアルタイム OS を使ったアプリケーションで、うまく動作しなくなる原因のほとんどがこれです。
    つまり、タスク・スタックや割り込みスタックが、指定したサイズを突き抜け、 他のタスクのスタックを破壊したり、RX850 Pro のシステム管理領域を破壊したりして、 結果的に暴走しています。
    RX850 Pro は、アドレス情報を頼りに動くため、 そのアドレスにおかしな値が入っていても疑わずに動作しますので、注意してください。


  • 間接起動割り込みハンドラの終了処理をきちんと書いていますか?


    間接起動割り込みハンドラの終了処理、つまり return の戻り値がきちんと設定されていなかった場合、 割り込み後の処理がおかしくなります。
    うまくいっていたとしても、偶然うまく動いていたことになります。


    単に、間接起動割り込みハンドラから抜けるときは、"return (TSK_NULL);" のように、 引数に "TSK_NULL" を指定します。
    もし、間接起動割り込みハンドラを抜けるときに、あるタスクを起床させたい場合は、 "return (TASK_ID);" のように、引数に "起床させたいタスクの ID" を指定します。


  • タスクが無限ループ記述 (for( ; ; )、 while(1)) されていない タスクは、 ext_tsk システム・コールを発行して終了処理をしていますか?


    タスクが無限ループ記述になっている場合は問題ありませんが、もしそうでないタスクがある場合、 そのタスクは、最後で ext_tsk システム・コールを発行して終了処理をする必要があります。
    記述されていない場合、RX850 Pro はそのタスクが終了したかどうかを判断できません。
    したがって、確実に暴走します。

  • この情報はお役にたちましたか?
    back to top  

    v850
    -811
    ブート処理において、システムが HALT 状態になります。
    Q
    ブート処理自体はうまく動作し、ブート処理の最後でRX850 Proに制御を移したのですが、 その後、タスクがひとつも動かずに、システムがHALT状態になります。

    A
    原因は、RX850 Proの初期化部分で、初期化がうまくいかなかったためです。
    ブートの最後でRX850 Proに制御を移すと、 システム・ベース・テーブル(SBT)の作成などの初期化を始めます。
    そこでは、各管理テーブルの作成、メモリ・プールの作成を行いますが、 1つでも作成に失敗するとHALT状態にしています。
    作成できない原因として、SBTや各管理テーブルを生成するシステム・メモリ・プール(SPOL0) が確保できない(メモリが書き込めない、領域が足りない)ことが考えられます。

    この情報はお役にたちましたか?
    back to top  

    v850
    -646
    システム・コールを発行しても、期待した動作をしません。
    Q
    システム・コールを発行しても、期待した動作をしません。

    A
    次のような原因が考えられます。
    • タスクの優先度によるもの


      待ちを解除するために、システム・コールを発行したときに、 解除されるタスクの優先度が他のタスクの優先度よりも低かった場合、 すぐに動作を開始しないため、期待した動作をしないことがあります。


    • スタック破壊によるもの


      wai_flg や wai_sem などの待ち系のシステム・コールを発行し、 その待ちを解除しようとしてもうまくいかない場合、 タスク・スタックや割り込みスタックによる領域破壊が原因である可能性があります。
      タスク・スタックや割り込みスタックが設定値より伸び、 それが リアルタイムOS (RXシリーズ) の管理領域を破壊し、 その中の待ち情報などが破壊されていることがあります。

    この情報はお役にたちましたか?
    back to top  

    v850
    -565
    RX850 Pro のシステム・コール戻り値で、"-17" は何を意味するのですか?
    Q
    システム・コールの戻り値として、"-17"が返されます。
    このエラー値は、何を意味するのですか?

    A
    エラーの内容として、E_NOSPTを表します。
    これは、該当システム・コールがシステム・コンフィギュレーション・ファイルの システム・コール・テーブルに登録されていないという意味です。

    この情報はお役にたちましたか?
    back to top  

    v850
    -810
    PMで、オブジェクトをファイル一覧に登録することができません。
    Q
    PMで、RX850 Proのrxcore.o(またはrxtmcore.o)をファイル一覧に登録することができません。

    このファイルはどうすればリンクできるですか?
    A
    PMでリンクしたいオブジェクトを指定するときは、 リンカオプションの設定ダイアログの[その他]タブにある“他のオプション(Y)”で、 オブジェクト名を設定します。
    フルパスで指定すると安全です。

    rxcore.oをリンクしたい場合は、
    c:\nectools32\lib850e\r32\rxcore.o
    と設定してください。

    なお、複数のオブジェクトを設定する場合は、半角スペースで区切ってください。
    “,(コロン)”や“;(セミコロン)”で区切らないでください。

    この情報はお役にたちましたか?
    back to top  

    v850
    -812
    ニュークリアス・オブジェクト rxcore.o と rxtmcore.o の違いは何ですか?
    Q
    ニュークリアス・オブジェクト rxcore.o と rxtmcore.o の違いは何ですか?

    A
    タイマ割り込み処理中の割り込み受け付けの仕様が異なります。


    オブジェクト名 仕様
    rxcore.o 周期起動ハンドラ処理中に、すべての割り込みレベルの割り込みが受付可能なニュークリアス・カーネル
    rxtmcore.o 周期起動ハンドラ処理中に、タイマ割り込みよりも優先度の高い割り込みレベルの割り込みのみ受付可能なニュークリアス・カーネル


    周期起動ハンドラは、タイマ・ハンドラから呼び出されます。
    rxcore.o では、タイマ・ハンドラ実行中に一度割り込み終了処理 (reti)を行っています。
    そのため、周期起動ハンドラ処理中は、すべての割り込みレベルの割り込みが受け付け可能になります。
    一方、rxtmcore.o では、タイマ・ハンドラ実行中に周期起動ハンドラを呼び出すため、 タイマ割り込みよりも優先度の高い割り込みのみ、受け付け可能になります。

    この情報はお役にたちましたか?
    back to top  

    v850
    -rx_p87
    RX850 Ver.3.1では、.sitセクションを0番地±32Kバイト以内に配置しなくてはなりませんでしたが、RX850 Proでも同じですか?
    Q
    RX850 Ver.3.1では、.sitセクションを0番地±32Kバイト以内に配置しなくてはなりませんでしたが、 RX850 Proでも同じですか?

    A
    RX850 Proでは、この制限はありません。
    配置場所に関する制限はありません。

    この情報はお役にたちましたか?
    back to top  

    v850
    -813
    RX850 Pro 本体だけを ROM や FLASH ROM に焼くには、どうすればよいですか?
    Q
    RX850 Pro 本体だけを ROM や FLASH ROM に焼くには、どうすればよいですか?
    A
    RX850 Pro 本体を焼いて、 その後はユーザ・アプリケーションだけを変更していく方法を取ることができます。
    これは、ROM 化するセクションを切り分けることで実現できます。


    RX850 Pro 本体において、ROM 化可能なセクションは次のとおりです。

    • .system
    • .system_int
    • .system_cmn
    .system に配置されるものは、
    • rxcore.o 内で RX が共通に使用するルーチン
    • svc.o (システム・コール・テーブル)
    • システム・コール本体 (cretsk.o など)
    • システム・コールで共通に使用されるルーチン (f_memget.o など)
    .system_int に配置されるものは、
    • rxcore.o 内の割り込み処理部分
    .system_cmn に配置されるものは、
    • rxcore.o 内のスケジューラ処理部分
    となります。


    ただし、システム・コール本体は、現在は使用していなくても、 今後使用される可能性があるものは、含めて配置する必要があります。
    実際にライブラリ (librxp.a / librxpm.a) 中のどのオブジェクトを使っているかは、 リンカのオプションでリンク・マップの出力 (CA850:-m / GHS 版:-map) を指定してリンク情報を取得し、 そこに出力されるオブジェクト名を参照してください。


    この対処をしていただければ、ROM 化される RX850 Pro 本体の領域はユーザ・プログラムの変更によって影響は受けません。
    なお、インタフェース・ライブラリ、および .sit セクションは、ユーザ・アプリケーション側にリンクしてください。


    また、ユーザ・プログラム側のブート部分 (boot.s / boot.850) で、

        mov #__rx_start, lp
        jmp [lp]
    
    というコードがありますが、__rx_start というシンボルは ROM 化した RX850 Pro 側にありますので、#__rx_start は実アドレスにして jmp する必要があります。


    以下に、該当部分のリンク・ディレクティブの例 (NEC 版) をあげます。


    【 例 1 】 ライブラリ内のオブジェクトを別々の出力セクションにする方法

    SYSTEM : !LOAD ?RX {
      .system_svc = $PROGBITS ?AX .system { svc.o };
      .system_core = $PROGBITS ?AX .system { ..\..\..\lib850e\r32\rxcore.o };
      .os_lib1 = $PROGBITS ?AX .system {udfsys.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib2 = $PROGBITS ?AX .system {relblk.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib3 = $PROGBITS ?AX .system {getblk.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib4 = $PROGBITS ?AX .system {gettim.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib5 = $PROGBITS ?AX .system {sndmsg.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib6 = $PROGBITS ?AX .system {rcvmsg.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib7 = $PROGBITS ?AX .system {sigsem.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib8 = $PROGBITS ?AX .system {waisem.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib9 = $PROGBITS ?AX .system {setflg.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib10 = $PROGBITS ?AX .system {waiflg.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib11 = $PROGBITS ?AX .system {wuptsk.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib12 = $PROGBITS ?AX .system {statsk.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib13 = $PROGBITS ?AX .system {exdtsk.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib14 = $PROGBITS ?AX .system {exttsk.o(c:\nectools32\lib850e\r32\librxp.a)};
      .os_lib15 = $PROGBITS ?AX .system {cretsk.o(c:\nectools32\lib850e\r32\librxp.a)};
      .system_cmn = $PROGBITS ?AX .system_cmn;
      .system_int = $PROGBITS ?AX .system_int;
    }; 
    TEXT : !LOAD ?RX {
     .text = $PROGBITS ?AX .text;
    };
    
    【 例 2 】 ライブラリ内のオブジェクトを 1 つのセクションにまとめる方法
    SYSTEM : !LOAD ?RX {
      .system_svc = $PROGBITS ?AX .system { svc.o };
      .system_core = $PROGBITS ?AX .system { ..\..\..\lib850e\r32\rxcore.o };
      .system = $PROGBITS ?AX .system { svc.o ..\..\..\lib850e\r32\rxcore.o
        udfsys.o(c:\nectools32\lib850e\r32\librxp.a)
        relblk.o(c:\nectools32\lib850e\r32\librxp.a)
        getblk.o(c:\nectools32\lib850e\r32\librxp.a)
        gettim.o(c:\nectools32\lib850e\r32\librxp.a)
        sndmsg.o(c:\nectools32\lib850e\r32\librxp.a)
        rcvmsg.o(c:\nectools32\lib850e\r32\librxp.a)
        sigsem.o(c:\nectools32\lib850e\r32\librxp.a)
        waisem.o(c:\nectools32\lib850e\r32\librxp.a)
        setflg.o(c:\nectools32\lib850e\r32\librxp.a)
        waiflg.o(c:\nectools32\lib850e\r32\librxp.a)
        wuptsk.o(c:\nectools32\lib850e\r32\librxp.a)
        statsk.o(c:\nectools32\lib850e\r32\librxp.a)
        exdtsk.o(c:\nectools32\lib850e\r32\librxp.a)
        exttsk.o(c:\nectools32\lib850e\r32\librxp.a)
        cretsk.o(c:\nectools32\lib850e\r32\librxp.a)
      };
      .system_cmn = $PROGBITS ?AX .system_cmn;
      .system_int = $PROGBITS ?AX .system_int;
    }; 
    TEXT : !LOAD ?RX {
      .text = $PROGBITS ?AX .text;
    };
    
    上記のいずれかの方法が一般的です。
    なお、リンクの際は、librxp.a (librxpm.a) を参照するオプションをつけてください。
    この情報はお役にたちましたか?
    back to top  





















     ご利用にあたって  個人情報保護について  RSS       © 1995-2008  NEC Electronics Corporation