This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1290NCPDT:浮点对齐 TI 编译器

Guru**** 2387080 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1074117/tm4c1290ncpdt-float-alignment-ti-compiler

部件号:TM4C1290NCPDT

您好,

我使用的是目前为18.12.6的 TI-CGT-ARM 工具链,但我也检查了最新版本20和16。

以下代码导致派工时出现 FaultISR:tPointer->fWert=1.0;

我认为,这是与对齐的东西(见 aupool 上的+1),就像我使用的是 auc1一样,没有问题。

typedef struct SEreignisdaten
{
    int16_t iDaten;                    
    uint8_t eDatenTyp;            
    float   fWert;                
    uint8_t eBedienung;
} tEreignisdaten;

int main(void)
{
    uint8_t auPool[100]; 
    tEreignisdaten *tPointer=(tEreignisdaten *)((uint8_t*)&auPool+1);
    tPointer->fWert=1.0;
    ...
}

我找到了一个变通办法,但我想知道这是不是将来需要修复的,还是有编译标志或其他东西。

感谢您的评论

此致

米奇

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您编写此代码时...

    (tEreignisdaten *) 表达式

    您有责任确保 表达式按照指向结构的指针的要求对齐。  在这种具体情况下,不能保证这一点  

    UINT8_t auPool[100];

    在任何特定地址边界上对齐。  因此,无法保证任何使用 aupool 地址的表达式都将在任何特定的地址边界上对齐。

    谢谢,此致,

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,乔治,

    感谢您的回答。 这是我的猜测。 无论如何,使用 gcc 和同一个文件,我没有遇到这个问题。 我不是编译专家,所以我不确定这是否是我网站或编译器上的问题。

    此致

    米奇