2011-08-29 111 views
2

使用SDCC 3.0.0。 编译此代码使用SDCC编译器警告

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

和接收这些警告。

代达罗斯@欧律狄刻:〜/项目/ PIC $ SDCC -I在/ usr /共享/ SDCC /包括/ PIC -p16f84 test.c的

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

/usr/share/sdcc/include/pic/pic16f84.h:101:warning 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:warning 182:sfr'PCL'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:103:警告182:绝对地址SFR 'PCL' 可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:104:warning 182:sfr'STATUS'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:104:警告182:绝对地址SFR '状态' 可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:105:警告182:绝对地址SFR 'FSR' 可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:105:warning 182:sfr'FSR'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:106:warning 182:sfr'PORTA'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:106:warning 182:sfr'PORTA'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:107:warning 182:sfr'PORTB'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:107:warning 182:sfr'PORTB'的绝对地址可能超出范围。

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

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

/usr/share/sdcc/include/pic/pic16f84.h:109:warning 182:sfr'EEADR'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:109:warning 182:sfr'EEADR'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:110:warning 182:sfr'PCLATH'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:110:warning 182:sfr'PCLATH'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:111:warning 182:sfr'INTCON'的绝对地址可能超出范围。

/usr/share/sdcc/include/pic/pic16f84.h:111:warning 182:sfr'INTCON'的绝对地址可能超出范围。

?ASlink - 警告 - 未定义的全局“_TRISA_bits”参考模块“测试”

?ASlink - 警告 - 未定义的全局“_PORTA_bits”参考模块“测试”

谁能帮助我了解这些警告? 我应该在意吗?

+0

这个问题可能更有可能在http://electronics.stackexchange.com/ – kenny

回答

1

免责声明:我从来没有工作在PIC

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

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

此外,该手册说,选择图片的正确标志是-mpic16。你确定-p16f86选项是正确的吗?

+0

谢谢ASEYly上产生答案。我从来不需要使用其他编译器创建链接文件,所以这让我措手不及。如何将.lnk文件指定给SDCC?我可以将它作为头文件包含在主C文件中吗?你是正确的,因为手册确实说--mpic16是用于图片。我看到一个使用-p16f84的例子,这就是我使用它的原因。他们产生相同的结果。 – Michael

+0

谢谢,我编辑了如何调用sdcc。 'sdcc -mpic16 -I/usr/share/sdcc/include -L 16f84.lkr scoreboard.c'然而,我现在得到一个错误“libdev18f452.lib:没有这样的文件或目录”,没有别的。 – Michael

+0

该男子也对此说到-mpic16选项。为PIC 14位处理器生成代码(开发中,不完整)。所以也许我正在用SDCC咆哮错误的树。 – Michael