工具/软件:TI C/C++编译器
当执行以下代码行时、我的函数之一会收到一个用法故障错误、指示未对齐的访问:
*so2est =-1.0F;
so2est 变量是一个传递到函数中的参数。
调用函数将指针传递给结构成员、作为 So2est 参数。 该结构定义为:
struct SO2Result { FloatSP fUArrayNorm[5]; FloatSP fUArraySrc1[5]; FloatSP fUArraySrc2[5]; FloatSP fUSArraySrc1[5]; FloatSP fUSArraySrc2[5];FloatSP fUSArraySrc2[5]; FloatSP fMinErrSqAvg; FloatSP fSO2Estimate; FloatSP fSO2ErrSq; };
注:FloatSP 被拼写为 float。
出于某种原因、结构变量即使包含所有浮点成员、也会存储在非4字节对齐的地址:
如您所见、变量的地址为0x20010C3B、传递给函数的成员的地址为0x20019CA3。
我不理解编译器/链接器为何不自动对齐此结构。 我尝试更改 CCS Build>ARM Compiler>Advanced Options>Runtime Model Options>Generate unaligned load 指令并将其存储为 off、但这并没有什么不同。
我还尝试使用#pragma DATA_ALIGN、但由于变量在栈上、因此它不会接受它。
我是否知道如何使支柱正确对齐?
我运行的是 CCS 版本8.0.0.00016和 TI v18.1.0.LTS 编译器版本。
此致、
Dave