中断服务程序

Uboot启动分析笔记-----Stage1(start.S与lowlevel_init.S详解)

狂风中的少年 提交于 2020-03-15 11:39:12
Uboot启动分析笔记-----Stage1(start.S与lowlevel_init.S详解) 1 u-boot.lds 首先了解uboot的链接脚本board/my2410/u-boot.lds,它定义了目标程序各部分的链接顺序。 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /*指定输出可执行文件为ELF格式,32为,ARM小端*/ OUTPUT_ARCH(arm)/*指定输出可执行文件为ARM平台*/ ENTRY(_start)/*起始代码段为 _start*/ SECTIONS { /* 指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置*、 . = 0x00000000;从 0x0位置开始 . = ALIGN(4); 4字节对齐 .text : { cpu/arm920t/start.o (.text) board/my2440/lowlevel_init.o (.text) *(.text) } . = ALIGN(4); .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } . = ALIGN(4); .data : { *(.data) } /* 只读数据段

linux网络体系架构

旧巷老猫 提交于 2020-03-13 09:25:51
原创kylin_zeng: http://blog.csdn.net/kylin_fire_zeng 本文参考国嵌视频教程,再此感谢国嵌教育。 一、协议栈层次对比: 1)网络接口层把数据链路层和物理层合并在了一起,提供访问物理设备的驱动程序,对应的网络协议主要是以太网协议。 2)网络层协议管理离散的计算机间的数据传输,如IP协议为用户和远程计算机提供了信息包的传输方法,确保信息包能正确地到达目的机器。重要的网络层协议包括ARP(地址解析协议)、ICMP(Internet控制消息协议)和IP协议(网际协议)等 3)传输层的功能包括:格式化信息流、提供可靠传输。传输层包括TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议),它们是传输层中最主要的协议 4)应用层位于协议栈的顶端,它的主要任务是服务于应用,如利用FTP(文件传输协议)传输一个文件。常见的应用层协议有:HTTP,FTP,Telnet等。应用层是Linux网络设定很关键的一层,Linux服务器的配置文档主要针对应用层中的协议 二、linux网络子系统 1) 2)Linux 网络子系统的顶部是系统调用接口层。它为用户空间的应用程序提供了一种访问内核网络子系 统的方法。位于其下面的是一个协议无关层

stm32F103之ADC模数转换

偶尔善良 提交于 2020-03-12 13:58:26
一、ADC简介   通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是把经过与标准量比较处理后的模拟量转换成以二进制数值表示的离散信号的转换器。      12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 二、ADC功能框图 掌握了ADC 的功能框图,就可以对ADC 有一个整体的把握,在编程的时候可以做到了然如胸,不会一知半解。框图讲解采用从左到右的方式,跟ADC 采集数据,转换数据,传输数据的方向大概一致。 三、ADC功能描述 1、电压输入范围   ADC 输入范围为:VREF- ≤ VIN ≤ VREF+。由VREF-、VREF+ 、VDDA 、VSSA、这四个外部引脚决定。   设计原理图的时候一般把VSSA和VREF-接地,把VREF+和VDDA 接3V3,得到ADC的输入电压范围为:0~3.3V。 2、输入通道   我们确定好ADC 输入电压之后,那么电压怎么输入到ADC?这里我们引入通道的概念,STM32 的ADC 多达18 个通道,其中外部的16 个通道就是框图中的ADCx_IN0、ADCx_IN1...ADCx_IN5

2020-03-11

泪湿孤枕 提交于 2020-03-11 13:21:35
1 中断方式不同:内部中断是一个算法指令,是由软中断指令启动的中断。外部中断是单片机实时地处理外部事件的一种内部机制。如果在某一时刻需要响应一个外部事件(比如有按键按下),这时就会用到外部中断。 2、中断的主动性不同:外部中断时,当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去。在一定条件下由CPU自身启动的中断。 3、中断的实现方法不同:外部中断依靠电平触发方式和跳沿触发方式。电平触发方式适合于外部中断以低电平输入而且中断服务程序能清除外部中断请求源的情况。外部中断若定义为跳沿触发方式,外部中断申请触发器能锁存外部中断输入线上的负跳变。内部中断由一条指令INT n产生中断类型码或者由指令规定。##外部中断和内部中断 List item 来源: CSDN 作者: XINdongpai 链接: https://blog.csdn.net/xindongpai/article/details/104793691

stm32 嵌入式开发 用标准库进行 ADC 实验总结

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-09 10:00:04
------------恢复内容开始------------ 硬件原理图 ,滑动电位器与芯片PC3引脚连接 根据开发板可知: STM32F429IGT6 有 3 个 ADC ,每个 ADC 有 12 位、 10 位、 8 位和 6 位可选,每个 ADC 有 16 个外部通道。         每个ADC 同时还有3个内部通道:通道16/17/18         工作模式有3种: 独立模式、双重模式和三重模式 。 转换顺序可分为:规则序列,注入序列。如下图所示: 规则序列寄存器设置根据表由上到下选择通道进行配置 注入序列寄存器JSQR转换顺序为JSQR [X] [4:0],                   X=4-JL,JL为需要转换的通道 触发源可选择:ADC2_CR2->ADON        外部事件触发:内部定时器、外部IO (EXTSEL[2:0] JEXTSEL[2:0]控制 ) 时间设置: ADC 的输入时钟ADC_CLK由PCLK2经过分频产生36MH最大z频率 采样时间:每个通道可以设置不同的采样频率,最小的采样时间是3个周期1/ADC_CLK     ADC总转换时间= 采样时间+12个时钟周期 数据寄存器:ADC_DR 1个32位寄存器,最低16位有效。独立模式时使用,可以开启DMA模式       ADC_JDRX 4个32位寄存器,低16位有效    

实验二

我是研究僧i 提交于 2020-03-07 21:30:31
实验结论 实验任务(1)   使用 e 命令修改 0021:0~0021:f 数据      使用d命令查看,修改正确      使用a命令输入指令如下      使用t命令单步调试            做实验前书上的填空结果如下      与实验结果进行比较,发现sp的值和修改的内存单元地址与实际不符,经过分析,发现是因为我对栈这部分知识的理解还不够,在计算sp的值时将入栈和出栈的算法弄反了。入栈时 sp=sp-2,出栈时 sp=sp+2。   实验任务(2)   使用a命令输入指令      使用 e 命令修改 2000:0~2000:f 的值,并使用d命令查看修改后的结果      使用t命令单步调试      第一行指令是将 2000H 存入 AX 寄存器中,第二行指令是将 AX 的值送给栈段寄存器 SS,也就是说,前两行指令实现的功能就是将 SS 的值变成 2000,第三行指令的功能是将栈指针寄存器 SP 的值改成 0010。但是在截图中却并没有出现 MOV SP, 10 这条语句,通过阅读书上实验任务部分的文字描述发现这是因为中断机制使得这条指令在执行完 MOV SS, AX 后自动被执行了。   这时,初始栈顶是 20010H,初始栈底是 20012H。      从截图中我有几点发现:1、从 MOV AX, 3123 这条指令开始 2000:0 ~ 2000:f

linux中断处理顶半部和底半部

你。 提交于 2020-03-07 01:18:04
为了平衡中断处理程序时间要求短和工作量要大的问题,linux将中断处理程序分为顶半部(top half)和底半a部(bottom half) 我们在编写服务端网络程序时往往会开启一个监听线程来专门接收客户端的请求。一旦接收到某个客户端的请求,一般不会直接在监听线程中处理客户端的请求,而是再开启一个专门处理客户端请求的线程,并在该线程中处理客户端的请求。这样监听线程就可以解脱出来处理更多的客户端请求,从而大大提高服务端程序的吞吐量。 中断处理程序和服务端网络程序类似,当硬件向内核发送中断请求时,内核(在这里内核就相当于服务端网络程序)首先会接收中断请求,这个接收中断请求的任务就是由中断处理程序的顶半部完成的。然而在顶半部中并不会执行中断处理的核心代码,而这些代码需要在底半部完成。对于顶半部来说,除了接收中断请求外,还会进行"登记工作"。也就是说要将底半部处理程序挂到发送中断请求的设备的底半部执行队列中。这样的安排,顶半部的执行速度就会很快,可以服务更多的中断请求。 如下特征的任务放在顶半部: 1、对时间非常敏感 2、与硬件相关的 3、不能被其他中断打断的工作 除了以上三点,基本考虑放在底半部。 中断底半部实现的机制有: 1.软中断softirq 2.tasklet(由软中断实现) 3.工作队列work queue 二、函数: < linux / interrupt . h > /

STM32外部中断函数

岁酱吖の 提交于 2020-03-06 16:35:23
STM32外部中断函数 在外部中端的 exti.h 文件中 # ifndef _EXTI_H # define _EXTI_H # include "stm32f10x.h" void EXTIX_Init ( void ) ; # endif 在外部中端的 exti.c 文件中 # include "exti.h" # include "led.h" # include "key.h" # include "delay.h" # include "usart.h" # include "beep.h" //外部中断 0 服务程序 void EXTIX_Init ( void ) { EXTI_InitTypeDef EXTI_InitStructure ; NVIC_InitTypeDef NVIC_InitStructure ; KEY_Init ( ) ; //①按键端口初始化 RCC_APB2PeriphClockCmd ( RCC_APB2Periph_AFIO , ENABLE ) ; //②使能 AFIO 时钟 //GPIOE.3 中断线以及中断初始化配置,下降沿触发 GPIO_EXTILineConfig ( GPIO_PortSourceGPIOE , GPIO_PinSource3 ) ; //③ EXTI_InitStructure . EXTI_Line =

Linux中断处理机制

ぐ巨炮叔叔 提交于 2020-03-06 00:46:11
一:中断概述 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。 中断类型: 同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执行期间。所以也称为异常(exception)。 异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断(interrupt)。 异常又可分为可屏蔽中断(Maskable interrupt)和非屏蔽中断(Nomaskable interrupt)。而中断可分为故障(fault)、陷阱(trap)、终止(abort)三类。 从广义上讲,中断又可分为四类:中断、故障、陷阱、终止。 二:中断处理流程 1. 中断处理流程   当中断发生时,Linux系统会跳转到asm_do_IRQ()函数(所有中断程序的总入口函数),并且把中断号irq传进来。根据中断号,找到中断号对应的irq_desc结构(irq_desc结构为内核中中断的描述结构,内核中有一个irq_desc结构的数组irq_desc_ptrs[NR_IRQS]),然后调用irq_desc中的handle

消息邮箱的概念及其作用

蹲街弑〆低调 提交于 2020-03-05 00:20:18
RTX 的消息邮箱实际上就是消息队列,通过内核提供的服务,任务或中断服务子程序可以将一个消息 (注意,RTX 消息邮箱传递的是 消息的地址 而不是实际的数据)放入到消息队列。同样,一个或者多个任 务可以通过内核服务从消息队列中得到消息。通常,先进入消息队列的消息先传给任务,也就是说,任务 先得到的是最先进入到消息队列的消息,即先进先出的原则(FIFO)。 也许有不理解的初学者会问采用消息邮箱多麻烦,搞个全局数组不是更简单,其实不然。在裸机编程 时,使用全局数组的确比较方便,但是在加上 RTOS 后就是另一种情况了。使用全局数组相比消息邮箱主 要有如下四个问题: 使用消息邮箱可以让 RTOS 内核有效的管理任务,全局数组是无法做到的,任务的超时等机制需要用 户自己去实现 使用了全局数组就要防止多任务的访问冲突,使用消息邮箱已经处理好了这个问题。用户无需担心。 使用消息邮箱可以有效的解决中断服务程序跟任务之间消息传递的问题。 FIFO 机制更有利于数据的处理。 RTX 中断方式消息邮箱的实现 RTX 中断方式消息邮箱的实现是指中断函数和 RTX 任务之间使用消息邮箱。下面我们通过如下的框 图来说明一下 RTX 消息邮箱的实现,让大家有一个形象的认识。 运行条件 创建消息邮箱,可以存放 10 个消息。 创建 1 个任务 Task1 和一个串口接收中断。 RTX 的消息读取和存放仅支持