1
3
这是我在类似情况下所做的,这个示例用于编写I_2 C驱动程序:
所有的pin索引都在一个依赖于应用程序的头文件中声明,以便快速浏览,例如:
在这个例子中,I_2 C总线实现是完全可移植的。它只依赖一个API,它可以通过索引写入芯片的管脚。 编辑: 此驱动程序的使用方式如下:
|
2
2
在我工作的一个车间,pin定义被放入一个特定于处理器的头文件中。在另一家商店,我将头文件分解为与处理器中的模块相关联的主题,如DAC、DMA和USB。处理器的主包含文件包含所有这些主题头文件。通过在处理器文件中包含不同的模块头文件,我们可以对同一个处理器的不同类型进行建模。 您可以创建一个实现头文件。该文件将根据处理器头文件定义I/O管脚。这为您提供了应用程序和硬件之间的一个抽象层。其思想是尽可能将应用程序与硬件松散地耦合在一起。 |
3
2
如果只有驱动程序需要知道CS管脚,那么声明不应该出现在头中,而是出现在驱动程序模块本身中。代码重用最好是在尽可能限制的范围内隐藏数据。 如果外部模块需要控制CS,请向设备驱动模块添加一个访问功能,以便您具有单点控制。如果在调试期间需要知道何时何地断言I/O管脚,那么这很有用;您只有一个点可以应用检测或断点。 |
4
2
运行时配置的答案对于一个像样的CPU(如ARM、PowerPC)是有效的,但是作者在这里运行的是8051。#定义可能是最好的方式。以下是我将如何分解它:
如果您需要更改管脚定义,或者移动到不同的CPU,那么在需要更新的地方应该很明显。当你不得不调整公共汽车上的时间时(也就是说,在这里和那里插入一个延迟),因为你不需要在整个地方改变时间,这也是有帮助的。希望它有帮助。 |
JeffreyH · 需要解释InvenSenses运动驱动程序 6 年前 |
gotti123 · 在MCU上查找Pin 6 年前 |
frank_010 · 在32位字存储器中连续读取3个字节 7 年前 |
LOSnel · 干扰irq将我从睡眠模式唤醒 7 年前 |
Juliano · ili9341不处理STM32f4发现 7 年前 |
yun · USB音频缓冲区欠载 7 年前 |
puzzled · 全球结构不起作用[关闭] 7 年前 |
Aimal · Elf十六进制表示法 7 年前 |
girikks · 结构值未在主源文件中更新 7 年前 |
user8235882 · 未在操作系统C中执行的for循环 7 年前 |