3

我有一个我用 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 库的说明。它们已经过时了,但我通过阅读配置脚本弄清楚了。我按照以下步骤重新编译库

  1. 修改文件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}
    
  2. 运行刚刚修改的配置文件:./configure
  3. make clean
  4. make
  5. 上一级到 lib 目录:cd ..
  6. 删除旧版本(如果存在):rm -rf build/pic16
  7. 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 标志之外,是否有更简洁的方法来处理此问题?

4

0 回答 0