我想将其C++
用作我的微控制器 (MSP432) 项目的主要编程语言。
我写了一些不涉及中断服务例程(ISR )的简单脚本。他们都工作得很好。代码如下所示:
/* MSP and DriverLib includes */
/* no <<extern "C">> needed due to the header files implement it. */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
int main()
{
/* Some C++ code here that worked fine. */
}
现在我想升级我的代码,使其具有简单的 ISR,例如用于 UART 通信(串行 PC 接口)。所以我这样做了:
/* MSP and DriverLib includes */
/* no <<extern "C">> needed due to the header files implement it. */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
int main()
{
/* Some C++ code here that worked fine. */
}
void EUSCIA0_IRQHandler(void)
{
/* Some C++ code here that worked fine. */
}
这段代码的问题是 ISR 没有被触发。而是调用 DriverLib 中的默认 ISR。我想知道并开始尝试挖掘自己。
在某些时候,我不小心把extern "C"
源代码的 C++ 部分中定义的 ISR 放在了周围。它奏效了:
/* MSP and DriverLib includes */
/* no <<extern "C">> needed due to the header files implement it. */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
int main()
{
/* Some C++ code here that worked fine. */
}
extern "C"
{
void EUSCIA0_IRQHandler(void)
{
/* Only C code here works fine. */
}
}
我假设由于“I”(DriverLib)extern
在源代码的 C(不是 C++)部分中注册了 ISR 向量和 ISR 签名,因此我的 C++ ISR 超出了 ISR 签名的范围。
1)我是对的吗?
但是有一个问题!由于我将C++ ISR 移动到 C上下文中,因此我无法在 ISR 中使用 C++ 代码,例如类等。
2) 如何在不触及 DriverLib 的 ISR 初始化(例如)的情况下将 C++ 保持在源代码的 C++ 部分内的 ISR 内startup_msp432p401r_ccs.c
?
- C++ 的东西是
C++03
- C的东西是
C89