2

我正在为 AVR MCU 编写一个静态库。我正在使用 avr-gcc 和 AVR Libc。一些库函数使用 SPI 与设备通信。然而,SPI 通信在所有 AVR MCU 上的完成方式不同(并非所有 AVR MCU 都具有相同的相关寄存器)。它甚至可以通过大爆炸来完成。因此,我希望用户为其特定应用程序提供自己的 SPI 例程。

我怎样才能做到这一点?所有库函数都应该将回调函数作为附加参数吗?我应该在库中使用一个全局变量作为 SPI 处理程序吗?我应该将函数设为外部(使用extern)吗?

谢谢,

4

1 回答 1

4

简单直接的解决方案是只声明一个适当命名的 extern 函数。这使您可以在没有 extern 函数的情况下编译库。但是,您或您的用户都无法在不提供适当功能的情况下链接完整的可执行文件。

我自己使用过这种方法并推荐它。它避免了不必要的复杂性,不使用任何对所有 C 编程环境都不是绝对基础的东西,重要的是,明显的错误将在构建时而不是在运行时被标记(你不会因为调用未定义的回调函数而导致运行时崩溃)。

于 2011-02-09T22:56:20.080 回答