0

私はアセンブリにはあまり興味がありませんが、プロジェクトでは、C51 C コンパイラのアセンブリ コードの数行を SDCC に変更する必要があります。

これはC51のコードです

setb    T1Run
setb    T0Run

setb    IDLE
jnb     T0Full, $

SDCCでコンパイルされたもの

?ASlink-Warning-Undefined Global 'IDLE' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global '$' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global 'T0Run' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global 'T1Run' referenced by module 'Com_Func'

?ASlink-Warning-Byte PCR relocation error for symbol  $
         file              module            area              offset
  Refby  ./Com_Func.rel    Com_Func          CSEG                     004A
  Defin  ./Com_Func.rel    Com_Func          CABS                     0000

コンパイラのエラー/警告として。

  • $-symbol がアセンブラによって命令の実際のアドレスに置き換えられることは知っていますが、SDCC に相当するものは何ですか?
  • などの警告を解決するにはどうすればよいT0Runですか?
4

2 に答える 2

1

笑...それはsdccのように聞こえますが、それは面白いです。ヘッダーファイルを追加し始めたところです。キールがそのプロジェクトフォルダーで行うように見つからなかったため、ビンディレクトリに配置する必要がありました。

これは役立つかもしれません。今、私はまだ専門家ではありませんが、彼らが言うことは彼らが言うように機能しません. 私はSDCCマニュアルと移行マニュアルの両方を使用しなければなりませんでしたが、最終的には必要なものの正しい構文を見つけました...

http://www.infineon.com/dgdl/AP0806510_XC800_Migration_Keil_2_SDCC.pdf?folderId=db3a30431375fb1a01138c57204603bd&fileId=db3a304314dca389011517efc5860d61&ack=t

于 2016-02-20T04:56:51.420 に答える
1

$ を同じ行で定義されたラベルに置き換えるだけでよいと思います。

00001$: 
  jnb     T0Full, 00001$

SDCC Compiler User Guideによると、次のことに注意してください。

インライン アセンブラー コード内で定義されるすべてのラベルは、nnnnn$ の形式である必要があります。ここで、nnnnn は 100 未満の数値です (これは、関数ごとに最大 100 のインライン アセンブラー ラベルの制限を意味します)。

他のコンパイラ警告に関しては、それらはおそらくどこにも定義されていないシンボルです。元の C51 コードではどのように定義されていましたか?

于 2013-07-24T14:30:55.430 に答える