1

PIC24チップ用の大規模で実質的なASMプロジェクトがあります。(特定のチップはPIC24FJ256GB210です)

私は今、Cで他のいくつかのルーチンを持っています。

これらを自分のプロジェクトに取り入れたいと思います。

Cルーチンは、5つほどのファイルのプロジェクトにあり、そのうちの1つにint main(void)は開始点としてステートメントが含まれています。これは、それらをテストし、それらが機能するという自信を与えることを目的としていました。これで、そのコードを移動して、より大きな既存のシステムに組み込む準備ができました。

アセンブリ言語のものは、__reset:命令から始まります。

次の3つのことを実行できるように、プロジェクトとビルドオプションをどのように調整しますか?

  • 私の__reset指示から始めてください
  • (または、少なくとも私の既存__resetのものとint main(void)少なくとも互いに協力していることを確認してください)
  • ASMコードから彼のルーチンを呼び出す
  • Cコードが設定するのと同じデータバッファを使用します

興味深いことに、Microchipのユーザーフォーラムとサンプルコードセクションは、このアイデアを見逃しているようです(または、おそらく、それらを見つける方法がわかりませんでした)。

この質問はよく聞かれていると思います。前の質問と重複していないことを願っていますが、ここにもMicroChipのサイトにも表示されていません。このトピックに関する役立つWebサイトへのリンクを歓迎します。

このサイトや他のサイトをより適切に検索する方法を学ぶ必要がある場合、それ自体が有用で実行可能な答えになります。繰り返しますが、私が重複した質問をしていないことを願っています。

4

2 に答える 2

2

DS51284H(「PIC24MCUおよびdsPIC®DSCユーザーズガイド用のMPLAB®Cコンパイラ」)(PDF)を読むことをお勧めします。

特にセクション4.4の起動と初期化を参照してください

「libpic30.aアーカイブ/ライブラリには2つのCランタイムスタートアップモジュールが含まれています。両方のスタートアップモジュールのエントリポイントは__resetです。リンカースクリプトは、プログラムメモリの位置0にGOTO __reset命令を作成し、デバイスのリセット時に制御を転送します。
。.... 5 .
関数mainは、パラメーターなしで呼び出されます。」

あなたの__resetラベルとCRT(Cランタイム)のラベルは競合しているように見えます。CRTのソースがある場合は、CRTのラベルの名前を別の名前に変更して、常に__reset自分のラベルが最初に呼び出されるようにすることで、ソースを変更できます。 もう1つのポイントは、スタンドアロンプ​​ログラムを使用して、独自のプログラム内からライブラリとして使用したいということです。スタンドアロンプ​​ログラムは、多くの場合、1つ以上の特定のタスクを実行し、そのタスクが終了すると終了するように設計されているため、Cコードを少しリファクタリングして、ライブラリっぽくすることができます(関数を削除して置き換えるなど)。ある種の機能を備えています)。__reset
main()init()


そしてセクション4.11関数呼び出し規約

「最初の8つの作業レジスタ(W0〜W7)は、関数パラメータに使用されます。パラメータは左から右の順序でレジスタに割り当てられ、パラメータは適切に配置された最初の使用可能なレジスタに割り当てられます
。....
関数戻り値は、8ビットまたは16ビットのスカラーの場合はW0、32ビットのスカラーの場合はW1:W0、64ビットのスカラーの場合はW3:W2:W1:W0で返されます。」

于 2013-03-12T18:07:45.147 に答える
0

マイケルはあなたに良い答えを与えました。追加したいのは、プロジェクトをCで作成し、その中でアセンブリ関数をカットする必要があるということだけです。

このようにして、スピーディーで機能的なasmコードを維持し、プロジェクトをCで管理できます。これははるかに簡単です。

Cコードをアセンブリに変換し、管理するための大きなアセンブリコードを用意することは、その逆です。

ドキュメントを読むと、Cでアセンブリ関数を使用するのはそれほど難しくないことがわかりますが、開始するには、次の内容を確認してください。

C:\ ... bla bla ... \ Microchip \ MPLAB C30 \ src \ dsp \ include \ dsp.h

このフォルダにある実際のアセンブリ関数のCでの関数宣言が含まれています。

C:\ ... bla bla ... \ Microchip \ MPLAB C30 \ src \ dsp \ asm

関数_VectorAdd:Vector Addition、ファイル"vadd.s"から始めることができます

アセンブリ関数_VectorAddは、ヘッダーファイルでVectorAddとして定義されていることに注意してください。

このサンプルファイルは、PIC24にはないDSPICのdspエンジン用です。しかし、それでも原理を抽出するのに十分な説明があります。

于 2015-01-04T20:24:44.223 に答える