【问题标题】:Compiler warnings with SDCCSDCC 的编译器警告
【发布时间】:2011-08-29 09:09:36
【问题描述】:

使用 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'引用

谁能帮我理解这些警告? 我应该关心吗?

【问题讨论】:

标签: compiler-construction embedded pic sdcc


【解决方案1】:

免责声明:我从未在 PIC 上工作过

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

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

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

【讨论】:

  • 谢谢阿雪莉。我从来不需要使用其他编译器创建链接文件,所以这让我措手不及。如何将 .lnk 文件指定给 SDCC?我可以将它作为头文件包含在主 C 文件中吗?您是正确的,因为手册确实说 -mpic16 将用于图片。我看到了一个使用 -p16f84 的示例,这就是我使用它的原因。它们产生相同的结果。
  • 谢谢,我已经编辑了 sdcc 的调用方式。 sdcc -mpic16 -I /usr/share/sdcc/include -L 16f84.lkr scoreboard.c 但是我现在得到一个错误“libdev18f452.lib:没有这样的文件或目录”,没有别的。
  • 该人还谈到了 -mpic16 选项。为 PIC 14 位处理器生成代码(开发中,未完成)。所以也许我用 SDCC 找错了树。
  • 最后一个错误听起来像是一个简单的路径错误。你在工具链目录结构中的任何地方都有那个文件吗?作为一个黑客,只需将其移动到与源相同的目录即可。 (正确的解决方法是添加某种“库路径”命令行选项。)
  • 能够让它编译。 sdcc -mpic14 -p16f84 -I /usr/share/sdcc/include scoreboard.c。必须将 .lkr 和 PIC16f84.lib 文件都移动到本地目录中。产生一个警告说正在使用默认的 16f84.lkr 文件,这很好。还没有测试,但我有更高的希望。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
相关资源
最近更新 更多