2 Replies Latest reply on Oct 29, 2020 1:17 AM by NoTa_4591161

    Community Translation - Printing Floating Values using FX3 SDK – KBA231244

    NoTa_4591161

      Hi,               

       

      I would like to translate KBA231244 into Japanese.

      Please confirm to my work.

       

      Thanks,

      Kenshow

        • 1. Re: Community Translation - Printing Floating Values using FX3 SDK – KBA231244
          JuyoungJ_06

          Hi, Kenshow-san

          Confirm to work this KBA.

           

          Thanks,

          Jenna

          • 2. Re: Community Translation - Printing Floating Values using FX3 SDK – KBA231244
            NoTa_4591161

            Hi Jenna-san,

                                            

            Japanese translation was over.
            Please check below.

             

            Original KBA:

            Printing Floating Values using FX3 SDK – KBA231244

             

            Thanks.

            Kenshow

            ==============================

             

            タイトル: FX3 SDKを使用した浮動小数点値のprint出力 – KBA231244

             

            バージョン:**

             

            質問1FX3 SDKを使用してfloat変数またはdouble変数をprint出力することは可能ですか?

            回答:はい、FX3SDKを使用してfloat変数をprint出力することは可能です。標準Cライブラリ関数sprintf()を使用してprint出力できます。

            標準のsprintf()関数は、フォーマットされた文字列をバッファに格納するために使用されます。FX3 SDKfirmware/common/fx3.ld)で提供されるGCCリンカースクリプトは、sprintf()などの標準Cライブラリ関数に必要なランタイムヒープを初期化しません。

            標準Cライブラリ関数を使用している場合は、標準システムコールの実装を提供し、ヒープを作成するためにfx3.ldファイルを変更する必要があります。

            必要なシステムコールの実装例については、SDKBulkLoopAutoCppの例(パス:SDKインストールパス\Cycles\EZ-USB FX3 SDK\1.3\firmware\basic_examples)を参照してください。ヒープ初期化付きのスクリプトサンプルについては、fx3cpp.ldファイルを参照してください。

            注: SDKC ++リンカーファイル(fx3cpp.ld)は、SDKBulkLoopAutoCppの例のようなC ++ベースのプロジェクトにのみ使用できます。

             

            質問2FX3 SDKCベースのプロジェクトでfloat変数またはdouble変数をprint出力することは可能ですか?

            回答:はい、FX3SDKCベースのプロジェクトでfloat変数をprint出力することは可能です。float値は、標準Cライブラリのsprintf()関数とSDKCyU3PDebugPrintAPIを使用してprint出力できます。ただし、ランタイムヒープを初期化する必要があるため、sprintf()関数を使用する前にファームウェアを変更する必要があります。

            次の変更を行います。

            1. #include <sys/unistd.h>#include <stdio.h>をメインファームウェアファイルに追加します
            2. sprint()関数は、内部的に呼び出して_sbrkのシステムコールを。cyfxcppsyscall.cppファイル(FX3 SDKBulkLoopAutoCppプロジェクトで利用可能)から_sbrkの定義をファームウェアに追加します。
            3. fx3.ldcyfxtx.cファイルを変更して、メモリをヒープに割り当て、ヒープを初期化します。512KB SRAMの変更されたfx3.ldcyfxtx.cファイルは、このナレッジベース記事(KBA)に添付されています。添付のfx3.ldファイルとcyfxtx.xファイルは、デフォルトのメモリマップで2段階のブート操作用に予約されている32 KBSRAMを、sprintf()関数に必要なランタイムヒープに割り当てるように変更されています。  

             

            注意:

            • 添付ファイルは、アプリケーションで2ステージブートを使用しない場合にのみ使用してください。リンカスクリプトファイルおよびcyfxtx.cカスタム変更の場合、FX3CX3FX3SSD3FX2G2、およびSD2のデフォルトメモリマップの変更を参照ください。
            • このKBAに添付されているcyfxtx.cファイルをプロジェクトに含めた後、プロジェクト設定が変更されていること、つまり、新しいリンカスクリプトファイルへのパスが追加されていることを確認してください。

             

            1 .プロジェクト設定の変更

              

             

             

            4. ここで、ファームウェアでsprintf()関数を使用し、CyU3PDebugPrintAPIを使用して浮動小数点数をUARTに出力します。


            CyU3PDebugPrintAPIを使用して浮動小数点値をprint出力するサンプルコードを次に示します。

              

             

            質問3:浮動値を出力するためのサンプルコードはありますか?

            回答:質問2に記載されている手順に従って変更されたSDKUSBBukSourceSinkの例は、このKBAに添付されています。

             

            ==============================

            29-Oct-2020

            Kenshow