【发布时间】:2017-08-21 10:58:25
【问题描述】:
我正在将名为 i2cdevlib 的 arduino 著名库之一移植到我的嵌入式系统。而且我遇到一个问题,其实这次远不是第一次,功能界面如下:
void function(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, uint8_t len);
我需要做的是首先将dev_addr 写入i2c 总线然后reg_addr 然后data。但是用于将数据发送到 i2c 总线的 i2c 驱动程序(我使用的是 Keil MDK 包中的一个)函数的定义如下:
void send_i2c(uint8_t dev_addr, uint8_t *data, uint8_t len);
由于某些 i2c 属性,我无法按顺序调用它。因此,每次调用function 时,我都必须创建新数组,将第一项设置为reg_addr,然后将memcpy data 放入其中,这看起来很糟糕而且似乎效率不高(老实说,数据流很少使用这些传感器时,但仍然......)。但是,除了修改 i2c 驱动程序或编写新驱动程序之外,我看不到另一种解决方案,但我不想仅仅因为一个功能而重写可持续和经过测试的驱动程序。
那么有没有办法在不这样做的情况下改进这个解决方案?
【问题讨论】:
-
鉴于现有接口,我不确定是否有其他方法(除了将责任推给
function的调用者)。如果这不是瓶颈,并且您可以将这种粗略封装到一个函数中,那我就不用担心了。 -
@OliverCharlesworth 我无法将它推送到
function调用者,因为function接口由i2cdevlib库决定。 -
所以你被夹在两个固定的函数原型之间,你既不能控制外部调用者也不能控制内部被调用者?
-
@Medinoc 是的,没错。
-
"well known" 可能是对“著名”库的更好描述 - 我不会走那么远。
标签: arrays arduino embedded keil