中断处理

米联客 ZYNQ/SOC精品教程 S02-CH07 PL中断请求实验

China☆狼群 提交于 2019-11-28 19:22:19
软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛: www.osrc.cn 答疑解惑专栏开通,欢迎大家给我提问!! 7.1 概述 本课节对ZYNQ的中断进行了介绍,并通过PL端按键输入中断信号,PS端进行处理,讲解了外部中断使用。 7.2 ZYNQ 中断介绍 7.2.1 ZYNQ中断框图 上图为ZYNQ中断分布框图。可以看到部分PL到PS部分的中断,经过中断控制分配器(ICD),同时进入CPU1 和CPU0。查询下面表格,可以看到PL到PS部分一共有20个中断可以使用。4个快速中断(PPI),即IRQF2P[19:16];16个共享中断(SPI),即IRQF2P[7:0]、IRQF2P[15:8]。这16个中断可以任意定义,本课涉及使用。 7.2.2 ZYNQ CPU软件中断 (SGI) ZYNQ共有两个CPU,每个 CPU具备各自的16个软件中断。 7.2.3 ZYNQ CPU 私有端口中断 私有中断不能修改。这里有2个PL到 CPU 的快速中断nFIQ 7.2.4 ZYNQ PS和PL共享中断 共享中断就是PL的中断可以发送给PS处理。上图中,黄色区域是16个PL的中断,它们可以设置为高电平或者低电平触发。 7.3 搭建BD工程 Step1:新建一个名为为Miz_sys的工程。 Step2

Java多线程编程核心技术-第1章-Java多线程技能-读书笔记

放肆的年华 提交于 2019-11-28 19:21:44
第 1 章 Java 多线程技能 本章主要内容 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 1.1 进程和多线程的概念及线程的优点   进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进程是操作系统管理的基本运行单元。   那什么是线程呢?线程可以理解成是在进程中独立运行的子任务。   使用多线程技术后,可以在同一时间内运行更多不同种类的任务。 1.2 使用多线程   一个进程正在运行时至少会有 1 个线程在运行。 1.2.1 继承 Thread 类   实现多线程编程的方式主要有两种:一种是继承 Thread 类,另一种是实现 Runnable 接口。   Thread 类实现了 Runnable 接口,它们之间具有多态关系。   线程是一个子任务,CPU 以不确定的方式,或者说是以随机的时间来调用线程中的 run 方法。   Thread.java 类中的 start() 方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的 run() 方法。这个过程其实就是让系统安排一个时间来调用 Thread 中的 run() 方法,也就是使线程得到运行,启动线程,具有异步执行的效果。如果调用代码 thread.run()

内核态、用户态、内核空间、用户空间、进程上下文、中断上下文、cpu状态

自古美人都是妖i 提交于 2019-11-28 18:52:43
  关键词:内核、上下文、空间、中断 一、虚拟地址空间: 1、定义:   实际物理内存空间的一种逻辑上的地址空间 2、注意: (1)内核空间和用户空间存在于虚拟地址中的,也可以简单理解为物理内存就分为内核空间和用户空间。 (2)每个进程运行时,操作系统会为每一个进程分配一个虚拟地址空间。   在32位的系统中,用户空间占3G,每个进程最多就只能够占用3G的内存空间,正常情况下,每个进程的代码就运行在这个空间中。内核空间占1G(实际是3-4G,它可以访问所有的虚拟地址),它是供所有的进程所共有的;当一个进程想要具有更多权限进行相应的操作的时候,它就需要进入到这个空间。 二、内核空间&&用户空间: 1、内核空间: (1)定义:   内核代码运行的位置,在这个空间下运行的进程可以比在用户空间下运行的进程拥有更多的访问系统的权限。 (2)注意: ①linux操作系统、驱动程序运行于这个空间中。 ②为了保证安全,是不允许进程直接操作内核的,因此把内核(代码)存储到内核空间中,只有进程处于内核空间中,它才能够操作内核代码,获取更高权限,来进行需要的操作。 ③内核是系统的核心,拥有内核,那么就可以直接操作底层硬件以及其他所有的权限。 ④内核空间具有的权限: 页面置换、调度(即实现了高端内存的)权限:由于采用的虚拟存储技术,所以肯定是需要不断的调度“页”的,但是这个权限只有内核拥有

浅谈Service Mesh体系中的Envoy

China☆狼群 提交于 2019-11-28 15:37:25
背景 最近因工作原因开始了解Service Mesh与Envoy,为系统性梳理所学内容,因此沉淀了此文档,但由于所知有限,如文档中有描述不当之处,希望不吝赐教。 提到Envoy就不得不提Service Mesh,说到Service Mesh就一定要谈及微服务了,那么我们就先放下Envoy,简单了解下微服务、Service Mesh以及Envoy在Service Mesh中处于一个什么样的角色。 过去几年间,架构领域最火的方向非微服务莫属,那么微服务架构到底为我们带来了什么样的好处呢?下面通过一张图说明架构的演进,如下: 伴随着业务规模的变大,微服务的好处显而易见,例如它本身所具备的可扩展性、易维护性、故障和资源隔离性等诸多特性使得产品的生产研发效率大大提高,同时,基于微服务架构设计,研发人员可以构建出原生对于“云”具备超高友好度的系统,让产品的持续集成与发布变得更为便捷。 然而没有所谓的银弹,微服务带来很多好处的同时也引入了很多问题。在云原生模型里,一个应用可以由数百个服务组成,每个服务可能有数千个实例,每个实例的状态可能持续的发生变化,此时,服务间的通信不仅异常复杂,而且都是运行时的行为,管理好服务间通信对于保证端到端的性能与可靠性来说无疑成为重中之重。在Service Mesh没有出现之前,微服务框架之间的通讯大多采用SDK方案,但该方式短板也非常明显,例如对业务有侵入性

手机APP测试要点

[亡魂溺海] 提交于 2019-11-28 15:12:01
1、功能测试 最基本的测试,主要是测试软件app的功能点、业务逻辑; 关联性(主要是测试客户端和PC的交互,客户端处理完后,保证PC端数据同步且一致) 2、性能测试 cpu,占用不超过10% 响应时间(包括app启动和退出),满足258原则,2秒以内用户感觉很快,2-5秒感觉一般,5-8秒感觉很慢,但是能接受,8秒以上用户无法接受,选择离开,或者再次发送请求。 耗电量,与cpu占用有关 内存 3、兼容性测试 手机app需要重点关注的: 不同操作系统:android、iOS 不同手机厂商:小米,华为等 不同的手机屏幕分辨率 与其他第三方app的兼容 4、安装卸载更新测试 也是手机app比较特别的测试点: 安装的路径,手机还是sd卡上 高低版本的覆盖安装 内存不足时的安装 安装过程中出现中断情况 第三方管理软件中卸载app 卸载过程中出现中断情况 更新过程中出现中断情况 更新时内存不足 5、中断或崩溃测试 中断测试主要是测试app是否会出现crash情况。 来电、短信、闹钟、低电量等 网络环境突然改变,或者网络中断,例如隧道、电梯(离线支持) 切换网络,例如数据连接切换到wifi 外部设备,比如充电,插耳机 内存不足 改变设备方向 改变手机语言,例如英文 多后台程序切换 长时间开机并且长时间开启app 也可以用monkey来测试apk的稳定性,也能检查出一些crash的问题,包括空指针

中断机构和中断处理程序

筅森魡賤 提交于 2019-11-28 13:54:33
  中断在操作系统中有着重要地位,它是多道程序得以实现的基础,没有中断就没有多道程序,因此进程之间的切换是通过中断来完成的。此外,为了提高处理机的利用率和实现CPU与I/O设备的并行执行,也必须要有中断的支持。 中断和陷入 中断:是指CPU对I/O设备发来的中断信号的一种响应。CPU保护暂停当前进程,转而去处理引发中断的进程。执行完后,再返回到原进程,继续执行。I/O设备可以是字符设备(键盘),块设备(磁盘)或通信设备(网络)等。由于中断是外部造成的,所以又叫外中断。 陷入:显然,陷入是由CPU进程内部事件引发的中断,因此叫陷入或内中断。其产生的原因往往是由于进程本身出现运行时异常。 两者的区别仅仅是信号的来源 中断向量表和中断优先级 1.中断向量表   用于记录相应中断处理程序入口地址的映射表。表中有为中断类型分配的中断号和相对应的中断处理程序的入口地址。当中断来临时,由中断控制器确定中断号,再到表中寻找程序。 2.中断优先级   对于并发的中断请求,必须要给出合理的中断顺序,比如键盘中断和磁盘中断谁更重要等,要给出解决中断的优先级。 多中断的处理方式 试想一种情况:当处理机正在处理键盘引起的终端,此时又收到了高优先级的磁盘中断,应该如何处理? 1.屏蔽(禁止)中断   对于新来的中断,在当前中断未完成之前,对于其他中断不予理睬,直到当前处理完。采用先来先服务的方式。 2

Linux DTS中和中断相关属性的解释和用法

半世苍凉 提交于 2019-11-28 12:20:20
原文: http://blog.gqylpy.com/gqy/429 置顶:来自一名75后老程序员的武林秘籍——必读 (博主推荐) 来,先呈上武林秘籍链接: http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我会画原理图,会画 PCB,会模拟,会数字!玩过 PLC,玩过单片机,会用汇编,会用 C!玩过 ARM,比如 PLC,STM32,和时下正在起飞的 NXP RT1052!搞过 DSP,比如 TMS320F28335!搞过 FPGA,不管 Xilinx 还是 Altera,也不管是 Verilog 还是 VHDL,或者直接画数字电路图!我懂嵌入式系统,比如 uCOS 和 Linux!我懂开源的硬件,比如 Arduino 和树莓派!我也搞软件,学了一堆上位机的语言C#,JAVA,Python,Kotlin,Swift!会写爬虫工具,又自学写APP,不管Android 还是 IOS! 可是这一切有什么用呢?土鸡瓦狗!不值一提!干技术的永远就是最苦逼的那个人! 我相信看到这里的你,应该是个 IT

数据结构与算法

ぐ巨炮叔叔 提交于 2019-11-28 12:05:29
第一章:概述 1. 数据和数据结点   数据是对客观事物的描述形式和编码形式的统称。   数据是由数据元素组成的,数据元素又称为数据结点,简称结点。   每个数据元素又包括多个数据项,每个数据项又称为结点的域,其中,用来唯一标识结点的域称为关键字。 2.数据结构、逻辑结构、物理结构   一个有穷的结点集合D,以及该集合中各结点之间的关系R,组成一个数据结构,表示成B=(D, R);   D和R是对客观事物的抽象描述,R表示结点间的逻辑关系,所以(D, R)表示的数据的逻辑结构。   数据结构在计算机内的存储形式称为存储结构,也称为物理结构。 3. 数据结构的种类   表结构(一对一)、树结构(一对多)、图结构(多对多)、散结构(结点之间没有关系,或者说存在特殊关系-无关关系) 4. 抽象、抽象数据类型、抽象数据类型的表示   抽象 - 从一般意义上将,抽象是指“抽取事物的共性,忽略个性;体现外部特征,掩饰具体细节”。   抽象数据类型简称ADT(abstract data type), 是将“数据”连同对其的“处理操作”(即运算)封装在一起而形成的复合体。注意: ADT是对一个确定的数学模型,以及定义在该模型上的一组操作的抽象表示,不涉及具体的实现。   抽象数据类型的表示 - 如可以将有序表有关的数据和处理操作封装成一个ADT,涉及的数据可能有元素个数、数据元素等

用户态和内核态&操作系统

限于喜欢 提交于 2019-11-28 10:15:36
用户态和内核态 内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。 用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。 为什么要有用户态和内核态? 由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态和内核态。 用户态与内核态的切换 所有用户程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输入等. 而唯一可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执行这些操作. 这时需要一个这样的机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令 这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction) 他们的工作流程如下: 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务. 用户态程序执行陷阱指令 CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问 这些指令称之为陷阱(trap)或者系统调用处理器

Arduino 常用函数参考文档

岁酱吖の 提交于 2019-11-28 09:36:12
封装好的API,使得程序中的语句更容易被理解,我们不用理会单片机中繁杂的寄存器配置,就能直观的控制Arduino,增强程序可读性的同时,也提高了开发效率。 本篇主要介绍: 一,项目结构 1.setup 2.loop 3.main 二,数字输入输出 1.pinMode ( pin , mode ) 2.digitalWrite ( pin , value ) 3.digitalRead ( pin ) 三,模拟输入输出 1.analogRead 2.analogWrite 四,模拟输入输出 1.tone 2.pulisein 3.外部中断 ----------------------------------------------------------------------------------------------------------- 一,项目结构 1.setup 2.loop 3.main 1.setup(): Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。 通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。   eg.示例程序 // 给13号引脚连接的设备设置一个别名“led” int led = 13; // 在板子启动或者复位重启后,