以下代码段来自制造商。我对他们想要做什么完全感到困惑。特别是与InterruptHandler有关。
请评论全局部分中的代码。这看起来不错吗?
此外,各种API都包含了我的观点。他们试图使用无效指针吗? ...很多问题,请主要评论他们如何建议timer2可以工作。
Kpi Name Jun May Apr
$Deposits 234 567 321
谢谢, 史蒂夫
编辑: 制造商代码包括一个例程(我似乎无法在此处添加它)来管理调用TMR2_ISR的高级中断if(PIE4bits.TMR2IE == 1&& PIR4bits.TMR2IF == 1)这似乎是否会否定任何TMR2_DefaultInterruptHandler?
再次感谢您的帮助。
答案 0 :(得分:2)
Garr Godfrey和Martin James的评论提供了有用的提示。因此,我将尽力填补可能的空白:
void (*TMR2_InterruptHandler)(void);
是一个全局变量,其函数指针提供当前的中断处理程序。
我会将TMR2_ISR()
读作“中断服务例程”。从提供的代码中,不清楚它的调用位置。怀疑它的名字,假设在触发中断时调用它是合理的。它检查全局中断处理程序函数指针TMR2_InterruptHandler
是否不是NULL
,并在成功的情况下调用指向的函数。
如果之前已调用TMR2_Initialize()
,则TMR2_InterruptHandler
指向函数TMR2_DefaultInterruptHandler()
。因此,在这种情况下,后者从TMR2_ISR()
。
void TMR2_SetInterruptHandler(void* InterruptHandler)
用于TMR2_Initialize()
。它设置当前的中断处理程序。 (惊喜。)
我有点困惑,因为我会成功:
void TMR2_SetInterruptHandler(void (*InterruptHandler)())
这是因为我在C ++的日常工作中钻了我“干净的打字”,但我记得C对此更加松懈。 (void*
与任何指针兼容。)
正如Garr Godfrey已经说过:“把你的代码放在TMR2_DefaultInterruptHandler”中
评论建议的地方
// add your TMR2 interrupt custom code