0

このプロジェクトについては、「マイクロ信号アーキテクチャを使用したWiley-Embedded SignalProcessing.2007」で説明しています。2DDCT/IDCT(画像圧縮)を実装しました。画像を使用した別の個人プロジェクトと組み合わせます(これらのファイルを..に移動します)。Blackfin BF537のVisualDspでの処理(* .cppファイルのみ)。(最初はシミュレーターで、その後はBF537ボードで..)

実装されたプロジェクト2DDCT/IDCTには*があります。cおよび*。asmファイルとそれ非常にうまく機能します。ある時点で、いくつかの計算では、Cファイルからasmファイルで宣言(および実装)された関数を使用しています。

プロジェクト内でこれらの*.cファイル(* .cppファイルのみを含む)を移動すると、多くのエラーが発生し、次のようなエラーが発生することに気付きました。

"`[Error li1021] The following symbols referenced in processor 'p0' could not be resolved:
   'something [_something]' referenced from '.\Debug\project name.doj'"

したがって、プロジェクトには* .cppファイルだけが必要だと思います(*.cppと*.cの組み合わせではありません)。

2D DCT / IDCTプロジェクトでは、これらすべてを変更すると問題が発生します* cファイルを*に。cppファイル。ビルドしようとすると、次のリンクエラーが発生します。

"[Error li1021]  The following symbols referenced in processor 'p0' could not be resolved:
   '_r8x8dct(short *, short *, short *) [__r8x8dct__FPsN21]' referenced from '.\Debug\Start_DCT2.doj'
   '_r8x8invdct_ieee(short *, short *, short *) [__r8x8invdct_ieee__FPsN21]' referenced from '.\Debug\Start_DCT2.doj'"

の *。cppファイルこれは私がasmに実装された関数を呼び出す方法です:

     _r8x8dct(in,coeff,temp);

同じ*で。cppファイル私は関数を宣言したヘッダーファイルをインクルードします:

     void _r8x8dct(fract16 *in, fract16 *coeff, fract16 *temp);

そしてここに*の一部があります。関数を含むasmファイル:

     .section    L1_code;
     .global     __r8x8dct;
     .align      8;
     __r8x8dct:
     .....................................
     __r8x8dct.end:

機能付きアナログ$_r8x8invdct_ieee()

*英語の筆記ミスで失礼します

4

1 に答える 1

0

C ++からC関数を呼び出すには、C関数のプロトタイプを次のように修飾する必要がありますextern "C"

extern "C" void _r8x8dct(fract16 *in, fract16 *coeff, fract16 *temp);

または、複数のC関数がある場合は、次のようにプロトタイプをグループ化できます。

extern "C" {

    void _r8x8dct(fract16 *in, fract16 *coeff, fract16 *temp);

    // ... other C function prototypes ...
}
于 2012-01-28T13:48:21.260 に答える