C 嵌入式传感器模块设计-外部功能

C 嵌入式传感器模块设计-外部功能,c,module,embedded,C,Module,Embedded,我有一个关于嵌入式设备(不同制造商,cortex M0-M7)的适当模块设计的小问题 假设我们有c传感器模块,用于从I2C设备acc.c和相应的头文件acc.h读取加速计数据。 模块需要用于I2C通信的外部功能。我正在考虑模块的正确实现。 到目前为止,我脑海中有三个版本: 包括I2C.h驱动程序(此选项是最后一个选项,因为它将在一个平台上固定模块的使用) 外部提供的函数的弱定义(但同样,弱定义的函数在平台上非常固定-NXP的实现与STM等不同) 进程结构中的函数指针,因此每个设备都会为I2C通信

我有一个关于嵌入式设备(不同制造商,cortex M0-M7)的适当模块设计的小问题

假设我们有c传感器模块,用于从I2C设备acc.c和相应的头文件acc.h读取加速计数据。 模块需要用于I2C通信的外部功能。我正在考虑模块的正确实现。 到目前为止,我脑海中有三个版本:

  • 包括I2C.h驱动程序(此选项是最后一个选项,因为它将在一个平台上固定模块的使用)
  • 外部提供的函数的弱定义(但同样,弱定义的函数在平台上非常固定-NXP的实现与STM等不同)
  • 进程结构中的函数指针,因此每个设备都会为I2C通信分配外部功能(对于这种设备来说,这似乎有点过分,调试这种实现可能有点棘手,但总体实现似乎是干净的)

  • 您是否有更好的解决方案,它比函数指针更可读/可调试,并且仍然是可移植的?

    i2c.h
    只是头文件而不是驱动程序。简单地抽象通信功能。您的i2c.c应该定义i2cread和i2cwrite之类的函数。然后,您将无需更改此文件以将其移植到另一个平台。没有其他需要。但问题是,何时会使用多个I2c外围设备,或者我错了吗?i2cwrite(int I2c,void*data,size_t len)感谢您的响应。因此,整个传感器模块将按如下方式交付:acc.c acc.h和i2c.c。在i2c.c中,将包含特定平台i2c的模块,然后实现i2cwrite和i2cread功能。i2c.c将是模块的类似于思维的接口(必须在使用模块之前实现)。我做对了吗?