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.

[参考译文] MSPM0G3507:Code Composer Studio -将.c 修改为.cpp 中断

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1260470/mspm0g3507-code-composer-studio---modifying-c-to-cpp-breaks-interrupts

器件型号:MSPM0G3507
主题中讨论的其他器件: SysConfig

我从以下示例开始: spi_controller_echo_interrupts_lp_MSPM0G3507_nortos_ticlang

对于我的工程、我想使用类、因此我将 spi_controller_echo_interrupts.c 重命名为 spi_controller_echo_interrupts.cpp

仍然可以构建、但如果我在中断服务例程上放置一个断点、调试器会提示它们已被禁用、代码会转到默认处理程序(卡在 while (1)循环中)。

它似乎很好地链接到 main、因为我可以很好地逐步介绍它。  此外,如果我将 main ()重命名为 mainx(),它将无法正确构建,所以它似乎在使用该文件。

如何确保中断例程得到链接?

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

    您好!

    它看起来像是一个编译器问题。 我将该线程移至 CCS 团队、并检查他们是否可以在这方面提供帮助。  

    此致、

    现金豪

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

    您好!

    我与编译器团队进行了核实。 他们认为这不是编译器问题。  

    从我的观点来看、SDK (empty_cpp)中有一个 C++示例项目。 如果您希望使用 C++编译工程、则可能需要从该 C++工程开始。

    此致、

    现金豪

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

    我不想 把它当作编译器的问题。
    我认为这与 c++名称改编有关。

    但 ti_msp_dl_config.h 确实声明了"extern c"、我认为这是应该避免的。  我无法确切地判断它是否被使用、因为这是生成的文件、所以我无法修改它。   

    有人能看看这个未来吗?  我不希望从空项目开始。  我尝试过,我不知道需要做什么,我开始尝试添加 syscfg ,但每当我点击离开它,我得到一个"噢快照! 上一次更改导致了一个异常..."  上次我询问如何向系统添加 syscfg 时、我被告知改用示例。

    重新创建问题的步骤非常简单... 如果您有 LaunchPad LP_mspm0g3507:

    1) 1)从 spi_controller-echo_interrupts_lp_MSPM0G3507_nortos_ticlang 开始

    2)在 spi_controller_echo_interrupts.cpp 中的 Group1_IRQHandler()上设置一个断点

    3)在 startup_mspm0g3507_ticlang.c 中的 Default_Handler ()上设置断点

    4) 4)构建并运行

    5) 5)按侧面的按钮、应该命中 Group1_IRQHandler、这很好

    6) 6)将 spi_controller_echo_interrupts.c 重命名为.cpp

    7) 7)构建并运行

    8) 8)按下板侧面的按钮、Default_Handler 应该被按下、这很糟糕。

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

    您好!

    我仅尝试修改了 empty_cpp_lp_MSPM0G3507_nortos_ticlang 的 sysconfig 配置。 我没有报告任何错误。 在该示例项目中、其中已包含 SysConfig 文件。 无需将 SysConfig 添加到项目中。

    了解这一 C++问题。  让我先按照您的步骤重现此问题。 并检查我们在此主题中可以为您提供哪些帮助。  

    此致、

    现金豪

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

    我从空项目开始、添加了 LED、切换到 GPIO、添加在 SPI 中、然后放入代码以初始化设置、但行为是相同的、您能否按照上面的8个步骤操作并弄清楚需要做什么、 或者、向我指出一个具有有效中断的 C++示例。

    谢谢你。

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

    有任何更新吗?  谢谢。

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

    我想你是对的- C++名称改编。 通常、这会导致链接失败、但:

    在这里,我们看到:-

    void Default_Handler (void)__attribute__((weak));

    ...

    extern void GROUP0_IRQHandler (void)__attribute__(weak、alias ("ALIAS" Default_Handler));
    extern void Group1_IRQHandler (void)__attribute__((weak、alias ("ALIAS" Default_Handler));

    ...

    extern void SPI0_IRQHandler (void)__attribute__(weak、alias ("ALIZ" Default_Handler));
    extern void SPI1_IRQHandler (void)__attribute__(weak、alias ("ALIZ" Default_Handler));

    这些函数具有弱默认处理程序、如果不提供不同的处理程序、则会被调用。

    在示例代码中、我们看到:-

    void SPI_0_INST_IRQHandler (void)
    {
    ...

    void Group1_IRQHandler (void)

    ...

    这2个函数的名称将被 C++编译器改编、因此不可用于替换默认的弱处理程序。

    制作

    extern "C" void SPI_0_INST_IRQHandler (void)

    extern "C" void Group1_IRQHandler (void)

    它应该起作用(我希望)。

    吉姆

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

    我曾尝试使用 extern "C"、但编译器抱怨说、此时我不知道会怎么样、因为我制作了自己的头文件、并将函数声明放在了其中。  我使用了 ti_msp_dl_config.h 文件的语法、
    #ifdef _cplusplc
    extern "C"{
    ...

    现在它看起来是有效的。  所以我可以花点时间去弄清楚哪些是不起作用的,但由于我有了解决方案,我将继续前进。  谢谢。