2

SDCC 3.0.0 を使用。このコードのコンパイル

#include <  pic16f84.h>
void main(void) {
TRISA0=0;
RA0=1;
}

これらの警告を受け取ります。

daedalus@Eurydice:~/Projects/PIC$ sdcc -I /usr/share/sdcc/include/pic -p16f84 test.c

/usr/share/sdcc/include/pic/pic16f84.h:101: 警告 182: sfr 'INDF' の絶対アドレスはおそらく範囲外です。

/usr/share/sdcc/include/pic/pic16f84.h:101: 警告 182: sfr 'INDF' の絶対アドレスはおそらく範囲外です。

/usr/share/sdcc/include/pic/pic16f84.h:102: 警告 182: sfr 'TMR0' の絶対アドレスはおそらく範囲外です。

/usr/share/sdcc/include/pic/pic16f84.h:102: 警告 182: sfr 'TMR0' の絶対アドレスはおそらく範囲外です。

/usr/share/sdcc/include/pic/pic16f84.h:103: 警告 182: sfr 'PCL' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:103: 警告 182: sfr 'PCL' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:104: 警告 182: sfr 'STATUS' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:104: 警告 182: sfr 'STATUS' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:105: 警告 182: sfr 'FSR' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:105: 警告 182: sfr 'FSR' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:106: 警告 182: sfr 'PORTA' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:106: 警告 182: sfr 'PORTA' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:107: 警告 182: sfr 'PORTB' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:107: 警告 182: sfr 'PORTB' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:108: 警告 182: sfr 'EEDATA' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:108: 警告 182: sfr 'EEDATA' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:109: 警告 182: sfr 'EEADR' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:109: 警告 182: sfr 'EEADR' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:110: 警告 182: sfr 'PCLATH' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:110: 警告 182: sfr 'PCLATH' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:111: 警告 182: sfr 'INTCON' の絶対アドレスが範囲外の可能性があります。

/usr/share/sdcc/include/pic/pic16f84.h:111: 警告 182: sfr 'INTCON' の絶対アドレスが範囲外の可能性があります。

?ASlink-Warning-Undefined グローバル '_TRISA_bits' がモジュール 'test' によって参照されています

?ASlink-Warning-Undefined グローバル '_PORTA_bits' がモジュール 'test' によって参照されました

これらの警告を理解するのを手伝ってくれる人はいますか? 気にする必要がありますか?

4

1 に答える 1

1

免責事項: 私は PIC に取り組んだことがありません

私の推測では、これらの変数 (sfr の「特殊機能レジスタ」) に割り当てられたアドレスが、プロセッサの予想されるメモリ マップ内にないことをコンパイラが検出していると思われます。sfr 構文は次のよう__sfr __at (0x80) P0;になります。これは、レジスタ変数を特定のアドレスに割り当てています。警告は、これらのアドレスが無効であるように見えることを示しています。

多くの組み込みコンパイラ ツールチェーンには、コードとデータを配置する物理アドレスをリンカに指示する何らかの「リンク マップ」コマンド ファイルが含まれています。 この SDCC ユーザー ガイドでは、「.lkr」ファイルの使用を推奨しています。(68ページ参照)。それが特定のプロセッサに適していることを確認してください。

また、そのマニュアルには、 pic を選択するための正しいフラグは-mpic16. -p16f86オプションが正しいと確信していますか?

于 2011-08-29T17:49:58.550 に答える