我有一个我用 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 "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".
有一个特定的标志可以消除这些警告(-w),但我不喜欢在构建项目时出现任何警告。一些搜索使我从 2007 年开始的简短对话解决了这个问题:SDCC 中包含的库将默认为 PIC 18f452 构建。我的项目使用 18f26k22,导致这些警告。
上述对话包括有关如何为不同目标重建 pic16 库的说明。它们已经过时了,但我通过阅读配置脚本弄清楚了。我按照以下步骤重新编译库:
修改文件
device/lib/pic16/configure
。请注意,您还可以在 shell 中指定 ARCH 环境变量,如上述链接所述。(ARCH=18f26k22 make
)# The default architecture can be selected at configure time by setting the # environment variable ARCH to the desired device (18fxxx). ARCH=${ARCH:-18f452}
- 运行刚刚修改的配置文件:
./configure
make clean
make
- 上一级到 lib 目录:
cd ..
- 删除旧版本(如果存在):
rm -rf build/pic16
make
如果您使用非自由代码,您可能需要重复此操作。它住在device/non-free/lib/pic16
.
构建完成后,您可以更改 gplink 参数,以便 -I 标志指向包含您刚刚构建的库的构建目录。前任:-I/home/username/sdcc/device/lib/build/pic16 -I/home/username/sdcc/device/non-free/lib/build/pic16
不幸的是,gplink 使用了它找到的第一个库。这意味着您不能为您使用的每张图片构建库,将它们全部保存在不同的路径中,并且每个路径都有一个 -I 路径。gplink 将选择第一个并使用它,即使在其他 -I 路径中有其他版本不会产生处理器不匹配错误。
此外,make install
如果您针对多个芯片进行开发,那么运行将针对特定芯片构建的库复制到 /usr/local/sdcc 也无济于事。
除了包含我的项目所需的所有内容的自定义构建副本或使用 -w 标志之外,是否有更简洁的方法来处理此问题?