SDCC的编译器警告

时间:2011-08-29 09:09:37

标签: compiler-construction embedded pic sdcc

使用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'EDEDATA'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:108:警告182:sfr'EDEDATA'的绝对地址 可能超出了范围。

/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-未定义全局'_TRISA_bits'由模块'test'引用

?模块'test'引用的ASlink-Warning-Undefined Global'_PORTA_bits'

任何人都可以帮我理解这些警告吗? 我应该关心吗?

1 个答案:

答案 0 :(得分:1)

免责声明:我从未参与过PIC

我的猜测是编译器检测到分配给这些变量的地址(sfr的 - “特殊功能寄存器”)不在处理器的预期存储器映射内。 sfr语法看起来像__sfr __at (0x80) P0;这是将寄存器变量赋值给特定地址。警告说这些地址似乎无效。

许多嵌入式编译器工具链包含某种“链接映射”命令文件,该文件告诉链接器在哪些物理地址中放置代码和数据。 This SDCC user's guide表示您可以使用“.lkr”文件。 (见第68页)。确保这对于您的特定处理器是正确的。

此外,该手册说明选择pic的正确标志是-mpic16。您确定-p16f86选项是否正确?