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.
我从以下示例开始: 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"{
...
现在它看起来是有效的。 所以我可以花点时间去弄清楚哪些是不起作用的,但由于我有了解决方案,我将继续前进。 谢谢。