主题:C2000WARE 中讨论的其他器件
工具/软件:
尊敬的 TI 团队:
我的目标是将 8 位、16 位、32 位和浮点数据从 CPU1 传输到 CM。 我使用 CPU1toCMMSGRAM 来进行数据共享。我可以看到分配给结构体中变量的数据位于 ARM 内核的地址 0x039000 处和 C28x 内核的地址 0x20080000 处。这确认了数据共享已经发生在 C28x 的 2 字节字寻址和 CM 内核的 1 字节寻址处。 我尝试使用 enet_lwip_udp 通过以太网 UDP 通信将从 CM 共享的数据共享到我的 PC。
问题是我在两者之间获得了额外的字节(例如 0x00)、必须添加该字节以进行填充。但 Im 无法看到在不同数据之间如何添加填充的一致性。
例如:正确的数据是 41 47 71 12 34 56 78 A4 70 9D 3F 00 13 00 08 07 E9 3B D8 C6
但我会收到: 41 | 00 | 47 | 71 | 00 | 03 | 00 | 78 | 56 | 34 | 12 | A4 | 70 | 9D | 3F | 13 | 00 | 08 | 00。
gSharedSettings.handshake.sourceID = 0x41;
gSharedSettings.handshake.destID = 0x47;
gSharedSettings.handshake.hndcmd = 0x71;
gSharedSettings.handshake.Checksum = 0x12345678;
gSharedSettings.handshake.Version = 1.23f;
gSharedSettings.handshake.day = 0x0013;
gSharedSettings.handshake.month = 0x0008;
gSharedSettings.handshake.year = 0x07E9;
gSharedSettings.handshake.ready = 1;数据类型如下: typedef struct {
uint8_t sourceID; // e.g., 0x41 (CPU1)
uint8_t destID; // e.g., 0x47 (CPU2)
uint8_t hndcmd; // cmd
uint32_t Checksum; // 4-byte checksum
float Version; // IEEE-754 float (e.g., 1.23f)
uint16_t day; // DD
uint16_t month; // MM
uint16_t year; // YYYY
uint16_t ready;
} HandshakeSettings;我 假设实际数据和接收到的数据之间不匹配是由于 C28x 和 CM 之间的存储器对齐差异所致。但如何纠正? 我尝试了#pragma Pack (1)。