我想在 CMake 项目中将 ISR 函数放入一个单独的 TimerIrq.cpp 文件中(仅包括 ISR 函数):
TimerIrq.cpp:
外部硬件::TimerDrv *gTimerDrv;
//
//
//这是 Timer0_B0中断矢量服务例程。
//
//
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=TIMER0_B0_VECTOR
_interrupt
#Elif defined (_GNU_)
__attribute__((interrupt (TIMER0_B0_vector)))
#endif
void tick_timer_interrupt (void)
{
gTimerDrv->TickInterruptCallback();
//用于调度的唤醒
_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS + GIE);
}
------------------------------------------------------
makeLists:
add_library (hwihmsketch 静态"")
Target_Sources (hwihmsketch
私有
AdcDrv.cpp
ClockDrv.cpp
DigitalPinDrv.cpp
SpiDrv.cpp
TimerDrv.cpp
WatchDogDrv.cpp
LowLevelFactory.cpp
TimerIrq.cpp
)
Target_Link_libraries (hwihmsketch
私有
TI::msp430lib
)
add_library (HW::ifmsketch 别名 hwihmsketch)
------------------------------------------------------------------
它可以按预期进行编译、但从未触发 ISR。
如果我将 ISR 函数放在另一个 TimerDrv.cpp 文件中、该文件提供计时器配置函数并具有 TimerDrv.h 头文件、则可以按预期触发。
我知道有一种解决方案是将"TimerDrv.cpp"文件中的"TimerIrq.cpp"文件包含在内、但我不喜欢这种方法(很丑)、是否有任何其他解决 方案可以保持"TimerIrq.cpp"并按预期触发 ISR?
非常感谢!