gpt4 book ai didi

c - 考虑到编译库,在哪里定义 extern 声明变量

转载 作者:行者123 更新时间:2023-11-30 16:53:53 25 4
gpt4 key购买 nike

我正在开发一个嵌入式项目,但我的问题更多是关于一般最佳实践。

我正在编写一个源文件,该文件将在微 Controller 上操作外设,并且在头文件中我声明了它正常工作所需的两个缓冲区。

extern volatile struct my_buffer peripheral_Tx_Buffer;
extern volatile struct my_buffer peripheral_Rx_Buffer;

对于一些上下文来说,它们是 volatile ,因为它们应该在 ISR 内工作,并且 struct my_buffer 是一个简单的循环缓冲区,由一个数组、一个读取数据组成和一个书写头。

现在一切都很好,但我计划将其编译成一个库,这样我就可以将源代码提供给其他人而不泄露所有内容。现在,这不是有史以来编写的最聪明或革命性的代码,但我更喜欢将某些事情保留给自己。无论如何,这不是重点!

我想知道的是在哪里定义两个缓冲区。它们是全局的,因此用户可以处理存储在 peripheral_Rx_Buffer 中的传入数据,并通过 peripheral_Tx_Buffer 写入外设。

由于它们是在公共(public) header 中声明的(因此它们的存在是已知的),我是否应该将每次库用于其他项目时定义它们的责任留给最终用户(可能是 future 的我)?例如,将它们定义在程序的主要部分,即 main() 所在的位置。

或者我最好在将在库中编译的 pheripheral.c 中定义它们,以便我确定它们确实存在(消除一个潜在的错误源)?

我应该如何沟通要做什么?什么样的文档?

最佳答案

我建议封装这两个缓冲区 - 将它们静态地放在源文件中。您应该编写头文件公共(public) API 来访问它们(读、写等),而不是暴露缓冲区。您可以使用 doxygen 为其他开发人员提供公开功能的文档。通过这种方式,您将确保这两个缓冲区在代码中只存在一次,并且任何人都可以通过公开的 API 访问它们。

此外,您可以通过以您想要的方式编写访问函数来限制最终用户可以使用两个缓冲区执行的操作。

关于c - 考虑到编译库,在哪里定义 extern 声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com