RTCHOOKP_t rtcHookTab[RTCHOOKTABLEN];// 指针函数表
Struct RTCHOOKP{
Int used;
(Void *) addr;
}
定时器函数:(作为底层函数,这个函数将不改动,而是在应用层中增加任务。)
Void timer()
{
rtcHookProcRun() ;
}
/*软时钟中断调用执行登记的函数*/
void rtcHookProcRun(void)
{
int i;
for(i = 0; i < RTCHOOKTABLEN;i++)
{
if(rtcHookTab[i].used)
{
rtcHookTab[i].start_addr(); // 在定时器中运行指针函数
}
else
{
break;
}
}
}
//通过这个函数,添加的hook 数组中
BOOLEAN rtcHookProcAdd(VOIDFUNCPTR start_addr)
{
int i;
int lockKey;
lockKey = myIntLock ();
for(i = 0; i < RTCHOOKTABLEN;i++)
{
if(!rtcHookTab[i].used)
{
rtcHookTab[i].used = TRUE;
rtcHookTab[i].start_addr = start_addr;
myIntUnlock (lockKey);
return(TRUE);
}
}
myIntUnlock (lockKey);
return(FALSE);
}
// 指针回调函数,通过这个函数
void bspInstDiIsr(VOIDFUNCPTR yxScanIsr)
{
rtcHookProcAdd(yxScanIsr);
}
将DI定时扫描任务加载到系统中
BOOLEAN diInit(DWORD evtid,DWORD evflag,WORD devID)
{
bspInstDiIsr((VOIDFUNCPTR)yxScanIsr);// 往定时器中增加回调函数
也可以直接调用rtcHookProcAdd(VOIDFUNCPTR)yxScanIsr) ;
}
HOOK 函数的练习与应用
猜你喜欢
转载自blog.csdn.net/tiger15605353603/article/details/81406823
今日推荐
周排行