gpt4 book ai didi

c - 保存传感器寄存器字段详细信息的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:20 24 4
gpt4 key购买 nike

我正在通过 SPI 将传感器连接到 BeagleBone Black。我可以成功读写寄存器。我现在想要做的是能够访问寄存器中的每个单独字段(例如,X1、X3)以读取或写入。

我也可以做到这一点,但方法很无聊。我通过定义一个包含寄存器中字段名称的枚举来实现这一点。然后我声明了一个包含三部分信息的结构:字段寄存器的地址、字段的第一位和最后一位。然后,我定义了一个包含字段数的结构数组。最后,我必须为每个单独的字段初始化这三个值(地址、第一位和最后一位)。

以下是我的代码示例:

enum {X1, X2, X3,     // Fields of register in address 0
X4, X5, // Register in address 1
X6, X7 // Register in address 2
} FIELD;

typedef struct
{
int address;
int first_bit;
int last_bit;
} FIELDS;

FIELDS fields[3];

fields[X1] = (FIELDS) {.address = 0x00, .first_bit = ..., .last_bit = ...}
...

正如我所说,这种方式可行,但问题是我在传感器中有大量字段(大约 60 个)。以后传感器可能会变,我得改字段的名称和相关信息。

目前的方法耗时、繁琐、容易出错,而且不易适应不同的传感器。

我认为应该有一种更聪明、适应性更强、更不容易出错的方法来做到这一点?您能否提出任何更好的方法来实现我的目标?

Sample of sensor's registers

最佳答案

好吧,本质上是“否”,因为它归结为所讨论传感器的特定寄存器布局。据我所知,这些从不 self 描述,因此您将不得不在软件端静态地“知道”可用的内容和位置。

当然,如果你走投无路,你可以做的是发明(或找到)一种比 C 更擅长描述任意位域的 DSL,并在其中描述寄存器集。然后使用代码生成技术制作所需的 C 代码,从而将需要更新的部分转移到更合适的语言中(当然,以更实际的软件复杂性为代价)。

关于c - 保存传感器寄存器字段详细信息的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49196057/

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