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.

[参考译文] CCS/MSP432P401R:用于MSP432的GCC空项目模板:将__attribute___(Used)添加到中断向量[]

Guru**** 2538955 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/572146/ccs-msp432p401r-gcc-empty-project-template-for-msp432-add-__attribute__-used-to-interruptvectors

部件号:MSP432P401R

工具/软件:Code Composer Studio

您好,

与TI编译器类似,gcc将优化未使用的函数和变量。 因此,应将使用的属性添加到中断处理程序数组中(在文件startup_msp432p401r_gcc.c中),这将防止gcc删除中断处理程序。

请将其添加到默认模板中,因为这可能会给用户带来非常奇怪的问题。

谢谢,

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

    Dan,

    您使用的是哪个版本的工具? 原因是我使用CCSv7中的所有缺省值创建了一个简单的项目,并且可以看到,在优化器完全打开时,.intvecs已完全分配。 另外,我将我的项目的启动文件与Simplelink MSP432 SDK (msp432p401_adc14_21)中的一个GCC示例进行了比较,它们的区别仅在入口点-项目模板调用GCC的_mainCRTStartup(),项目手动初始化.bss并直接调用main()。

    我将示例项目移植到基于模板的项目中,它也运行良好。 请检查所附的我使用的项目。

    此致,

    拉斐尔

    e2e.ti.com/.../1663.msp432_5F00_gcc_5F00_test.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Rafael:
    我主要是在没有代码编写器的情况下使用gcc (只打开它以获得最新的空项目)。 目前我正在从ARM运行gcc (版本6.2 .1)。 在该处,省略所用的属性会导致.intvecs节为空,但中断处理程序会出现。 我不太喜欢编译器内部,所以如果gcc优化了明确放在某个部分中的处理程序,那么您可能会认为它是一个错误,但指定__attribute_((Used ))可以解决问题。
    由于该属性不会影响gcc的较低版本,并且似乎与TI的编译器兼容,因此我建议在默认情况下将其包括在内,以实现将来的兼容性。

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

    感谢您提供信息。 我会将此信息转发给MSP432产品组(他们拥有启动文件)。

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

    嗨Dan,

    只是为了确保我理解正确,您使用的是不带CCS的GCC编译器,您看到.intvecs节为空,但处理程序是链接的(我假设用.text)。 以下行将产生请求的更改:

    void (* const interruptvectors[])(void)__attribute__(section(".intvecs"))))__attribute__(((已用))={...}
    
    
    

    我无法使用ARM GCC 4.9 在CCS中重新创建问题。3,__attribute__((已用))没有区别。 映射文件显示.intvecs节的长度为0xe4。

    可能CCS GCC链接器的处理方式有所不同。 请告诉我您使用了哪些链接器选项,以便我使用独立的GCC支持软件包重新创建它?

    谢谢!

    Bob Heilmaier

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

    Bob,您好!

    是的,我正在使用独立GCC。 我刚刚弄清楚了问题所在,我将中断向量放在CPP文件中,并将其放在外部"C"{}中。 然后,地图文件中的.intvecs节为空(处理程序仍然存在)。 当我将所有内容放入C文件时,intvecs部分就在那里(不管是否指定了used)。

    不知道为什么会发生这种情况,也许这是gcc的优化程序中的一个错误。

    谢谢,

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

    很好地听到你不受这个问题的限制。

    我会尽量与我们的专家联系,希望很快能回来了解一些详细信息。

    谢谢!
    Bob