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.

[参考译文] TMS320F28069:使用特定代码结构时、链接器崩溃并显示消息、寄存器分配失败

Guru**** 2563610 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1031329/tms320f28069-linker-crash-with-message-register-allocation-failed-when-certain-code-structure-is-used

器件型号:TMS320F28069

指向此类代码的 IM 获取寄存器分配失败错误:

/***************************************************
 * checks if two angles(sectors) are adjacent
 **************************************************/
    inline bool_t isSectorAdjacent(uint16_t new_angle)
    {
        int16_t angle_diff = abs(new_angle - rotpos.angle);

        return angle_diff <= 60 or (new_angle == 330 and rotpos.angle == 30);
    }

/*****************************************
 * get current sector with offset
 ****************************************/
    int16_t getSector(void)
    {
        int16_t sector;

        if(config.adv_sector_fetching)
        {
            uint16_t GetCurrentHallAngle(void);
            float fastNormDeg(float);

            uint16_t current_sector = GetCurrentHallAngle();
            bool_t is_sector_adj = isSectorAdjacent(current_sector);

            if(is_sector_adj) sector = (int16_t)current_sector;
            else sector = (int16_t)rotpos.angle;        // if adjacency check fails just return normal version
        }
        else sector = (int16_t)rotpos.angle;

        sector += (rotpos.dir == REVERSE ? config.bwdsectoroffset : config.fwdsectoroffset);

        return fastNormDeg(sector);
    }

免责声明:这种失败绝非有效、只是我尝试修复问题的小试验和错误阶段的一部分。

对 Tobias F.

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

    Tobias、

    发生这种情况时、链接器是否有任何错误日志?  您能否为项目发布.cmd 文件、我不清楚此处所指的寄存器分配。

    最棒的
    Matthew

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

    我认为"寄存器分配失败"错误来自编译器而不是链接器。

    请按照文章 How to Submit a Compiler Test Case 中的说明进行操作

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

    编译正常、但在链接阶段失败。

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

    不、遗憾的是、没有可用信息、而是寄存器分配失败的函数。 从我的角度来看、问题来自链接时优化运行失败、在该运行中、链接器尝试将某些操作从堆栈重定位到寄存器、并在此操作中失败

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

    Tobias、
    我将在工具/编译器团队中循环。  我们可能需要使用 Chester 发布的有关如何提交编译器测试案例的链接。

    最棒的

    Matthew

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

    推动此类问题的唯一方法是重现此类问题。  它看起来使用了链接时优化(-opt_level=4)、并且在链接器开始运行后发出寄存器分配失败诊断。  在这种情况下、我需要整个 CCS 项目。  请按照文章 共享项目中的说明压缩项目。  然后将该 zip 文件附加到您的下一个帖子。

    谢谢、此致、

    乔治

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

    我尝试在接下来的几天内上传一个小测试设置。 遗憾的是、代码库包含一些专有的关闭源代码、我不允许以任何方式发布这些代码。 不过、您对优化级别的假设是正确的、同时也有其他提到的事实。

    此致 Tobias Faschingbaauer

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

    欢迎您通过私人消息向我发送 CCS 项目。  将鼠标悬停在我的屏幕名称或头像上。  将弹出一个框。 单击 发送私人邮件。 在出现的消息撰写界面中,使用回形针图标附加 zip 文件。

    谢谢、此致、

    乔治

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

    客户报告最新版本的编译器不会出现此问题。  在这种情况下、此问题被视为已解决。

    谢谢、此致、

    乔治