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 Global '_TRISA_bits' 被模块 'test' 引用

?ASlink-Warning-Undefined Global '_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 回答