如何让用户在我的库中提供自己的函数?
我正在为 AVR MCU 编写静态库。我正在使用 avr-gcc 和 AVR Libc。一些库函数使用 SPI 与设备通信。然而,并非所有 AVR MCU 都以相同的方式进行 SPI 通信(并非所有 AVR MCU 都具有相同的寄存器)。甚至可以通过大爆炸来完成。因此,我希望用户为其特定应用提供自己的 SPI 例程。
我该怎么做?所有库函数都应该采用回调函数作为附加参数吗?我应该在库中有一个全局变量作为 SPI 处理程序吗?我应该将函数设置为外部函数(使用 extern
)吗?
谢谢你,
I am writing a static library for an AVR MCU. I am using avr-gcc and AVR Libc. Some of the library functions use SPI to communicate with a device. However, SPI communication is not done the same way on all AVR MCUs (not all of them have the same registers concerned). It can even be done by big-banging. Thus, I want the user to provide its own SPI routine, for its specific application.
How can I do this? Should all the library functions take a callback function as an additional argument? Should I have a global variable within the library acting as an SPI handler? Should I make the function external (using extern
)?
Thank you,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简单直接的解决方案是声明一个适当命名的 extern 函数。这使您可以在不存在 extern 函数的情况下编译库。但是,如果不提供适当的函数,您或您的用户将无法链接完整的可执行文件。
我自己也使用过这种方法并推荐它。它避免了不必要的复杂性,不使用任何对所有 C 编程环境来说都不是绝对基础的东西,而且重要的是,明显的错误将在构建时而不是运行时被标记(由于调用未定义的回调函数,您不会遇到运行时崩溃)。
The simple and straightforward solution is to just declare an appropriately named extern function. This lets you compile your library without the extern function yet existing. But neither you or your users will be able to link a complete executable without providing an appropriate function.
I've used this approach myself and recommend it. It avoids unnecessary complications, uses nothing that isn't absolutely fundamental to all C programming environments, and importantly obvious errors will be flagged at build time not at run time (you won't get runtime crashes as undefined callback functions are called).