Compiler construction 使用SDCC的编译器警告

Compiler construction 使用SDCC的编译器警告,compiler-construction,embedded,pic,sdcc,Compiler Construction,Embedded,Pic,Sdcc,使用SDCC3.0.0。 编译此代码 #include < pic16f84.h> void main(void) { TRISA0=0; RA0=1; } #包括 真空总管(真空){ 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:1

使用SDCC3.0.0。 编译此代码

#include <  pic16f84.h>
void main(void) {
TRISA0=0;
RA0=1;
}
#包括
真空总管(真空){
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“状态”的绝对地址可能超出范围

/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:警告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:warning 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警告未定义全局“\u TRISA\u位”

?模块“测试”引用的ASlink警告未定义全局“\u PORTA\u bits”

有人能帮我理解这些警告吗? 我应该在意吗?

免责声明:我从来没有画过照片

我的猜测是,编译器正在检测分配给这些变量(sfr的--“特殊函数寄存器”)的地址不在处理器的预期内存映射内。sfr语法看起来像(0x80)P0处的
\uuuuusfr\uuuuu这是将寄存器变量分配到特定地址。警告是指这些地址似乎无效

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


此外,该手册还指出,选择pic的正确标志是
-mpic16
。您确定
-p16f86
选项正确吗

这个问题很可能会在“谢谢你,阿舍利”一文中给出答案。我从来没有使用其他编译器创建过链接文件,所以这让我措手不及。如何将.lnk文件指定给SDCC?我可以在主C文件中将其作为头文件包含吗?您的回答是正确的,因为手册确实说明-mpic16将用于PIC。我看到了一个使用-p16f84的示例,这就是我使用它的原因。它们产生相同的结果。谢谢,我编辑了sdcc的名称
sdcc-mpic16-I/usr/share/sdcc/include-L 16f84.lkr scoreboard.c
但是我现在得到了一个错误“libdev18f452.lib:没有这样的文件或目录”和其他任何错误。这个人还谈到了-mpic16选项。为PIC 14位处理器生成代码(正在开发中,尚未完成)。也许我用SDCC搞错了。最后一个错误听起来像是一个简单的路径错误。在工具链目录结构中的任何位置都有该文件吗?作为黑客,只需将其移动到与源代码相同的目录。(正确的修复方法是添加某种“Library Path”命令行选项。)能够将其编译。sdcc-mpic14-p16f84-I/usr/share/sdcc/include scoreboard.c。必须将.lkr和PIC16f84.lib文件都移动到本地目录中。生成一条警告,提示正在使用默认的16f84.lkr文件,这很好。我还没有测试,但我有更高的希望。谢谢你的帮助。