原创 使用函数指针的中断隐身之应用

2009-10-21 16:06 2672 6 6 分类: MCU/ 嵌入式

如果不愿嵌入汇编 可以用函数指针再找个无用的中断向量.
例:


/*------------------------------------
         定时器T1中断服务程序
------------------------------------*/
void t1proc() interrupt TF1_VECTOR using 1
{
//T1已用于串口波特率发生器 故此中断无用 但编译也会产生reti指令
}


/*------------------------------------
         定时器T2中断服务程序(5mS)
------------------------------------*/
void t2proc() interrupt TF2_VECTOR using 0
{
void (* func)(void);//申请函数指针
  TF2 = 0;
//...................................
  func = (void *)t1proc;//由于Keil C不能直接调用中断 但可以间接调用
  func();//调用中断 执行reti指令且返回继续运行
//此后的程序和主循环中的程序级别相同 可以再响应任意中断
//但必须注意本程序有可能被二次调用(即再次中断)
//本例中只要保证二次中断时间不超过5mS即可.
}


这实际是dengm同志经常使用的"中断隐身"的标准C语言的写法.


它肯定比嵌入汇编执行速度慢 但肯定不会出错的 尤其在使用using分组时.


一般最好不要操作SP...


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条