如何让用户在我的库中提供自己的功能?

时间:2011-02-09 22:24:52

标签: c callback avr spi

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

我该怎么做?是否所有库函数都将回调函数作为附加参数?我是否应该在库中充当SPI处理程序的全局变量?我应该将函数设置为external(使用extern)吗?

谢谢,

1 个答案:

答案 0 :(得分:4)

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

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