1 Zephyr中断服务类型及实际应用-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2022-03-10 11:53 次阅读

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. 直接中断:直接被装配到硬件中断向量表,当中断到来时,直接被执行

下图是完整的中断服务注册逻辑:

f0686766-a018-11ec-952b-dac502259ad0.png

如何定义一个中断

了解了中断实现以及执行逻辑,我们来看看如何实际定义一个中断,首先是常规中断,只需要两个步骤:

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

下面是一段参考事例:

poYBAGIpdwSADiDfAAA4M7aNlcI543.png

接下来是直接中断,实现方式略有不同,需要用户调用IRQ_DIRECT_CONNECT:

pYYBAGIpdvyARR9IAABA8_gY0GI001.png

Zephyr的零延时中断

最后聊聊零延时中断,上文说过,零延时中断的类型可以是直接中断也可以是常规中断,换句话说,他的实现方式与上述两种大致相同,唯一不同的是,中断标志位需要传入IRQ_ZERO_LATENCY以指示这是一个零延时中断。

那么为什么要设计零延时中断呢?

最主要的原因是,在程序设计时,我们往往会在程序中加入irq lock,保证代码运行不会被中断打断,但是这样一来,就可能提高系统的延时,对于一些时间敏感的应用案例,高延时往往是不可接受的。

那么此时,零延时中断的作用就体现了,他自身运行在一个不会被lock的优先级,当然需要通过CONFIG_ZERO_LATENCY_IRQS使能。这样一来,一旦中断被触发,其对应的中断处理函数能够马上被执行,大大降低中断延时。

结语

本期文章,主要给大家分享了Zephyr中的中断系统的一些基础概念,最特殊的地方在于,Zephyr引入了一个软件中断向量表的概念,使得我们的中断服务程序可以接收参数,但是弊端就在于会引入一点中断延时,这样在实际使用中,我们就要权衡利弊,各取所好了。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 中断系统
    +关注

    关注

    1

    文章

    96

    浏览量

    61015

原文标题:清风徐来——Zephyr实战篇(6)之中断

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Zephyr的构建工具

    给大家介绍一下Zephyr的构建工具们:
    的头像 发表于 12-05 09:51 558次阅读
    <b class='flag-5'>Zephyr</b>的构建工具

    51单片机的中断号对应的中断类型介绍

    51单片机通常有5个中断,当中断发生时,程序会跳到相应的中断服务程序去执行。为了区别不同的中断,引入了
    发表于 07-19 00:52

    Zephyr与FreeRTOS实时性测试比较

    1、Zephyr与FreeRTOS实时性测试比较分析用Rhealstone基准程序方法,分别测试Zephyr和FreeRTOS两个RTOS的六个实时性能指标,发现Zephyr指标较差。考虑到任务切换
    发表于 08-19 16:12

    vxworks中断服务程序

    中断服务程序用来处理来自硬件的中断,是设备驱动程序的重要组成部分。为及时响应外部中断,防止中断丢失.中断
    发表于 06-27 11:09 1415次阅读

    WindowsCE异常和中断服务程序

    WindowsCE异常和中断服务程序,中断和异常都是异步发生的事件,当该事件发生,系统将停止目前正在执行的代码转而执行事件响应的服务程序。
    发表于 01-04 15:37 1694次阅读

    51单片机有几个中断?单片机的中断号对应的中断类型说明

    51单片机通常有5个中断,当中断发生时,程序会跳到相应的中断服务程序去执行。为了区别不同的中断,引入了
    发表于 08-06 17:34 5次下载
    51单片机有几个<b class='flag-5'>中断</b>?单片机的<b class='flag-5'>中断</b>号对应的<b class='flag-5'>中断</b><b class='flag-5'>类型</b>说明

    中断时间间隔的中断服务程序实现免费下载

    本文档的主要内容详细介绍的是中断时间间隔的中断服务程序实现免费下载。
    发表于 08-06 17:34 1次下载
    <b class='flag-5'>中断</b>时间间隔的<b class='flag-5'>中断</b><b class='flag-5'>服务</b>程序实现免费下载

    浅析Zephyr在ESP32上的启动流程

    理解Zephyr在一款soc上的启动流程,有利于分析和调试开机过程卡死,驱动异常等的问题。因此在上手一款新的soc时掌握Zephyr在其上面的启动流程非常必要。本文对Zephyr在ESP32上的启动
    的头像 发表于 06-07 17:04 5274次阅读

    浅析Zephyr应用的代码结构中的自定义驱动

    本篇是《《Zephyr应用的代码结构》》系列的终篇和下面两篇文章一起可以构建出一个有app独立管理的zephyr项目 Zephyr应用的代码结构--West提货单: zephyr
    的头像 发表于 08-18 09:08 4775次阅读

    微机原理——8086中断类型以及中断向量表、中断响应、中断返回

    这里写目录标题先验知识回顾控制寄存器回顾1、8086中断类型1、外部可屏蔽中断2、外部不可屏蔽中断3、除法错中断4、单步
    发表于 11-24 16:51 16次下载
    微机原理——8086<b class='flag-5'>中断</b><b class='flag-5'>类型</b>以及<b class='flag-5'>中断</b>向量表、<b class='flag-5'>中断</b>响应、<b class='flag-5'>中断</b>返回

    实际中断处理

    中断处理处理外界发出的信号。中断信号可能是关于数据读写操作的,也可能与外部设备控制有关。Intel处理器只有一个外部中断引脚INTR,为了使处理器能够同时接收多个硬件设备发送来的中断
    发表于 12-17 18:44 7次下载
    <b class='flag-5'>实际</b><b class='flag-5'>中断</b>处理

    泰凌微电子Zephyr编译环境搭建

    如上文所介绍,Telink Zephyr是由社区的Zephyr仓库fork而来的,用于维护我们在社区的内容,并开发新的功能。若要查看 Telink Zephyr 最新的开发内容,可以查看位于GitHub上telink-semi的
    的头像 发表于 01-30 11:28 3183次阅读

    瑞萨正式加入Zephyr项目

    近日,瑞萨正式加入Zephyr项目,成为银级会员。Zephyr是Linux基金会的开源项目,旨在为面向未来且资源受限的设备建立安全、互联且灵活的实时操作系统。Zephyr设计来源于开发人员,也更易
    的头像 发表于 03-09 17:43 1827次阅读

    深入解析Zephyr RTOS的技术细节

    Zephyr是一个针对资源受限设备优化的小型、可缩放、多体系架构实时操作系统(RTOS)。Zephyr由Linux基金会维护[1],是一个以构建业界最佳的RTOS为目标的开源合作项目。近年来
    的头像 发表于 10-22 16:47 485次阅读
    深入解析<b class='flag-5'>Zephyr</b> RTOS的技术细节

    使用MCUXPresso插件开发Zephyr

    应广大读者朋友的热情邀请,我们特别策划了“Zephyr领进门”系列介绍(共十篇),旨在为大家深度剖析Zephyr OS——这一备受瞩目的开源实时操作系统。从使用MCUXPresso插件进行开发
    的头像 发表于 11-28 09:41 241次阅读