UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 19804

9.1i EDK - OCM メモリからコードを実行すると、getchar およびその他の newlib ライブラリ関数呼び出しが機能しない

説明

キーワード : XPS, stdio, studio, UART

OCM メモリからコードを実行すると、getchar 関数呼び出しが機能しません。

同様に、ほかの newlib C ライブラリ ルーチンも、メモリ コンフィギュレーションによっては機能しません。 EDK で提供される newlib ライブラリは、-mrelocatable-lib オプションを使用してコンパイルされていますが、 このオプションで生成されたコードは、自己参照エントリを.text セクションから読み出します。

コードを実行すると、.text セクションのアドレスから読み出されるロード命令があるので、.text は読み出し可能/データ側アクセス可能である必要があります。 OCM は、この問題が発生するメモリ コンフィギュレーションの 1 つです。 OCM デザインには、ISOCM メモリへのデータ側インターフェイスがありません。 同じ OCM メモリ アドレスへのデータ側インターフェイスがあれば、ロードは問題なく終了します。

たとえば、BRAM ブロックが 2 つ (1 つは 命令側、もう 1 つはデータ側) あり、それぞれが異なるアドレスにマップされている場合、PLB BRAM でも同じ問題が発生します。 上記のようなコードを最初のブロックから実行すると、newlib ルーチンでこれらの命令が実行されたときに、不正メモリ アクセスが発生します。 このようなデザインはダウンロード/デバッグできないので、このようなメモリ構造は一般的ではありませんが、使用できないわけではありません。

ソリューション

この問題を回避するには、次のいずれかを行います。

- OCM メモリから、getchar またはその他の newlib 関数呼び出しを含むアプリケーション コードを実行しない。
- UART ドライバ関数呼び出しを使用して、UART ペリフェラルから文字列を直接読み出す。
例 :
XUartLite_RecvByte(Xuint32 BaseAddress);
AR# 19804
日付 12/15/2012
ステータス アクティブ
種類 一般
このページをブックマークに追加