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

一、注册一个硬件中断服务函数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、中断虚拟服务函数的一致性??

时间: 2024-08-20 08:21:45

一种根据不同阶级注册不同的中断服务函数的写法的相关文章

request_irq() | 注册中断服务

一.中断注册方法 在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义: int request_irq(unsigned int irq, irq_handler_t handler,                         unsigned long irqflags, const char *devname, void *dev_id) irq是要申请的硬件中断号. handler是向系统注册的中断处理函数,是一个

【Java】Web 服务编程技巧与窍门: 在 UDDI 注册中心为 Web 服务注册开发 UDDI Java 应用程序

本技巧建立了一个使用统一描述.发现和集成 (Universal Description, Discovery, and Integration,UDDI) 来注册应用程序级消费的 Web 服务实例.作者提供了详细的代码示例以及基于 Java 的统一描述.发现和集成 (Universal Description, Discovery,and Integration for Java,UDDI4J) API 的扩展 API,通过这些可以使您使用 UDDI 来进行您自己的开发. 0 评论: Andre

windows下注册和取消pg服务的方法

介绍windows下注册和取消pg服务的命令的相关知识,在文章下面给大家介绍了如何将exe注册为windows服务,直接从后台运行,本文给大家分享两种方法,感兴趣的朋友一起看看吧 pg_ctl register [-N servicename] [-U username] [-P password] [-D datadir] [-w][-t seconds] [-o options] pg_ctl unregister [-N servicename] 参数说明如下: -N servicenam

Photon Server 实现注册与登录(二) --- 服务端代码整理

一.有的代码前端和后端都会用到.比如一些请求的Code.使用需要新建项目存放公共代码. 新建项目Common存放公共代码: EventCode :存放服务端自动发送信息给客户端的code OperationCode : 区分请求和响应 ReturnCode : 服务端响应码 ParameterCode : 解析参数Toos/DicTool.cs : 数据基本上都是用Dictionary读取,这里工具话一下. 二.代码 Toos/DicTool.cs using System.Collection

微服务~Eureka实现的服务注册与发现及服务之间的调用

微服务里一个重要的概念就是服务注册与发现技术,当你有一个新的服务运行后,我们的服务中心可以感知你,然后把加添加到服务列表里,然后当你死掉后,会从服务中心把你移除,而你作为一个服务,对其它服务公开的只是服务名称,而不是最终的服务地址URL,这对于云平台,容器化架构来说是非常重要的! 安装单独的Eureka服务(server) 服务注册-aspnetcore建立Eureka客户端(client) 服务发现-实现服务与服务的调用 一 安装单独的Eureka服务 安装tomcat,到apache官网ht

android动态注册广播监听服务demo

服务类,一定要在清单文件中注册 public class lightService extends Service { private boolean ifrun = false; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { super.onCreate(); System.

Windows注册与删除mysql服务

1.删除服务: (1)采用windows自带的服务管理工具:参考:http://www.cnblogs.com/qlqwjy/p/8010598.html sc delete MySQL57 (2)mysqld移除 --移除系统服务 mysqld --remove MySQL57 2.注册系统服务 mysqld --install mysql5.6 或者:(指定默认的配置文件) mysqld --install MySQLXY --defaults-file="C:\Program Files\

5种redis常用操作(数据类型+键值+服务+安全)

[toc] 5种redis常用数据类型操作 一.Redis常用操作 (string, list) 1.1 如果一个key设置两个不同的值,第二个值会覆盖第一个值. [[email protected] ~]# cd /usr/local/src/redis-4.0.9 [[email protected] redis-4.0.9]# redis-cli 127.0.0.1:6379> set key1 xavi OK 127.0.0.1:6379> set key2 xavilinux OK

Spring Cloud-服务的注册与发现之服务注册中心(Eureka Server)

Spring cloud是为了什么产生的? 根据官网的这个介绍来看,我们可以知道,Spring cloud是为开发者提供的一个工具,而使用这个工具的产生就是为了帮助开发者快速的开发一套比较通用的分布式系统. ( 而工具包含了:配置管理,服务发现,断路器,路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式 会话,群集状态) Spring boot是基于什么做的? 由此可见,spring cloud是基于spring boot开发出来的. 今天我们这边主要是看看服务注册中心的配置和使用.