您好,
我正在进行一个项目,我需要将一个巨大的 C 软件模块从 Windows 平台(小型 Endian 体系结构)移植到 TMS570LS3137 (大型 Endian)
软件 模块基本上从外部芯片接收一些数据,处理这些数据并发回响应。
接收或发送到外部芯片的数据应该是比较小的字节,但 TMS570LS3137是比较大的字节。
软件模块使用大量类型转换将8位数据缓冲区转换为特定的内部结构类型。
例如:
myStructure = (MY_STRUCTURE_TYPE *)pData //pData of type (uint8_t *)
当软件在 Windows 平台上运行时,由于“yStructure”中的数据顺序正确,因此其工作正常,但在 TMS570上运行时,由于字节序的变化,一切都是错误的。
1/我看到只要 定义了此类结构,就可以使用的 pragma <#pragma scalar_storage_order litte-endian>,但 TI 编译器不支持该结构(TI v20.2.5.LTS)
2我试图用小端点编译代码,并在 CCS 中将设备类型更改为小端点,但我在将代码刷新到目标上时遇到问题,CCS 中出现错误“File.elf 与目标端字节不匹配,未加载”
3我正在研究如何将编译器更改为 gcc (以便使用 scal_storage_order pragma) ,但这一过程将涉及构建整个 GNU 工具链。 但是,这一过程似乎没有得到很好的记录。
我能看到的唯一肮脏的黑客方式是手动创建函数,以便在使用此类类型转换时反向所需的字节。 但是,这是一种容易出错的高强度适应,因为有 数百种结构和类型铸造,如上所述。
您认为处理此问题的最佳方法是什么? 我对任何解决方案都持开放态度。
谢谢