C 我如何处理';处理器不匹配';警告,但不使其静音或包含依赖项的自定义生成副本?
我用SDCC 3.6.3和gputils 1.5.0构建了一个PIC的C项目,这两个都是我从源代码构建的 链接我的项目时,我从gplink收到以下错误消息:C 我如何处理';处理器不匹配';警告,但不使其静音或包含依赖项的自定义生成副本?,c,pic,sdcc,C,Pic,Sdcc,我用SDCC 3.6.3和gputils 1.5.0构建了一个PIC的C项目,这两个都是我从源代码构建的 链接我的项目时,我从gplink收到以下错误消息: warning: Processor mismatch in "streams.o". warning: Processor mismatch in "mullong.o". warning: Processor mismatch in "divulong.o". warning: Processor mismatch in "gptrpu
warning: Processor mismatch in "streams.o".
warning: Processor mismatch in "mullong.o".
warning: Processor mismatch in "divulong.o".
warning: Processor mismatch in "gptrput1.o".
warning: Processor mismatch in "divuint.o".
warning: Processor mismatch in "gptrget1.o".
warning: Processor mismatch in "eeprom16_gptrget1_dispatch.o".
warning: Processor mismatch in "eeprom16_gptrput1_dispatch.o".
warning: Processor mismatch in "eeprom16_gptrput1.o".
warning: Processor mismatch in "eeprom16_gptrget1.o".
warning: Processor mismatch in "eeprom16_write.o".
有一个特定的标志来关闭这些警告(),但我不喜欢在构建项目时出现任何警告。通过一些搜索,我找到了解决这个问题的方法:SDCC附带的库将默认为PIC 18f452构建。我的项目使用18f26k22,导致这些警告
上述对话包括如何为不同目标重建pic16库的说明。它们已经过时了,但我通过阅读配置脚本找到了答案。我按照以下步骤重新编译库:
device/lib/pic16/configure
。请注意,您还可以在shell处指定ARCH环境变量,如上述链接所述。(ARCH=18f26k22品牌
)
/configure
makeclean
make
cd..
rm-rf版本/pic16
make
设备/非免费/lib/pic16
中
构建完成后,可以更改gplink参数,以便-I标志指向包含刚构建的库的构建目录。例如:-I/home/username/sdcc/device/lib/build/pic16-I/home/username/sdcc/device/non-free/lib/build/pic16
不幸的是,gplink使用它找到的第一个lib。这意味着您不能为您使用的每个pic构建lib,将它们都保存在不同的路径中,并且每个pic都有一个-I路径。gplink将选择第一个并使用它,即使在其他-I路径中有其他版本不会产生处理器不匹配错误
此外,如果为多个芯片开发,那么运行makeinstall
将为特定芯片构建的libs复制到/usr/local/sdcc中也没有帮助
除了包含我的项目所需的所有内容的自定义副本或使用-w标志外,还有更干净的处理方法吗?使用
-w
标志并不能解决任何问题,它只是隐藏警告。为什么不同处理器的库位于同一目录中?将它们放在不同的目录中,并在编译/链接特定PIC处理器的项目时参考正确的目录-或者-为每个库指定一个包含处理器的名称,然后将正确的处理器名称传递给link语句,以便它引用正确的库。@user3629249我真的不想隐藏警告。为了回答你的问题,我不确定。SDCC就是这样组织他们的库的。SDCC适用于多种不同类型的硬件,而不仅仅是PIC。它们为pic16和pic14库提供了一个单独的目录,这很好。也许他们不想为所有不同的图片建立一个单独的目录?有很多。重命名是可能的,但我真的不想每次sdcc的新版本出现时,除了为每个芯片编译它们之外,还要修改所有的库。
# The default architecture can be selected at configure time by setting the
# environment variable ARCH to the desired device (18fxxx).
ARCH=${ARCH:-18f452}