PIC定时器中断服务函数清标志位后为何还加了一个判断?

[复制链接]
435|8
 楼主 | 2018-6-26 07:58 | 显示全部楼层 |阅读模式
void TMR2_ISR(void)
{

    // clear the TMR2 interrupt flag
    PIR1bits.TMR2IF = 0;

    if(TMR2_InterruptHandler)
    {
        TMR2_InterruptHandler();
    }
}


在找关键词中,只找到这个:void (*TMR2_InterruptHandler)(void);
因为不熟悉XDE的开发环境,所有应该就只有着吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-6-26 08:44 | 显示全部楼层
那个是中断处理吧
| 2018-6-26 16:03 | 显示全部楼层
那是个函数指针,先判断是否有效(已经初始化),如果有效则调用,否则不能调用(会导致未知错误)
 楼主 | 2018-6-26 17:11 | 显示全部楼层
那怎么知道有没有效,调用的话,调用的是哪个?或者说指向了哪里?????? 似乎都是空的哎
| 2018-6-26 17:25 | 显示全部楼层
hzocce 发表于 2018-6-26 17:11
那怎么知道有没有效,调用的话,调用的是哪个?或者说指向了哪里?????? 似乎都是空的哎 ...

if就是判断有没有效的;
你想指向那都可以,只要函数不带参数就可以;
(当然是指向你需要的中断处理函数)
 楼主 | 2018-6-27 13:40 | 显示全部楼层
sjnh 发表于 2018-6-26 17:25
if就是判断有没有效的;
你想指向那都可以,只要函数不带参数就可以;
(当然是指向你需要的中断处理函数 ...

那没有效,还 if 它干什么?
不是浪费时间,浪费的代码。

那到底指向哪里去? 那本来就是中断函数,就在中断里面加程序段就好了呀。
干嘛还要搞去另外一个地方?

| 2018-6-29 09:04 | 显示全部楼层
hzocce 发表于 2018-6-27 13:40
那没有效,还 if 它干什么?
不是浪费时间,浪费的代码。

这很正常,这就是回调机制,框架不需要改动,又可以满足不同应用的需求
 楼主 | 2018-6-29 09:47 | 显示全部楼层
ayb_ice 发表于 2018-6-29 09:04
这很正常,这就是回调机制,框架不需要改动,又可以满足不同应用的需求 ...

还是不懂~~~~~~
| 2018-6-29 10:23 | 显示全部楼层

好的程序驱动框架一般不改动,但又要满足不同的需求,所以一般采用回调机制,回调函数一般都是函数指针,这是用户需要定制的功能,由用户去定义

比如:定时器中断里用户需要做什么,写驱动的人根本不可能事先知道,只能由用户去定义,但中断的其它部分写驱动的人可以去处理,也必须去处理,比如清标志等

如果回调函数没有初始化就不能去调用,否则程序崩溃,所以先判断再调用
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /8 下一条

快速回复 返回顶部 返回列表