• 一种根据不同阶段注册不同中断服务函数的写法


    一、注册一个硬件中断服务函数irq_handler,作为硬件中断产生后,实际中断服务函数的总入口。

    void intc_setup_irq(vector, priority, irq_handler)

    二、中断服务函数irq_handler入口,根据不同的条件调用不同分支

    void irq_handler(void)
    {
             get isr val
    
             switch(val)
             {
                       case condition_1:
                                call_service(condition_1)
                       case condition_2:
                                call_service(condition_2)
                       ...
                       ...
             }
    }

    三、定义一个全局的函数指针,作为“Interrupt Virtual Service Routine”,通过注册函数,在不同阶段,注册执行不同的服务函数。

    void (*global_vsr)(int condition);

    四、定义中断虚拟服务注册函数irq_register_service,改变global_vsr的实际指向,用于指向当前中断服务函数。

    void irq_register_service(void (*cur_vsr)(int))
    {
             global_vsr = cur_vsr;
    }

    五、call_service函数,call_service实际通过global_vsr调用了当前的中断服务函数。

    void call_service(condition)
    {
             global_vsr(condition);
    }

    使用要点:

    1、注意irq_register_service注册中断虚拟服务函数的时机!!

    2、中断虚拟服务函数的一致性??

  • 相关阅读:
    HDU6168 Numbers
    HDU6170 Two strings
    UVA11426 GCD
    hihocoder1560 H国的身份证号码II
    HDU6156 Palindrome Function
    UVA10917 Walk Through the Forest
    UVA11374 Airport Express
    hihocoder1323 回文字符串
    hihocoder1543 SCI表示法
    CodeForces501C Misha and Forest
  • 原文地址:https://www.cnblogs.com/utank/p/5436101.html
Copyright © 2020-2023  润新知