liteos 中断机制(四)
1. 概述
中断是指出现需要时, CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的事务,此时, CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中断。
众多周知, CPU的处理速度比外设的运行速度快很多,外设可以在没有CPU介入的情况下完成一定的工作,但某些情况下需要CPU为其做一定的工作。
通过中断机制,在外设不需要CPU介入时, CPU可以执行其它任务,而当外设需要CPU时通过产生中断信号使CPU立即中断当前任务来响应中断请求。这样可以使CPU避免把大量时间耗费在等待,查询外设状态的操作上,因此将大大提高系统实时性以及执行效率。
Huawei LiteOS的中断支持:
- 中断初始化。
- 中断创建。
- 开/关中断。
- 恢复中断。
- 中断使能。
- 中断屏蔽。
Huawei LiteOS的中断机制支持中断共享。
1.1 中断的介绍
与中断相关的硬件可以划分为三类:设备、中断控制器、 CPU本身。
设备:发起中断的源,当设备需要请求CPU时,产生一个中断信号,该信号连接至中断控制器。
中断控制器:中断控制器是CPU众多外设中的一个,它一方面接收其它外设中断引脚的输入,另一方面,它会发出中断信号给CPU。可以通过对中断控制器编程实现对中断源的优先级、触发方式、打开和关闭源等设置操作。常用的中断控制器有VIC(Vector Interrupt Controller)和GIC(General Interrupt Controller),在ARM Cortex-A7中使用的中断控制器是GIC。
CPU: CPU会响应中断源的请求,中断当前正在执行的任务,转而执行中断处理程序。
1.2 和中断相关的名词解释
中断号:每个中断请求信号都会有特定的标志,使得计算机能够判断是哪个设备提出的中断请求,这个标志就是中断号。
中断请求:“紧急事件”需向CPU提出申请(发一个电脉冲信号),要求中断,及要求CPU暂停当前执行的任务,转而处理该“紧急事件”,这一申请过程称为中断申
请。
中断优先级:为使系统能够及时响应并处理所有中断,系统根据中断时间的重要性和紧迫程度,将中断源分为若干个级别,称作中断优先级。 Huawei LiteOS中所有的中断源优先级相同,不支持中断嵌套或抢占。
中断处理程序:当外设产生中断请求后, CPU暂停当前的任务,转而响应中断申请,即执行中断处理程序。
中断触发:中断源发出并送给CPU控制信号,将接口卡上的中断触发器置“1”,表明该中断源产生了中断,要求CPU去响应该中断,CPU暂停当前任务,执行相应的中断处理程序。
中断触发类型:外部中断申请通过一个物理信号发送到GIC,可以是电平触发或边沿触发。
中断向量:中断服务程序的入口地址。
中断向量表:存储中断向量的存储区,中断向量与中断号对应,中断向量在中断向量表中按照中断号顺序存储。
中断共享:当外设较少时,可以实现一个外设对应一个中断号,但为了支持更多的硬件设备,可以让多个设备共享一个中断号,共享同一个中断的中断处理程序形成一个链表,当外部设备产生中断申请时,系统会遍历中断号对应的中断处理程序链表。
中断底半部:中断处理程序耗时应尽可能短,以满足中断的快速响应,为了平衡中断处理程序的性能与工作量,将中断处理程序分解为两部分:顶半部和底半部。
顶半部完成尽可能少的比较紧急的任务,它往往只是简单地读取寄存器中的中断状态并清除中断标志位即进行“登记工作”,将耗时的底半部处理程序挂到系统的底半部执行队列中去。
1.3 运作机制
Huawei LiteOS的中断机制支持中断共享:
中断共享的实现依赖于链表,对应每一个中断号创建一个链表,链表节点中包含注册的中断处理函数和函数入参。当对同一中断号多次创建中断时,将中断处理函数和函数入参添加到中断号对应的链表中,因此当硬件产生中断时,通过中断号查找到其对应的结构体链表,遍历执行链表中的中断处理函数。
Huawei LiteOS的中断机制支持中断底半部:
中断底半部的实现基于workqueue,在中断处理程序中将工作分为顶半部和底半部,底半部处理程序与work关联,并挂载到合法workqueue上。系统空闲时执行workqueue中的work上的底半部程序。
2. 开发指导
2.1 使用场景
当有中断请求产生时, CPU暂停当前的任务,转而去响应外设请求。根据需要,用户通过中断申请,注册中断处理程序,可以指定CPU响应中断请求时所执行的具体操作。
2.2 功能
Huawei LiteOS 系统中的中断模块为用户提供下面几种功能。
接口名 | 描述 |
---|---|
LOS_HwiCreate | 硬中断创建,注册硬中断处理程序 |
LOS_IntUnLock | 开中断 |
LOS_IntRestore | 恢复到关中断之前的状态 |
LOS_IntLock | 关中断 |
hal_interrupt_mask | 中断屏蔽(通过设置寄存器,禁止CPU响应该中断) |
hal_interrupt_unmask | 中断使能(通过设置寄存器,允许CPU响应该中断) |
2.3 HWI错误码
对创建中断存在失败可能性的操作返回对应的错误码,以便快速定位错误原因。
序 号 | 定义 | 实际数值 | 描述 | 参考解决方案 |
---|---|---|---|---|
1 | OS_ERRNO_HWI_NUM_INVALID | 0x02000900 | 无效中断号 | 检查中断号,给定有效中断号 |
2 | OS_ERRNO_HWI_PROC_FUNC_NULL | 0x02000901 | 中断程序指针为空 | 传入非空中断处理程序指针 |
3 | OS_ERRNO_HWI_CB_UNAVAILABLE | 0x02000902 | 无可用中断资源 | 通过配置,增大可用中断最大数量 |
4 | OS_ERRNO_HWI_NO_MEMORY | 0x02000903 | 内存不足 | 增大内存空间 |
5 | OS_ERRNO_HWI_ALREADY_CREATED | 0x02000904 | 中断处理程序已经创建 | 检查传入的中断号对应的中断处理程序是否已经被创建 |
6 | OS_ERRNO_HWI_PRIO_INVALID | 0x02000905 | 中断优先级无效 | 传入有效中断优先级[0,31] |
7 | OS_ERRNO_HWI_MODE_INVALID | 0x02000906 | 中断模式无效 | 传入有效中断模式[0,1] |
8 | OS_ERRNO_HWI_FASTMODE_ALREADY_CREATED | 0x02000907 | 快速模式中断已经创建 | 检查传入的中断号对应的中断处理程序是否已经被创建 |
9 | OS_ERRNO_HWI_INTERR | 0x02000908 | 接口在中断中调用 中断中禁止调用该接口 |
2.4 开发流程
- 修改配置项
- 打开硬中断裁剪开关: OS_INCLUDE_HWI定义为YES.
- 配置硬中断使用最大数: OS_HWI_MAX_USED_NUM.
- 调用中断初始化Los_HwiInit接口。
- 调用中断创建接口LOS_HwiCreate创建中断
- 调用hal_interrupt_unmask接口使能指定中断。
- 调用hal_interrupt_mask接口屏蔽指定中断。
3. 编程实例
3.1 实例描述
本实例实现如下功能。
- 关中断
- 中断创建
- 中断使能
- 中断恢复
- 中断屏蔽
3.2 编程示例
前提条件:
- 在los_config.h中,将OS_INCLUDE_HWI定义为YES。
- 在los_config.h中,设置最大硬中断个数OS_HWI_MAX_USED_NUM。
代码实现如下:
#include "los_hwi.h"
#include "los_typedef.h"
#define HWI_NUM_INT50 50
void uart_irqhandle(int irq,void *dev)
{
printf("\n int the func uart_irqhandle \n");
}
void hwi_test()
{
int a = 1;
UINTPTR uvIntSave;
uvIntSave = LOS_IntLock();
LOS_HwiCreate(HWI_NUM_INT50, 0,0,uart_irqhandle,NULL);//创建中断
hal_interrupt_unmask(HWI_NUM_INT50);
LOS_IntRestore(uvIntSave);
hal_interrupt_mask(HWI_NUM_INT50);
}
liteos 中断机制(四)的更多相关文章
- 华为Liteos移植到stm32F03ZE
华为Liteos和物联网设备侧sdk移植到stm32F03ZE霸道板子上 推荐官方教程:https://liteos.github.io/ 啥是LIteos "开源免费"的实时操作 ...
- liteos分散加载(十四)
1. 概述 1.1 基本概念 分散加载是一种实现特定代码快速启动的技术,通过优先加载特定代码到内存,达到缩短从系统开机到特定代码执行的时间.可被应用来实现关键业务的快速启动. 嵌入式系统通过uboot ...
- JAVA中断机制详解
Java提供了中断机制,可以使用它来结束一个线程.这种机制要求线程检查它是否被中断了,然后决定是不是响应这个中断请求.线程允许忽略中断请求并继续执行.Java的中断是一种协作机制.也就是说调用线程对象 ...
- Java进阶(四十三)线程与进程的区别
Java进阶(四十三)线程与进程的区别 1.线程的基本概念 概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必 ...
- Java多线程9:中断机制
一.概述 之前讲解Thread类中方法的时候,interrupt().interrupted().isInterrupted()三个方法没有讲得很清楚,只是提了一下.现在把这三个方法同一放到这里来讲, ...
- linux内核分析第二四学习报告
学生 黎静 课程内容 计算机三大法宝 • 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: • 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那 ...
- linux实现共享内存同步的四种方法
https://blog.csdn.net/sunxiaopengsun/article/details/79869115 本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进 ...
- liteos任务(二)
任务 1 基本概念 从系统的角度看,任务是竞争系统资源的最小运行单元.任务可以使用或等待CPU.使用内存空间等系统资源,并独立于其它任务运行. Huawei LiteOS的任务模块可以给用户提供多个任 ...
- 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南
昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...
随机推荐
- 微信小程序 开发环境配置
1.注册小程序 (1)微信公众平台:https://mp.weixin.qq.com/(2)立即注册 (3)流程 (4)小程序注册 (5)填写相关信息,并去邮箱激活.这样小程序的账号就注册完成了. 2 ...
- JNI——访问数组
JNI在处理基本类型数组和对象数组上面是不同的.对象数组里面是一些指向对象实例或者其它数组的引用. 因为速度的原因,先通过GetXXXArrayElements函数把简单类型的数组转化成本地类型的数组 ...
- overflow(超出部分省略号)
溢出:overflow:visible/hidden/scroll/auto/inherit: visible:默认值.不剪切.hidden:超出部分剪切.没有滚动条.scroll:超出部分有滚动条. ...
- Windows下也能够使用osw追朔系统历史性能
1.Windows系统历史性能分析困难背景 在Linux/Unix上.要追朔历史性能,一般採用部署nmon进行性能监控採集与存储的方式实现.可是却没有在Windows上的版本号. Windows系统假 ...
- eclipse新建android项目出现非常多错误
如图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFycnlXZWFzbGV5/font/5a6L5L2T/fontsize/400/fil ...
- ubuntu编译airplay
1.alsa/asoundlib.h: No such file or directory 缺少一个库: apt-get install libasound2-dev 2.fatal error: ...
- mysql limit分页优化方法分享
同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是 ...
- js操作文件 HTML5版
js操作文件 HTML5版,有需要的朋友可以参考下. <!DOCTYPE html> <html> <head> <title>JSFileReader ...
- TopSelf安装Windows服务提示:执行未经授权的操作。。
在一个项目中用到了八九个服务,服务的执行时间也是五花八门,有的年末执行一次,有的月中执行一次,有的月末最后一天执行一次,有的月初连续执行5天, 有的每天晚上执行,...还好各个服务并没有严格的关联关系 ...
- ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column XXX at row 1
本错误为:该列的插入格式有误 修改该表中该列的字符集为utf-8 网上办法: )不能插入中文解决办法: 向表中插入中文然后有错误. mysql> insert into users values ...