- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, Kenshow-san
Confirm to work this KBA.
Thanks,
Jenna
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Jenna-san,
Japanese translation was over.
Please check below.
Original KBA:
Printing Floating Values using FX3 SDK – KBA231244
Thanks.
==============================
タイトル: FX3 SDKを使用した浮動小数点値のprint出力 – KBA231244
バージョン:**
質問1:FX3 SDKを使用してfloat変数またはdouble変数をprint出力することは可能ですか?
回答:はい、FX3SDKを使用してfloat変数をprint出力することは可能です。標準Cライブラリ関数sprintf()を使用してprint出力できます。
標準のsprintf()関数は、フォーマットされた文字列をバッファに格納するために使用されます。FX3 SDK(firmware/common/fx3.ld)で提供されるGCCリンカースクリプトは、sprintf()などの標準Cライブラリ関数に必要なランタイムヒープを初期化しません。
標準Cライブラリ関数を使用している場合は、標準システムコールの実装を提供し、ヒープを作成するためにfx3.ldファイルを変更する必要があります。
必要なシステムコールの実装例については、SDKのBulkLoopAutoCppの例(パス:SDKインストールパス\Cycles\EZ-USB FX3 SDK\1.3\firmware\basic_examples)を参照してください。ヒープ初期化付きのスクリプトサンプルについては、fx3cpp.ldファイルを参照してください。
注: SDKのC ++リンカーファイル(fx3cpp.ld)は、SDKのBulkLoopAutoCppの例のようなC ++ベースのプロジェクトにのみ使用できます。
質問2:FX3 SDKのCベースのプロジェクトでfloat変数またはdouble変数をprint出力することは可能ですか?
回答:はい、FX3SDKのCベースのプロジェクトでfloat変数をprint出力することは可能です。float値は、標準Cライブラリのsprintf()関数とSDKのCyU3PDebugPrintAPIを使用してprint出力できます。ただし、ランタイムヒープを初期化する必要があるため、sprintf()関数を使用する前にファームウェアを変更する必要があります。
次の変更を行います。
- #include <sys/unistd.h>と#include <stdio.h>をメインファームウェアファイルに追加します
- sprint()関数は、内部的に呼び出して_sbrkのシステムコールを。cyfxcppsyscall.cppファイル(FX3 SDKのBulkLoopAutoCppプロジェクトで利用可能)から_sbrkの定義をファームウェアに追加します。
- fx3.ldとcyfxtx.cファイルを変更して、メモリをヒープに割り当て、ヒープを初期化します。512KB SRAMの変更されたfx3.ldとcyfxtx.cのファイルは、このナレッジベース記事(KBA)に添付されています。添付のfx3.ldファイルとcyfxtx.xファイルは、デフォルトのメモリマップで2段階のブート操作用に予約されている32 KBのSRAMを、sprintf()関数に必要なランタイムヒープに割り当てるように変更されています。
注意:
- 添付ファイルは、アプリケーションで2ステージブートを使用しない場合にのみ使用してください。リンカスクリプトファイルおよびcyfxtx.cのカスタム変更の場合、FX3、CX3、FX3S、SD3、FX2G2、およびSD2のデフォルトメモリマップの変更を参照ください。
- このKBAに添付されているcyfxtx.cファイルをプロジェクトに含めた後、プロジェクト設定が変更されていること、つまり、新しいリンカスクリプトファイルへのパスが追加されていることを確認してください。
図1 .プロジェクト設定の変更
4. ここで、ファームウェアでsprintf()関数を使用し、CyU3PDebugPrintAPIを使用して浮動小数点数をUARTに出力します。
CyU3PDebugPrintAPIを使用して浮動小数点値をprint出力するサンプルコードを次に示します。
質問3:浮動値を出力するためのサンプルコードはありますか?
回答:質問2に記載されている手順に従って変更されたSDKのUSBBukSourceSinkの例は、このKBAに添付されています。
==============================
29-Oct-2020