Zephyr中断服务类型及实际应用

zephyr中断系统一览
首先我们来看下zephyr中的中断系统有什么特别之处:
1. 内核为所有未使用的中断提供了默认的中断服务程序,如果一个未定义中断被触发会产生一个系统错误
2. 支持中断的嵌套
3. 中断服务程序执行在内核中断上下文
拥有自己的栈空间
要注意,栈的容量要足够大,以支持中断的嵌套
4. 软中断服务程序
常规中断一般都通过一个叫做软中断的服务程序进行管理
通过查找软中断向量表,能够获取实际要执行的中断服务程序(下文统称isr)入口以及参数
从isr返回时,决定是否进行线程的切换
5. 多数内核api只能在线程中使用,不能在isr中使用,那些可以在isr中使用的内核api往往都有一个isr_ok的属性。
zephyr的isr
再来看下,zephyr中的isr类型,zephyr中的中断服务类型大致分为3类:
1. 常规isr:
由软中断服务程序所调用,不能直接运行
简单,使用方便
2. 直接isr:
不使用软中断服务程序,直接注册进硬件中断向量表中
低延时,但是有很多限制,比如不能传入参数
3. 零延时isr:顾名思义就是延时最低的
拥有最高的中断优先级,不受中断锁影响
既可以是常规isr也可以是直接isr
zephyr的中断向量表
说完中断类型,介绍一下zephyr中的中断向量表的概念,除了硬件中断向量表,zephyr中还有一个较为新的概念,我们在上文中也有所提及,叫做软件中断向量表,那么他们都各自负责什么呢?我们来一一介绍。
1. 硬件中断向量表:前16个位置固定给了内核服务,其他位置,如果没有被注册的话,填入的是通用的中断服务程序_isr_wrapper()
2. 软件中断向量表:内部存储的是所注册的中断服务程序,以及想要传入的参数,所有所有未添加中断服务程序的地方,都会被写入z_irq_spurious()
3. 通用中断服务程序_isr_wrapper()作用:
中断函数第一入口,他是软件中断向量表的使用者
负责取出真正的中断服务程序入口以及参数
4. 直接中断:直接被装配到硬件中断向量表,当中断到来时,直接被执行
下图是完整的中断服务注册逻辑:
如何定义一个中断
了解了中断实现以及执行逻辑,我们来看看如何实际定义一个中断,首先是常规中断,只需要两个步骤:
1. 使用宏irq_connect进行中断定义,需要注意的是,所有参数的数值必须是编译期确定的,其原型是irq_connect(irq_p, priority_p, isr_p, isr_param_p, flags_p),各参数说明如下:
irq_p: 中断号
priority_p: 中断优先级
isr_p: 中断服务函数
fags_p: 中断标志
2. 使用irq_enable()使能中断
当然,上述方式是在编译期进行中断的注册,zephyr也同时支持运行期间通过调用函数irq_connect_dynamic()注册,但是需要配置config_dynamic_interrupts
下面是一段参考事例:
接下来是直接中断,实现方式略有不同,需要用户调用irq_direct_connect:
zephyr的零延时中断
最后聊聊零延时中断,上文说过,零延时中断的类型可以是直接中断也可以是常规中断,换句话说,他的实现方式与上述两种大致相同,唯一不同的是,中断标志位需要传入irq_zero_latency以指示这是一个零延时中断。
那么为什么要设计零延时中断呢?
最主要的原因是,在程序设计时,我们往往会在程序中加入irq lock,保证代码运行不会被中断打断,但是这样一来,就可能提高系统的延时,对于一些时间敏感的应用案例,高延时往往是不可接受的。
那么此时,零延时中断的作用就体现了,他自身运行在一个不会被lock的优先级,当然需要通过config_zero_latency_irqs使能。这样一来,一旦中断被触发,其对应的中断处理函数能够马上被执行,大大降低中断延时。
结语
本期文章,主要给大家分享了zephyr中的中断系统的一些基础概念,最特殊的地方在于,zephyr引入了一个软件中断向量表的概念,使得我们的中断服务程序可以接收参数,但是弊端就在于会引入一点中断延时,这样在实际使用中,我们就要权衡利弊,各取所好了。


从四个方面来详细聊聊泰捷盒子的真实使用情况
双极性电源是如何提供电流的
PI衰减器简介
便携汽车轮胎充气泵方案——鼎盛合电子方案
紧随时代脚步:中国人工智能发展程度居于世界前列
Zephyr中断服务类型及实际应用
东方风电成功签约国新集团辽宁鞍山融智新能源分散式项目 总装机容量达82.5MW
液晶拼接屏出现色差的原因
鲲云科技采用芯华章穹瀚GalaxFV 加速AI芯片设计
微软 GitHub 网页出黑暗模式、自动合并拉取请求、讨论等新功能
飞宇科技携最新产品参展阿布扎比防务展
卡巴斯基实验室发现,2019年银行木马攻击的数量将继续增加
高始兴表示给有技术积累的创业公司带来非常大的机会
锌负极在可充电水系电池中的发展与挑战
磷酸铁锂电池的发展趋势
关于大数据的数学基础和大数据的利弊分析
关于工业用火花点燃双燃料发动机性能分析及应用
英特尔认购京信网络股份,扩大约4.5%股权
2019年面板业恐面临更严苛的挑战
为什么我用高带宽探头测试出来的信号幅度“不准”?