gpt4 book ai didi

SPI 24位地址设备的C结构

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:47 25 4
gpt4 key购买 nike

我正在与具有 24 位地址和 16 位偏移量的 SPI 音频记录 IC 通信。我制作了一个结构来从该设备读取/写入数据,

命令 - 1 字节地址 - 3 字节(24 位)偏移地址——2字节(16位)

在模拟过程中(在变形中),发现第 4 个字节(地址的 MSB)与第 5 个字节(偏移量的 LSB)重叠。

代码如下。请帮助我需要对代码进行哪些更改。

typedef struct {
unsigned char Command:8 ;
unsigned long Addr:24;
unsigned int Offset:16;
} ISD_Struct;
ISD_Struct ISD_Rec;
void main()
{
address = 0x563412 ;
OFFST = 0x9A78 ;
ISD_Rec.Command = 0xBC;
ISD_Rec.Addr = address;
ISD_Rec.Offset = OFFST;
Write_SPI(&ISD_Rec,6); //sending (1byte command + 3byte address + 2 byte offset)
//Delay_ms(1000);
}

谢谢

最佳答案

如果你真的想要一个压缩结构,最好的方法是

typedef struct {
unsigned char Command;
unsigned char Addr[3];
unsigned char Offset[2];
} ISD_Struct;
ISD_Struct ISD_Rec;

如果您的编译器没有 24 位数据类型(这很可能),那么这是唯一实用的方法。这也将避免对齐问题,以及字节顺序的潜在问题。当然,您必须进行一些字节移位和屏蔽来设置各个字节,但这很简单。

您可以添加 assert(sizeof(ISD_REC == 6)) 作为完整性检查。

关于SPI 24位地址设备的C结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341631/

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