|
|
1
2
我通常更喜欢分层架构。通过“驱动程序”实现与硬件的通信。算法层调用由驱动程序实现的函数(readTemp)。关键是需要定义一个接口,所有驱动程序实现都必须遵守这个接口。 高层应该不知道温度是如何读取的(使用TMP75或ADC并不重要)。驱动程序体系结构的缺点是通常不能在运行时切换驱动程序。对于大多数嵌入式项目来说,这不是问题。如果要执行此操作,请定义指向驱动程序公开的函数(遵循公共接口)的函数指针,而不是指向实现函数的函数指针。 |
|
|
2
1
称之为:
当你用这个的时候,只是沮丧。 然后,您将为您的设备创建功能:
你将把设备结构传给需要读取温度的函数。 这个(或类似的东西)在Linux内核中使用,除了它们不将函数指针放在结构中,而是为它创建一个特殊的静态结构,并在设备结构中创建指向这个结构的stor指针。这几乎就是如何像C++那样面向对象的语言实现多态性。 如果将这些函数放在一个单独的编译单元中,包括引用它们的设备结构,那么仍然可以节省空间,并在链接时忽略它们。 如果您需要不同类型的参数,或者更少的参数,请忘记它。这意味着您不能为想要更改的内容设计公共接口(在任何意义上),但是没有公共接口,就不可能实现可更改的功能。您可以使用编译时多态性(例如,typedefs&separate编译单元用于不同的实现,其中一个将在二进制文件中链接),但它至少必须与源代码兼容,即以相同的方式调用。 |
|
|
3
0
正确的方法是使用helper函数。当然,是
另一方面,如果你输入def
注意,我从typedef中删除了“uc”前缀,因为函数无论如何都不返回无符号字符。它返回一个布尔值,OK ness。 |