精华内容
下载资源
问答
  • 1,意思是APB2接高速设备2、Stm32f10x.h相当于reg52.h(里面基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用3、HSE Osc(High Speed External Oscillator)高速外部晶振...
    d96f7f0a512106fa8fb21fc539dab62a.gif点击上方蓝色字关注我们~

    e67a151a13bc416850c604f755675cc5.png

    1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备

    2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用

    3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz

    4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed InternalRC)低速内部晶振,大概为40KHz左右,提供看门狗时钟和自动唤醒单元时钟源

    5、SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL

    1a976184c0b0675bd56a046510d66bf3.png

    6、MCO[2:0]可以提供4源不同的时钟同步信号,PA8

    7、GPIO口貌似有两个反向串联的二极管用作钳位二极管。

    7b346c6518f3ff6396e4fa31050996b0.png

    8、总线矩阵采用轮换算法对系统总线和DMA进行仲裁

    9、ICode总线,DCode总线、系统总线、DMA总线、总线矩阵、AHB/APB桥

    10、在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟

    11、数据字节以小端存储形式保存在存储器中

    12、内存映射区分为8个大块,每个块为512MB

    13、FLASH的一页为1K(小容量和中容量),大容量是2K。

    14、系统存储区(SystemMemory)为ST公司出厂配置锁死,用户无法编辑,用于对FLASH区域进行重新编程。所以我们烧写程序务必选择BOOT1 = 0,这样通过内嵌的自举程序对FLASH进行烧写,比如中断向量表和代码

    15、STM32核心电压为1.8V

    16、STM32复位有三种:系统复位、上电复位、备份区域复位。其中系统复位除了RCC_CSR中的复位标志和BKP中的数值不复位之外,其他的所有寄存器全部复位。触发方式例如外部复位、看门狗复位、软件复位等;电源复位由于外部电源的上电/掉电复位或者待机模式返回。复位除了BKP中的寄存器值不动,其他全部复位;备份区域复位的触发源为软件复位或者VDD和VBAT全部掉电时。

    17、单片机复位后所有I/O口均为浮空输入状态

    18、68个可屏蔽中断通道,16个可编程优先级,16个内核中断,一共68+16=84个中断。103系列只有60个中断,107系列才有68个中断

    19、系统启动从0x00000004开始,0x000 0000保留

    20、(NestedVectored Interrupt Controller)NVIC嵌套向量中断控制器,分为两种:抢先式优先级(可嵌套)和中断优先级(副优先级,不能嵌套)。两种优先级由4位二进制位决定。分配下来有十六种情况:

    f7d58e4017d711298f0c63aecf163a44.png

    21、0号抢先优先级的中断,可以打断任何中断抢先优先级为非0号的中断;1号抢先优先级的中断,可以打断任何中断抢先优先级为2、3、4号的中断;……;构成中断嵌套。如果两个中断的抢先优先级相同,谁先出现,就先响应谁,不构成嵌套。如果一起出现(或挂在那里等待),就看它们2个谁的子优先级高了,如果子优先级也相同,就看它们的中断向量位置了。原来中断向量的位置是最后的决定因素!!!!

    22、上电初始化后AIRC初始化为0,为16个抢先式优先级,但是由于所有的外部通道中断优先级控制字PRI_n为0,所以抢先式优先级相同,此时就不能嵌套了

    23、NVI中有ISER[2](Interrupt Set-Enable Registers),ICER[2](Interrupt Clear-Enable Registers),ISPR[2](Interrupt Set-Pending Registers),ICPR[2](Interrupt Clear-Pending Registers),IABR[2](Active Bit Registers),IPR[15](InterruptPriority Registers)定义。其中ISER和ICER分别为中断使能和中断失能寄存器,都是写1来使能/失能中断的。为什么写1?为什么不采用一个寄存器而用两个寄存器来表示中断使能/失能状态?由于硬件,写0比较复杂,并且可能造成其他位的状态改变,所以用1来表示打开或者关断是比较合理的

    24、中断标志位需要手动清除

    25、配置外围器件的一般步骤:1、打开端口时钟。2、定义初始化结构体并初始化。3、调用

    26、串口的奇偶校验:如果是奇偶校验,那么USART_InitStructure.USART_WordLength= USART_WordLength_9b;这个数据的长度必须设定为9位!

    27、ADC的规则组可以自定义转换通道顺序和转换的通道个数。在实际应用中,有时候希望有一些特别的通道具有很高的优先权,需要在规则组进行转换的时候强制打断,进行另一个通道的转换,这样一组通道,叫做注入组。

    28、定时器的输出比较模式:Timing(冻结,什么都不做,普通定时),Active(OCxREF输出高电平有效),Inactive(OCxREF输出低电平),Toggle(比较成功后翻转电平)。

    29、STM32的定时器从0开始计数,满足一些条件,给出标志位(比如匹配成功、时间更新、溢出等)然后从0开始计数。这一点和51不同。

    30、OCx=OCxREF+极性

    31、自动装载寄存器和影子寄存器:前者相当于51当中的溢出设定数值。而影子寄存器顾名思义是影子,就是寄存器的另一分copy。实际起作用的是影子寄存器,而程序员操纵的则是自动装载寄存器。如果APPE位使能,表明自动装载寄存器的值在下一次更新事件发生后才写入新值。否则,写入自动装载寄存器的值会被立即更新到影子寄存器。

    006e7229c1983707d1d58eb4e8b73f75.png

    32、RCC_PCLK1Config(RCC_HCLK_Div4);PCLK1的4分频给定时器基准时钟

    33、定时器配置:RCC、NVIC、GPIO(OC输出或者PWM)、TIMx

    34、通用定时器可以输出4路不同的PWM,高级定时器可以输出4路不同的PWM外,还可以输出3路互补的PWM信号(驱动三相电机),一共有7路。这样算出来STM32可以产生30路PWM=7*2+4*4

    35、

    693ff2c91f416b61d8c7041f306275e2.png

    36、高级定时器时钟源挂在了APB2上,而通用定时器挂在APB1上。AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟信号(72mhz)。如果APB1没有分频,那么通用定时器的时钟信号频率就直接等于APB1的时钟频率,没有上述的倍频器*2过程。TIM_SetAutoreload()用来改变PWM的频率,TIM_SetCompare1()用来改变占空比

    37、有刷电机一般启动力矩大一些,无刷电机启动力矩小,运行起来力矩大。有刷电机采用电刷机械电流换向,而无刷电机则通过霍尔传感器测出转子的电流来判断电机的运动位置和方向,返回给控制回路。

    38、死区是必须要有的,因为这涉及到电路的短路问题。晶闸管在换向的时候需要死区时间来彻底关断线路

    39、刹车功能用来在控制回路出现问题时,硬件自动给予外部电机进行紧急刹车制动,反应在PWM上持续给出一个固定的占空比?(三相驱动也是?)

    40、PWM输出最好采用PWM模式,其他的比较输出模式相位会慢慢改变,不精准

    41、对FLASH的读写需要先解锁后加锁。FLASH写0容易,写1难。

    42、下载程序有两种方式,一种为ICP(在线编程),适用于JTAG或SWD协议下的烧写程序。另一种成为IAP(在应用编程),适用于很多接口(USB,串口,CAN)下载到存储器中,IAP允许在程序运行时重新烧写FLASH

    43、FLASH分为主存储器(这里放置用户的程序代码)和信息块(启动代码),除此之外,还有一部分叫做系统存储器,这一块用户不可操作,为ST公司出产后固化,为系统的上电自举程序

    44、FLASH在写的时候,一定不能读,如果有读操作,那么将会锁住总线

    45、对FLASH操作时,必须打开HIS

    46、STM32有两种看门狗(IWDG独立看门狗《独立时钟》,WWDG窗口看门狗《由APB1分频而来》)

    47、SPI的的最高频率为36MHz(fpclk/2)

    48、 TIM1和TIM8高级定时器在输出PWM时,需要配置一下主输出功能(CtrlPWMOutputs)才能输出PWM。其他的通用定时器不需要这样配置。但是TIM6和TIM7没有PWM输出功能。

    49、Code为程序代码部分

    RO-data 表示程序定义的常量(如:const temp等);

    RW-data 表示已初始化的全局变量

    ZI-data 表示未初始化的全局变量,以及初始化为0的变量

    Code, RO-data,RW-data..............flash

    RW-data, ZIdata...................RAM

    初始化时RW-data从flash拷贝到RAM

    50、STM32F103ZET6有144个引脚(Z为144),其中,可用IO口为112个(7X16=112,ABCDEFG口)

    51、ARM公司只生产内核标准,不生产芯片。ST、TI这样的公司从ARM公司那里购买内核,然后外加自己的总线结构、外设、存储器、始终和复位、I/O后就组成了自己的芯片。

    a14564f91f91fde696f06b8bed63ee08.png

    52、CMSIS标准用于在向上的用户层和下面的硬件层交换信息。这个架构当然可以自己定义,但是这样的话就会没有标准。所以强制使用CMSISI标准来设计芯片。通俗点的讲就是系统初始化的函数名称CMSIS定义为SystemInit(),GPIO_ResetBits()等

    53、端口复用和端口重映射是两个概念:前者在使能其对应的端口和对应的功能时钟即可。后者需要打开AFIO时钟,然后进行端口的重映射GPIO_PinRemapConfig()

    54、下载程序只能使用串口1,在硬件设计时一定要注意!

    55、J-TAG调试频率一般设定为2MHz,而SWD调试频率可以设定为10MHz

    56、SysTick的中断实现可以有两种方式:循环等待和中断法。推荐用循环等待,中断法可能会出问题而且占用资源。

    57、部分I/O引脚是5V兼容的。单个I/O的最大驱动电流和灌入电流均为25mA。整个芯片的电流为150mA

    58、KEIL支持位段操作,可以利用C语言中的位段知识定义位段结构体,然后对单独的寄存器进行单独的位操作。

    59、关于内部上下拉电阻的设置:如果外部的按键另一头接地,那么需要设置成上拉电阻。(理由是当没有按下按键时,由于上拉,输入为高电平;按下时,由于外部接地,输入为低电平。)同理,如果外部的按键另一头接高电平,那么需要设置成下拉电阻。

    60、串口中断TXE和TC的区别:其实很明显,一个是发送寄存器空标志,一个是发送完成标志。因为串口在发送的时候首先需要把发送寄存器中的数据移位到移位寄存器(影子寄存器)后再串行发送出去。所以当发送寄存器DR空时说明现在可能正在往外面发送数据,数据可能还没有发送完。但是发送完成不一样,他是在移位寄存器将本次数据全部移位完成后设置的标志位(也就是发送完了停止位)。这么看来:TXE允许程序有更充裕的时间填写TDR寄存器,保证发送的数据流不间断。TC可以让程序知道发送结束的确切时间,有利于程序控制外部数据流的时序。

    61、窗口看门狗顾名思义有一个窗口,这个窗口的横坐标为时间,意思是在指定的时间范围内刷新寄存器,否则单片机复位。窗口的上限由人来设定W[6:0],下线定死为0x40Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;Twwdg为超时时间ms,Fpclk1为APB1时钟KHz,

    62、TIMx通用定时器有4个独立通道,分别可以用来作为:输入捕获、比较输出、PWM生成、单脉冲模式输出。

    63、定时器的时钟来源有4个:内部时钟(CK_INT),外部时钟模式1(TIx),外部时钟模式2(ETR),内部触发模式(ITRx,这个用来定时器的同步)

    64、定时器中断溢出更新时间:Tout=((arr+1)*(psc+1))/Tclk,ARR为自动装载寄存器(1~65535)、PSC为分频系数,TCLK为输入时钟频率(Mhz)

    65、PWM1和PWM2模式的区别仅在于相位的180度。前者高电平时,后者低电平。感觉好鸡肋,OCxREF极性就可以实现这个功能。

    66、定时器输入捕捉有一个滤波器,顾名思义滤波器起到的就是滤波的作用,在捕捉外部信号时,信号可能不稳定,此时需要滤波:当检测到有外部输入时,需要再连续采样N次如果确定为高电平/低电平,则触发响应中断(如果开启了的话)。

    67、电容触摸屏原理:通过充放电的曲线不同来检测是否被按下。实际的实验过程中,TPAD可以用一块覆铜区域来替代,通过电容的充放电常数来确定是否按下。

    a1eb3481e2d0daadad1282e5f4081c76.png

    68、OLED,即有机发光二极管(OrganicLight-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display,OELD)。下图为OLED的GRAM与屏幕的对应表

    2138e06a30b4e9a72de871ad9c89a3a9.png

    PAGE2单独列出来:

    271c6a51a793c59e9793665761db4872.png

    69、USART可以操纵SPI设备。不过最大频率只有4.5MHz

    70、使用I/O口时应该注意的问题

    c4ff2d81699817500676da952272f920.png

    71、ADC的Vref+和Vdda与VSS,Vref-一定要加高质量的滤波电容,切靠近单片机。

    f4cbb7503c07e9fec85a4eaa472bebdd.png

    72、ADC分为规则组和注入组,前者有16个通道,后者有4个通道。并且16个通道公用一个数值寄存器,注入组的4个通道分别有一个数值寄存器。

    a09433306a11fe49f5fc77cb709a6cd2.png

    73、采样频率越高,输入阻抗要求越小。

    74、Stm32进入中断的最短周期为6个周期

    75、

    fd649fd6014f3577df991c560e145813.png

    76、

    34165a3183c03bfa9a44e5207c87df7b.png

    77、FSMC,即灵活的静态存储控制器。能够与同步或异步存储器和16位PC存储器卡接口,STM32的FSMC接口支持包括SRAM、NANDFLASH、NORFLASH和PSRAM等存储器。

    \78、平时所说的U盘里的FLASH存储器有两种类型:NANDflash和NOR flash。

    NAND FLASH

    NOR FLASH

    不能直接运行里面的代码

    可以直接运行里面的代码

    写入和擦除速度快

    写入和擦除速度慢

    读取速度稍慢

    读取速度稍快

    擦写周期100万次

    擦写周期10万次

    成本低,容量高

    成本高,容量低

    一般为串行接口

    有SRAM接口

    79、TFT在操作时,可以当作外部SRAM来操作,这样的话,如果单片机有FSMC接口,就可以使用NORFLASH的SRAM接口去控制,速度非常快。

    80、Stm32的的FSMC有4个256MB的存储块,一共寻址1GB的外部存储器空间。

    bf0b9fabdd769f18e894f91a77e48280.png

    81、在STM32内部,FSMC的一端通过内部高速总线AHB连接到内核Cortex-M3,另一端则是面向扩展存储器的外部总线。内核对外部存储器的访问信号发送到AHB总线后,经过FSMC转换为符合外部存储器通信规约的信号,送到外部存储器的相应引脚,实现内核与外部存储器之间的数据交互。

    82、FSMC中的DATASET和ADDSET的设置需要参看外部存储器的时序图来确定。一般而言,DATASET指的是数据建立时间,也就是读/写信号开始到读/写信号停止(上升沿存储数据)的持续时间。(一般来说写比读快!)。而ADDSET指的是地址建立时间,指的是片选之后到读/写操作之前的时间,这是针对SRAM来说的,如果操纵的是TFT,不存在地址线,所以此时的ADDSET就是读/写信号结束到RS电平的转换时间。

    a457f88d44fc33d0d4396e6578ee025e.png

    83、bf0b9fabdd769f18e894f91a77e48280.png

    84、

    003e97660dea28f62330ce54e9f6eab0.png

    85、FSMC的三个配置寄存器:FSMC_BCRx(片选控制配置)、FSMC_BTRx(片选时序)、FSMC_BWTRx(片选写时序)。

    86、RTC时钟配置必须要用到BKP寄存器,BKP寄存器在单片机复位、电源复位、待机唤醒模式下是不会更改值的,他的供电由VDD供电,VDD被切断后自动切换至外部的VBAT供电。

    87、要修改BKP寄存器的值,必须取消其写保护的标志。BKP寄存器在上电时自动写保护。

    88、 Stm32有三种省电模式:

    d05ab6d215097de88e45294f16a71e5c.png

    三种省电模式中,耗电量从上到下依次降低,待机模式的电流仅为2uA。

    89、从待机模式中唤醒单片机等效于让单片机复位,但是电源寄存器的值会有一个标志位指示单片机是被唤醒的,不是被复位的。

    90、ADC的时钟不要超过14MHz,否则转换精度会下降。最大转换速率为1MHz,即转换周期为1us(14MHz,采样周期为1.5个ADC时钟)

    91、Tcovn=采样时间+12.5个周期。采样时间尽量选长一点,这样精度高一些,但是转换速率下降,这也是有利必有弊。

    92、   

    4df35a016e2b9c3442f14c6bd054897d.png

    93、拿ARM7TDMI来说,T代表Thumb指令集,D是说支持JTAG调试(Debugging),M意指快速乘法器,I则对应一个嵌入式ICE模块。

    94、 MMU作为嵌入式处理器与应用处理器的分水岭标志à具有内存管理单元的嵌入式处理器可以定位为应用处理器。这么说M系列和A系列的处理器的区别在于A系列的处理器具有MMU单元可以进行内存模块的管理。

    95、ARM处理器有两种状态:ARM状态和Thumb状态。

    efd03724aa601180c2f7bd00864922f6.png

    96、这张图说明了一切:Thumb2指令集做了一件很伟大的事情:将16位和32位的指令集融为一体,兼容性非常强!(这么说CM3不支持某些32位ARM指令集??)

    97、

    bb3320093bf751146f2d39d597912fc2.png

    98、MSP是系统复位后使用的堆栈指针,PSP由用户的代码使用。两个堆栈指针为4字节对齐!!

    99、在ARM编程领域中,凡是打断程序运行的事件,统称为异常(exception)。

    100、因为存在LR(链接寄存器),所以可支持1级的子程序调用而不用压栈到内存,大大提高了运行速度。---à这就是说,我们在编程的时候,一级调用是不会耗费太多时间的,除非是二级调用!

    101、处理器有两种操作模式:handler模式和线程模式。

    f824687ad930127079b7318074e67c94.png

    处理器也有两种特权分级:特权级和用户级。这张图说明了一切:复位进入特权级线程模式,如果有异常,进入特权级的handler模式处理异常或中断例程,然后返回至特权级线程模式。通过修改CONTROL寄存器可以进入用户级线程模式。

    102、两个高级定时器TIM1和TIM8是挂接在APB1总线上

    103、STM32的外部中断是以组来区分的,也就是说PA0,PB0,PC0单片机是无法区分其中哪个触发的中断à均为EXIT0线中断服务例程。所以,外部中断支持16路的中断分辨率。从另一个方面来讲,我们可以设置GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcex);来开通中断线实现组内的不同中断。

    104、DAC有两个寄存器,一个是DHR(Data HoldingRegister)数据保持寄存器,一个DOR(Data Output Register)数据输出寄存器。真正起作用的是DOR寄存器,该寄存器把值给数模转换发生单元输出以VREF+为参考电压的电压值。如果是硬件触发转换,系统将在1个ABP时钟周期后把值给DOR,如果是软件触发转换,时间为3个APB时钟周期。然后,均等待Tsetting时间(Typical为3us,Max为4us)后真正输出电压值。

    105、DAC分8位模式和12位模式,其中后者可以选择左右对齐

    106、DMA仲裁器分为软件和硬件两种。软件部分分为4个等级,分别是很高优先级、高优先级、中等、低。硬件部分由通道的大小来决定优先级,越低优先级越高。

    107、DMA有一个实时的传输数据量寄存器叫做DMA_CNDTR,最大值为65535,存放的是当前传输所要传输的数据量。当数据量变为0时,表明传输完成。

    108、 CAN总线(ControllerArea Network)。CAN控制器根据两根线上的电位差来判断总线电平,总线电平又分为显性电平和隐性电平,二者必居其一。

    109、CAN总线具有6个特点:1:多主控制(挂接在总线上的所有设备均可以成为主设备,并且设备ID是用来决定设备的优先级,没有设备地址概念),2:系统若软性(没有设备地址概念),3、通讯速度较快,通讯距离较远(1Mbps下40M,5kbps下10KM),4、具有错误检测、错误通知(通知其他设备)和错误恢复功能(强制结束发送,重复发送接收错误的信息。),5、故障封闭,当总线上的设备发生连续故障错误时,CAN控制器会把改控制器踢出总线。6、连接节点多。理论上可以无限制加载,但是受到时间延迟和电气负载的限制,实际数目是有限制的。降低传输速度可以适当增加可挂接负载个数。

    110、CAN协议有两个标准,ISO11898(针对125kbps~1Mbps的高速速率)和ISO11519-2(125kbps以下的低速速率)

    f183efbdd4435820c6d565ca1d677fca.png

    111、    

    7e3e731c7410a6771c36b45c06fcc57c.png

    112、CAN协议的有5种类型的帧:数据帧、遥控帧、错误帧、过载帧、帧间隔。其中前两种帧有标准格式(11位ID)和扩展格式(29位ID)。

    09bf6310270cbbd284db8d014235e929.png

    113、数据帧构成:

    (1) 帧起始。表示数据开的段帧起始。

    (2) 仲裁段。表示该帧优先级的仲裁段。

    (3) 控制段。表示数据的字节及保留位段。

    (4) 数据段。数据的内容,一帧可发送0~8个字节的数据。

    (5) CRC段。  检查帧的传输错误段。

    (6) ACK段。  表示确认正常接收的段。

    (7) 帧结束。 表示数据的段帧结束。

    6802de0202eacbb6cc98a86997797069.png

    114、Stm32f103系列只有一个CAN控制器,有3个发送邮箱和3级深度的2个FIFO,14个过滤组器。

    115、STM32的每个过滤组可以配置为1个32位过滤器和2个16位过滤器。除此之外,还可以配置为屏蔽位模式(ID+屏蔽)和标识符列表(ID和屏蔽寄存器均用来做ID寄存器)模式。

    116、CAN接收到有效报文被放置在3级邮箱深度的FIFO中,FIFO完全由硬件来管理。

    117、 CAN总线的波特率

    1a5a296d05a43619bd4fc683d3d9cb60.png

    118、触摸屏一般分为电阻式触摸屏和电容式触摸屏。前者检测触摸的位置原理是利用触摸屏控制器中的A/D转换器经过两次A/D读值后得出X和Y的坐标值。注意:这个X和Y的值是相对于触摸屏的,而非LCD屏。所以在这里需要注意两个概念:触摸屏和LCD屏。这是两个不同的概念,也是两个不同的物理结构,其中电阻触摸屏是由上下两个导电层中间夹着一层非常薄的透明隔层;而LCD就是指显示屏。

    119、 电阻触摸屏有X和Y、X和Y的比例因子、坐标轴方向、偏移量。LCD也有自己的这些参数。两者完全不相干,所以在定位的时候需要进行坐标转换。公式:

    6ac9fecf24e4c586027133b9537b14ec.png

    ,通过对屏幕的四个点进行校准,得到四元一次方程,求解即可。

    120、NEC协议的数据帧格式:同步码头、地址码、地址反码、控制码、控制反码。同步码由一个9ms的低电平和一个4.5ms的高电平组成,地址码、地址反码、控制码、控制反码均是8位数据格式。按照低位在前,高位在后的顺序发送。

    121、NEC协议在发送的时候,会有560us的38KHz的载波信号,而在接收的时候这部分载波信号被认定为低电平,而剩余的(2.25ms-650us)的逻辑“1”和(1.12ms-650us)的逻辑“0”时间则被认定为高电平。

    122、在单位时间内的位移被定义为速度,速度有线速度和角速度之分,分别对应两种传感器测量这两种不同的速度:线速度传感器(加速度计)、角速度传感器(陀螺仪)。前者多应用在静态或者低慢速运动中的姿态求解,后者多应用在动态运动中姿态求解。

    123、根据标准约定,零加速度(或零 G 准位)通常定义为相当于最大输出值(12 位输出为 4096,10 位输出为 1024 等)一半的输出。对于提供 12 位输出的加速度计,零 G 准位将等于 2048。输出大于 2048 表示正加速度。输出小于 2048 表示负加速度。加速度的数量通常用单位 g (1g = 9.8m/s2 = 重力加速度)表示。通过确定测量的输出与零 G 准位之间的差值,然后除以加速度计的灵敏度(用计数/g 或 LSB/g表示)来计算加速度。对于提供 12 位数字输出的 2g 加速度计,灵敏度为 819 计数/g 或 819 LSB/g。加速度等于:a = (Aout - 2048)/(819 计数/g),单位为 g。

    124、加速度计测得的加速度的方向和设备设定的坐标系是相反的,因为原理表明在测量力的时候采用的是非惯性系参考系,而我们高中时代研究的坐标系是惯性系参考系,前者在物体进行运动产生加速度时,假想一个与速度方向相反的力作用在物体上,这个力就是惯性力;后者我们说不存在惯性力,只说存在惯性,因为在惯性坐标系中,我们研究的是物体,而非坐标系(即假定坐标系相对地球静止),当我们把坐标系也考虑在内时,当坐标系运动,就产生了惯性力f,这种力作用会假想作用在物体上,只是与运动方向相反。

    125、由上可知,加速度计的本质是测量力而非加速度。

    126、NRF24L01工作在2.4GHz的频段,由于频段频率较高,所以传输速率较快,为2Mbps

    127、STM32的闪存模块由:主存储器、信息块和闪存存储器接口寄存器3个部分构成。主存储器用来存放代码和const常量;信息块由两个部分组成:启动程序代码、用户选择字节。其中启动程序代码为ST公司自带的启动程序,用于串口下载。最后的闪存存储器接口寄存器用于控制整个对闪存区域的操作。

    128、CPU的运行速度比FLASH的操作速度快的多,一般FLASH的最快访问速度≤24Mhz。如果CPU的速度超过这个频率,那么在读取FLASH的时候必须加入等待时间(FLASH_ACR设置)

    129、FLASH编程时,写入必须为半字(16位)。并且在写入的时候必须保证所写区域的数据必须为0xFFFF。

    130、STM32的FSMC有HADDR[27:0],其中[27:26]用来选择BANK区域的4个不同块。剩下的[25:0]则用来连接外部存储区域的地址线FSMC_A[25:0]。如果数据宽度是8bit,此时的HADDR[25:0]和FSMC_A[25:0]是完全对应的。如果数据宽度是16bit,此时的HADDR[25:1]和FSMC_A[24:0]是对应起来的。需要注意:无论数据宽度是多少,外部的FSMC_A[0]和A[0]总是对应的。

    131、关于LB和UB的信号控制是由硬件自动控制的,当AHB的数据宽度小于外部存储器的数据宽度时,此时LB和UB的控制信号自动产生(比如字节读取/写入16bit的外部存储器)

    132、 __attribute__ (函数属性、变量属性、类型属性等)。如果在使用SRAM时,可以采用u32 sram_array[xx] __attribute__ ((at(0x68000000))代表将外部SRAM的空间全部给了sram_array这个变量,他具有在at0x68000000这个地址的属性。往里面写值就直接在SRAM里面写值。

    133、

    7ad94f9874d7894b938e96ebdba671e5.png

    内存管理有一种方式叫做分块式内存管理。

    注意表中的分配方向,从顶到底。每一项对应一个内存块。里面的数值代表了内存池的状态:如果为0,表示该内存没有被分配;如果非0,那么数值的大小就表示了该块内存被连续占用的内存数。比如说数值为20,意思是包括该项在内的内存块被连续占用了20块分给了指针。

    134、SD卡的分类:

    743b3a1bb15e3399eb90316999fa9fbf.png

    一般的SD卡支持两种传输模式:SD卡模式(SDIO)、SPI模式。显然前面一种是专用模式,所以速度比较快。

    135、常用的汉字内码系统有GB2313、GB13000、GBK、BIG5(繁体)。其中GB2313只有几千个汉字,而GBK则有2万多汉字。

    136、 要显示汉字,采用的方式如果用点阵的形式是不可取的,因为这无法查找汉字。采用的方式就是内码系统。GBK标准中,一个汉字对应2个字节:前者称为区(0x81~0xFE)后者为(0x40~0x7E)和(0x80~0xFE)。前者有126个区,后者有190,那么可以显示的汉字数量有126*190=23940个。根据这两个值用来查找字库,字库中存放的还是每个汉字的点阵数据。这个字库非常大,如果是16*16的字体,那么一个字体就需要32个字节,如此说来需要23940*32=748K的空间,可见非常大,所以需要外部的Flash来存储这个字库。

    137、由于汉字内码系统不具有国际通用性,但是Unicode几乎把所有的语言都放置进来,这样在单片机中操作汉字时,就需要将GBK和Unicode转化。尤其是在FATFS中,创建中文文件名和读取中文文件信息时需要将Unicode换转为GBK后再进行修改操作,再反转换成Unicode保存修改。这么说,两者的存在是由于标准的不统一,并且Unicode中只有6064个汉字,而GBK显然是一种汉字扩展。

    138、BMP图片编码的顺序是从左到右,从下到上。

    139、VS1053是一款高性能的数字音频解码芯片,从SD卡中将mp3等音乐音频文件通过SPI送给VS1053后,由其进行音频解码,输出音乐给耳机。耳机驱动可以采用TDA1308芯片,这款芯片为AB类耳机驱动芯片。

    8d46c58554153dc05b0dd94fed17c8bd.png

    140、    

    141、IAP(In Application Programming)在应用编程是为了后期开发更新程序方便而提出的概念。具体的实现方法如下图所示:

    142f5564685777153940815421da3442.png

    在普通编程中,flash中的code是通过JTAG和ISP等工具下载到单片机中。而在IAP编程中,flash被分区为A和B两个区域,A区域只允许用USB/USART等方式下载,此区域作为更新B区域的代码用。B区域则是用户的code区域,真正的代码在这里被执行,放置的就是app。

    3fe786c9dfdd78bd21cb1757fe9c980f.png

    上图表示STM32正常运行的流程图,可以看到上电复位后系统从0x80000004处开始运行程序,这里放置的是复位中断向量,然后跳转至复位中断程序入口后再跳转至main函数运行用户的程序。

    3933c84bf34615c3c77a9f28f82f0fc8.png

    上图表示加入IAP后的STM32程序运行流程图。可以看到上电复位后跳到IAP程序的main函数处运行IAP过程(这个过程就是把下面灰底色块的程序代码烧进B区域à代码更新)。后面的过程和STM32正常运行一样,如果出现中断请求,还是跳转到A区域中的中断向量表中,然后再跳转到B区域的中断服务入口。

    142、    USB有四根线,VCC、GND、D+、D-。在USB主机上,D+和D-均通过一个15K的电阻接地,这样两条线均为低电平。在USB设备中,对于高速设备会在D+通过一个1.5K的电阻接到VCC,而低俗设备会在D-通过一个1.5K的电阻接到VCC。这样主机就可以通过D+和D-的高电平的到来来检测是否有设备接入,并且识别高低速设备。

    143、    UCOSII是一种实时操作系统,具有执行效率高、占有空间小(最小内核2KB)、实施性能优良、扩展性强和移植性强等优点。

    82713e7d10754cb36a81ada3f48d8eff.png

    UCOS具有多任务并发工作的特点(注意,任何时候只有一个任务能够占用CPU。并发只是任务轮流占用CPU而不是同时工作)。最大支持255个任务并发工作。

    推荐阅读:

    • 【MCU】一种单片机节省内存的方法

    • 芯片级拆解:世界第一颗FPGA

    • 你眼里的嵌入式工程师是这样的吗?

    • 模块化编程到底有多重要?

    • 硬件工程师日常崩溃图鉴

    • 33岁入行嵌入式软件开发晚不晚啊?

    • 干货||稀里煳涂学习STM32完整版

    • 【视频】教你DC-DC及做一个开关电源,不信你学不会!

    • 什么是PWM“死区”?

    • 这2个单片机编程的思想,请你掌握

    • 长文:嵌入式程序员的编程修养

    • 485通信自动收发电路 历史上最详细的解释

    • 多个单片机的通信方式【详细】

    • 10个单片机电路设计中的难点,你都解决了吗?

    扫描二维码关注我们

    dfb306bc5c3cc07c5c2c341c648745c3.png

    微信号 : danpianji888

    展开全文
  • 最近,某团外卖被爆出大数据杀熟,所谓的大数据杀熟指的是平台利用户的数据,分析你是否是钱多的人,或者是否是不...刹车,大数据杀熟的话题就说到这了,我们还是回归到今日的技术主题:什么是软中断?。 中断是什

    最近,某团外卖被爆出大数据杀熟,所谓的大数据杀熟指的是平台利用户的数据,分析你是否是钱多的人,或者是否是不纠结价格的人,如果是,那么你买同样的物品会比普通用户贵一点,一般这种没有特地去对比价格是很难发现的,所以平台就利用了这点额外赚一些钱。说来很可笑,我们作为平台的资深用户,竟然被平台背后偷偷捞一笔。

    不过,大数据杀熟早已是屡见不鲜的事情了,事实上,几乎所有大平台都存在这种现象,没办法,这就是真实的互联网。

    刹车,大数据杀熟的话题就说到这了,我们还是回归到今日的技术主题:什么是软中断?

    图片


    中断是什么?

    先来看看什么是中断?在计算机中,中断是系统用来响应硬件设备请求的一种机制,操作系统收到硬件的中断请求,会打断正在执行的进程,然后调用内核中的中断处理程序来响应请求。

    这样的解释可能过于学术了,容易云里雾里,我就举个生活中取外卖的例子。

    小林中午搬完砖,肚子饿了,点了份白切鸡外卖,这次我带闪了,没有被某团大数据大熟。虽然平台上会显示配送进度,但是我也不能一直傻傻地盯着呀,时间很宝贵,当然得去干别的事情,等外卖到了配送员会通过「电话」通知我,电话响了,我就会停下手中地事情,去拿外卖。

    这里的打电话,其实就是对应计算机里的中断,没接到电话的时候,我可以做其他的事情,只有接到了电话,也就是发生中断,我才会停下当前的事情,去进行另一个事情,也就是拿外卖。

    从这个例子,我们可以知道,中断是一种异步的事件处理机制,可以提高系统的并发处理能力。

    操作系统收到了中断请求,会打断其他进程的运行,所以中断请求的响应程序,也就是中断处理程序,要尽可能快的执行完,这样可以减少对正常进程运行调度地影响。

    而且,中断处理程序在响应中断时,可能还会「临时关闭中断」,这意味着,如果当前中断处理程序没有执行完之前,系统中其他的中断请求都无法被响应,也就说中断有可能会丢失,所以中断处理程序要短且快。

    还是回到外卖的例子,小林到了晚上又点起了外卖,这次为了犒劳自己,共点了两份外卖,一份小龙虾和一份奶茶,并且是由不同地配送员来配送,那么问题来了,当第一份外卖送到时,配送员给我打了长长的电话,说了一些杂七杂八的事情,比如给个好评等等,但如果这时另一位配送员也想给我打电话。

    很明显,这时第二位配送员因为我在通话中(相当于关闭了中断响应),自然就无法打通我的电话,他可能尝试了几次后就走掉了(相当于丢失了一次中断)。


    什么是软中断?

    前面我们也提到了,中断请求的处理程序应该要短且快,这样才能减少对正常进程运行调度地影响,而且中断处理程序可能会暂时关闭中断,这时如果中断处理程序执行时间过长,可能在还未执行完中断处理程序前,会丢失当前其他设备的中断请求。

    那 Linux 系统为了解决中断处理程序执行过长和中断丢失的问题,将中断过程分成了两个阶段,分别是「上半部和下半部分」

    • 上半部用来快速处理中断,一般会暂时关闭中断请求,主要负责处理跟硬件紧密相关或者时间敏感的事情。

    • 下半部用来延迟处理上半部未完成的工作,一般以「内核线程」的方式运行。

    前面的外卖例子,由于第一个配送员长时间跟我通话,则导致第二位配送员无法拨通我的电话,其实当我接到第一位配送员的电话,可以告诉配送员说我现在下楼,剩下的事情,等我们见面再说(上半部),然后就可以挂断电话,到楼下后,在拿外卖,以及跟配送员说其他的事情(下半部)。

    这样,第一位配送员就不会占用我手机太多时间,当第二位配送员正好过来时,会有很大几率拨通我的电话。

    再举一个计算机中的例子,常见的网卡接收网络包的例子。

    网卡收到网络包后,会通过硬件中断通知内核有新的数据到了,于是内核就会调用对应的中断处理程序来响应该事件,这个事件的处理也是会分成上半部和下半部。

    上部分要做到快速处理,所以只要把网卡的数据读到内存中,然后更新一下硬件寄存器的状态,比如把状态更新为表示数据已经读到内存中的状态值。

    接着,内核会触发一个软中断,把一些处理比较耗时且复杂的事情,交给「软中断处理程序」去做,也就是中断的下半部,其主要是需要从内存中找到网络数据,再按照网络协议栈,对网络数据进行逐层解析和处理,最后把数据送给应用程序。

    所以,中断处理程序的上部分和下半部可以理解为:

    • 上半部直接处理硬件请求,也就是硬中断,主要是负责耗时短的工作,特点是快速执行;

    • 下半部是由内核触发,也就说软中断,主要是负责上半部未完成的工作,通常都是耗时比较长的事情,特点是延迟执行;

    还有一个区别,硬中断(上半部)是会打断 CPU 正在执行的任务,然后立即执行中断处理程序,而软中断(下半部)是以内核线程的方式执行,并且每一个 CPU 都对应一个软中断内核线程,名字通常为「ksoftirqd/CPU 编号」,比如 0 号 CPU 对应的软中断内核线程的名字是 ksoftirqd/0

    不过,软中断不只是包括硬件设备中断处理程序的下半部,一些内核自定义事件也属于软中断,比如内核调度等、RCU 锁(内核里常用的一种锁)等。


    系统里有哪些软中断?

    在 Linux 系统里,我们可以通过查看 /proc/softirqs 的 内容来知晓「软中断」的运行情况,以及 /proc/interrupts 的 内容来知晓「硬中断」的运行情况。

    接下来,就来简单的解析下  /proc/softirqs 文件的内容,在我服务器上查看到的文件内容如下:

    图片

    你可以看到,每一个 CPU 都有自己对应的不同类型软中断的累计运行次数,有 3 点需要注意下。

    第一点,要注意第一列的内容,它是代表着软中断的类型,在我的系统里,软中断包括了 10 个类型,分别对应不同的工作类型,比如 NET_RX 表示网络接收中断,NET_TX 表示网络发送中断、TIMER 表示定时中断、RCU 表示 RCU 锁中断、SCHED 表示内核调度中断。

    第二点,要注意同一种类型的软中断在不同 CPU 的分布情况,正常情况下,同一种中断在不同 CPU 上的累计次数相差不多,比如我的系统里,NET_RX 在 CPU0 、CPU1、CPU2、CPU3 上的中断次数基本是同一个数量级,相差不多。

    第三点,这些数值是系统运行以来的累计中断次数,数值的大小没什么参考意义,但是系统的中断次数的变化速率才是我们要关注的,我们可以使用 watch -d cat /proc/softirqs 命令查看中断次数的变化速率。

    前面提到过,软中断是以内核线程的方式执行的,我们可以用 ps 命令可以查看到,下面这个就是在我的服务器上查到软中断内核线程的结果:

    图片

    可以发现,内核线程的名字外面都有有中括号,这说明 ps 无法获取它们的命令行参数,所以一般来说,名字在中括号里到,都可以认为是内核线程。

    而且,你可以看到有 4 个 ksoftirqd 内核线程,这是因为我这台服务器的 CPU 是 4 核心的,每个 CPU 核心都对应着一个内核线程。


    如何定位软中断 CPU 使用率过高的问题?

    要想知道当前的系统的软中断情况,我们可以使用 top 命令查看,下面是一台服务器上的 top 的数据:

    图片

    上图中的黄色部分 si,就是 CPU 在软中断上的使用率,而且可以发现,每个 CPU 使用率都不高,两个 CPU 的使用率虽然只有 3% 和 4% 左右,但是都是用在软中断上了。

    另外,也可以看到 CPU 使用率最高的进程也是软中断 ksoftirqd,因此可以认为此时系统的开销主要来源于软中断。

    如果要知道是哪种软中断类型导致的,我们可以使用 watch -d cat /proc/softirqs 命令查看每个软中断类型的中断次数的变化速率。

    图片

    一般对于网络 I/O 比较高的 Web 服务器,NET_RX 网络接收中断的变化速率相比其他中断类型快很多。

    如果发现 NET_RX 网络接收中断次数的变化速率过快,接下里就可以使用 sar -n DEV 查看网卡的网络包接收速率情况,然后分析是哪个网卡有大量的网络包进来。

    图片

    接着,在通过 tcpdump 抓包,分析这些包的来源,如果是非法的地址,可以考虑加防火墙,如果是正常流量,则要考虑硬件升级等。


    总结

    为了避免由于中断处理程序执行时间过长,而影响正常进程的调度,Linux 将中断处理程序分为上半部和下半部:

    • 上半部,对应硬中断,由硬件触发中断,用来快速处理中断;

    • 下半部,对应软中断,由内核触发中断,用来异步处理上半部未完成的工作;

    Linux 中的软中断包括网络收发、定时、调度、RCU 锁等各种类型,可以通过查看 /proc/softirqs 来观察软中断的累计中断次数情况,如果要实时查看中断次数的变化率,可以使用 watch -d cat /proc/softirqs 命令。

    每一个 CPU 都有各自的软中断内核线程,我们还可以用 ps 命令来查看内核线程,一般名字在中括号里面到,都认为是内核线程。

    如果在 top 命令发现,CPU 在软中断上的使用率比较高,而且 CPU 使用率最高的进程也是软中断 ksoftirqd 的时候,这种一般可以认为系统的开销被软中断占据了。

    这时我们就可以分析是哪种软中断类型导致的,一般来说都是因为网络接收软中断导致的,如果是的话,可以用 sar 命令查看是哪个网卡的有大量的网络包接收,再用 tcpdump 抓网络包,做进一步分析该网络包的源头是不是非法地址,如果是就需要考虑防火墙增加规则,如果不是,则考虑硬件升级等。

    展开全文
  • 中断优先级

    千次阅读 2021-07-25 04:32:43
    为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪...

    为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。

    在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级( Priority ),又称优先权,先响应优先级最高的中断请求。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。

    中文名

    中断优先级

    外文名

    Interrupt priority

    解决方法

    软件、硬件优先级排队作    用

    及时响应并处理发生的所有中断

    排序方法

    引起中断事件的重要性和紧迫程度

    依    据

    优先级

    中断优先级简介

    编辑

    语音

    微机系统中有多个中断源,有可能出现两个或两个以上中断源同时发出中断请求的情况。多个中断源同时请求中断时,CPU必须先确定为哪一个中断源服务,要能辨别优先级最高的中断源并进行响应。CPU在处理中断时也要能响应更高级别的中断申请,而屏蔽掉同级或较低级的中断申请,这就是中断优先级问题。[1]

    中断系统中,CPU一般根据各中断请求的轻重缓急分别处理,即给每个中断源确定一个中断优先级别,系统自动对它们进行排队判优,保证首先处理优先级别高的中断请求,待级别高的中断请求处理完毕后,再响应级别较低的中断请求。对多个中断源进行识别和优先级排队的日的就是要确定出最高级别的中断源,并形成该中断源的中断服务程序入口地址,以便CPU将控制转移到该中断服务程序去。[1]

    一般指以下两层含义:[2]

    ①若有2个或2个以上的中断源同时提出中断请求,微处理器先响应哪个中断源,后响应哪个中断源;[2]

    ②若一个中断源提出中断请求,微处理器给予响应并正在执行其中断服务程序时,又有1个中断源提出中断请求,后来的中断源能否中断前一个中断源的中断服务程序。[2]

    中断优先级分类

    编辑

    语音

    中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初引入硬件中断,只是出于性能上的考量。如果计算机系统没有中断,则处理器与外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务,而当设备完成动作后,发送中断信号给处理器,后者就可以再回过头获取处理结果。这样,在设备进行处理的周期内,处理器可以执行其他一些有意义的工作,而只付出一些很小的切换所引发的时间代价。后来被用于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面,并产生通过软件方式进入中断处理(软中断)的概念。[3]

    中断可分为如下几种:

    中断优先级硬件中断

    (Hardware Interrupt)[3]可屏蔽中断(maskable interrupt)。硬件中断的一类,可通过在中断屏蔽寄存器中设定位掩码来关闭。[3]

    非可屏蔽中断(non-maskable interrupt,NMI)。硬件中断的一类,无法通过在中断屏蔽寄存器中设定位掩码来关闭。典型例子是时钟中断(一个硬件时钟以恒定频率—如50Hz—发出的中断)。[3]

    处理器间中断(interprocessor interrupt)。一种特殊的硬件中断。由处理器发出,被其它处理器接收。仅见于多处理器系统,以便于处理器间通信或同步。[3]

    伪中断(spurious interrupt)。一类不希望被产生的硬件中断。发生的原因有很多种,如中断线路上电气信号异常,或是中断请求设备本身有问题。[3]

    中断优先级软件中断

    (Software Interrupt)软件中断也叫内部中断,它是CPU执行中断指令INT n产生的中断。中断指令提供了直接调用中断服务程序的软件手段。[4]

    软件中断是以INT n指令的形式出现在程序中的,中断指令占用两个字节,第一个字节为指令码CDH,第二个字节为指令操作数n,即中断类型码。当软件中断时,CPU从指令流中读取中断类型码;当可屏蔽中断时,要在发出中断响应信号ITA后,才能从数据总线上读取中断类型码。可见,软件中断与外部中断有许多不同之处,它具有自身的一些特点,表现在以下几个方面。[4]

    (1)软件中断是以一条指令INT n而进入中断服务程序的,并且其中断类型码由指令的第二字节提供。[4]

    (2)软件中断不受中断允许标志IF的禁止,即无论正=1或0,对任何一个软件中断都不影响。其中,只有单步中断受单步标志TF的影响,即只有当TF=1时,才能执行单步中断。[4]

    (3)由于CPU从指令流中读取软件中断的中断类型码,因此,在软件中断进入中断后,不需要执行中断响应总线周期,也不必从数据总线上读取中断类型码。[4]

    (4)软件中断除类型0(除数为0的中断)外,都没有随机性,因为软件中断是以INT n指令的形式出现在程序中的,该指令放在程序的何处何时执行都是预先定好的,这就使得软件中断不会出现随机性。[4]

    中断优先级中断源种类

    编辑

    语音

    (1)设备中断:如键盘、打印机等设备的数据传送请求等。[1]

    (2)指令中断:为了方便用户使用系统资源或调试软件而设置的中断指令,由程序预先安排的中断指令(INT n)引起,如BIOS及DOS系统功能调用的中断指令等。[1]

    (3)故障中断:计算机内部设有故障自动检测装置,如电源掉电、奇偶校验错或协处理器中断请求等意外事件,都要求CPU进行相应的中断处理。[1]

    (4)实时时钟中断:在自动控制系统中,常遇到定时检测与时间控制,这时可采用外部时钟电路进行定时。CPU可发出命令启动时钟电路开始计时,待定时时间到,时钟电路就会向CPU发出中断申请,由CPU进行处理。[1]

    (5) CPU内部运算产生的某些错误所引起的中断:如除法出错、运算溢出、程序调试中设置断点等。[1]

    中断优先级中断响应原则

    编辑

    语音

    响应不同优先级中断的原则是:[5]CPU首先响应高优先级的中断请求;

    如果优先级相同,CPU按查询次序响应排在前面的中断;

    正在进行的中断过程不能被新的同级或低优先级的中断请求所中断;

    正在进行的低优先级中断过程,能被高优先级中断请求所中断。

    中断优先级响应流程

    编辑

    语音

    CPU在执行每一条指令的后期,要对所有的中断源进行检测。[5]

    在检测到中断请求前,程序计数器PC中存储的是下一条指令码的地址。如果CPU检测到某一中断请求并将响应该中断时,它要跳转到该中断服务程序处,即把PC的当前内容保存起来,再把该中断服务程序的入口地址送给PC,则其后CPU就执行该中断服务程序了。[5]

    b7240e5016ab5eacdf7d8c1f303e9f9b.png

    图1 CPU响应中断流程

    [5]在退出中断服务程序前,CPU要执行中断返回指令RETI,该指令把进入中断服务程序前保存的PC内容再写入PC,则其后CPU就从进入中断服务程序前的断点处向下执行指令,其流程如图1所示用C51编写中断服务函数时,并不需要在中断服务函数的最后编写RETI指令,该指令由编译器在编译中断服务函数时自动添加。

    中断优先级优先级排队

    编辑

    语音

    在实际系统中,常常遇到多个中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级( Priority),又称优先权,先响应优先级最高的中断请求。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。[6]

    中断源的优先级判别一般可采用软件优先级排队和硬件优先级排队两种方法。[7]

    中断优先级软件优先级排队

    948d699fb96c8f5dfd92f8ded619a179.png

    图2 软件査询接口电路如图2所示,优先级由查询顺序决定,先查询的中断源具有最高的优先级。[8]

    软件优先级排队是指各个中断源的优先权由软件安排。若干个外设的中断请求信号相“或”后,送至CPU的中断接收引脚(如INTR)。这样,只要任一外设有中断请求,CPU便可响应中断。在中断服务子程序前可安排一段优先级的查询程序,即CPU读取外设中断请求状态端口,然后根据预先确定的优先级级别逐位检测各外设的状态,若有中断请求就转到相应的Uo处理程序入口,为该外设服务。[7]

    71af1de55d112643a2b592e6e864456d.png

    软件查询程序流程用软件査询方法确定中断优先级是一种最简单的解决方法,主要依靠软件方法实现,不需要专门的优先级排队电路,可以通过修改查询顺序来修改中断优先级,不必更改硬件。但是当中断源个数较多时,由逐位检测査询到转入相应中断服务程序所耗费的时间较长,中断响应速度慢,服务效率低。[7]

    中断优先级硬件优先级排队

    dd8ec7437355aa01df587d6a172b5863.png

    菊花链优先级排队电路为提高中断处理效率,通常采用硬件处理中断优先权问题,即采用优先级排队电路或专用中断控制器等硬件电路来管理中断。其中,硬件优先权排队电路形式众多,有采用编码器组成的,有采用链式电路的。[1]

    利用外设连接在排队电路的物理位置来决定其中断优先权的,排在最前面的优先级最高,排在最后面的优先级最低。[6]

    中断优先级改变并发中断优先级的方法

    编辑

    语音

    在PC环境下,要改变并发中断优先级,实现理想的中断处理顺序,要从以下两个方面着手。

    (1)使低优先级的中断可中断高优先级的中断服务程序。

    通过研究发现,8259A 中的中断服务寄存器ISR。对中断处理顺序的改变起了非常重要的作用。当中断服务寄存器的相应位置 1时,8259A 自动禁止同级和较低级的中断请求。因此要改变中断的处理顺序,必须在CPU响应中断后,将8259A中的相应位清零的。这样,如果有新的中断请求,不论它的级别高低,只要CPU处于开中断状态,芯片就会马上再向CPU发出中断请求,即低优先级的中断就可能会中断高优先级的中断服务程序。而实现CPU响应中断后,将中断服务寄存器8259A中的相应位清零,有3种解决的办法。[9]

    (2)在中断处理程序中设置新的中断屏蔽字。

    为了能根据需要,改变实际的中断处理次序,很多机器都设置了中断屏蔽寄存器硬件,以决定是否让某级中断请求进入中断优先权电路进行优先权比较。级别高的中断请求优先得到响应。只要将每一类中断处理程序的各级中断屏蔽位设置成不同的状态,就可以得到所希望的中断处理次序。[9]

    中断优先级单级中断与多级中断

    编辑

    语音

    根据计算机系统对中断处理策略的不同,中断系统可以分为单级中断系统和多级中断系统,单级中断系统是中断结构中最基本的形式。[1]

    在单级中断系统中,所有的中断源都属于同一级,所有中断请求触发器排成一行,其优先次序是离CPU越近优先级越高。当响应某一中断请求时,CPU执行该中断源的中断服务程序,在此过程中,中断服务程序不允许被其他中断源所打断,即使优先级比它高的中断源也不例外,只有当该中断服务程序执行完毕之后,才能响应其他中断。[1]

    多级中断系统是指计算机系统中的多个中断源,根据中断事件的轻重缓急程度不同而分成若干个级别,每一个中断级分配一个优先级。一般而言,优先级高的中断级可以打断优先级低的中断服务程序,以中断嵌套方式进行工作。[1]

    在中断优先级已定的情况下,CPU总是首先响应优先级最高的中断请求。当CPU正在响应某一中断源的请求,即正在执行某个中断服务程序时,若有优先级更高的中断源申请中断,为使级别更高的中断源能及时得到服务,CPU就应暂停当前正在服务的级别较低的服务程序而转入新的中断源服务,等新的级别较高的中断服务程序执行完后,再返回到被暂停的中断服务程序继续执行,直至处理结束返回主程序,这种过程称为中断嵌套。CPU允许高优先级中断请求可以打断低优先级中断服务,使CPU对于急需处理的事件立即做出响应。[1]

    中断嵌套的出现,扩大了系统中断功能,进一步加强了系统处理紧急事件的能力。中断嵌套可以商多级。具体级数(即嵌套深度)原则上不限制,只取决于堆栈深度,实际上与要求的中断响应速度有关。[1]

    词条图册

    更多图册

    参考资料

    1.

    杨立,邓振杰,荆淑霞等编著.微型计算机原理与接口技术:中国铁道出版社,2016.02:第219页

    2.

    袁志勇,王景存主编;章登义,刘树波副主编.嵌入式系统原理与应用技术:北京航空航天大学出版社,2014.01:第146页

    3.

    张自军,蒋军,叶爱芹.微机原理与接口技术:中国科学技术大学出版社,2012.08:第205页

    4.

    李育贤.微机接口技术及其应用:西安电子科技大学出版社,2007.06:第73页

    5.

    王普斌.单片机接口与应用:冶金工业出版社,2016.04:第61页

    6.

    刘显荣主编;张元涛,吴云君副主编;汪德彪,常继彬,叶文,范苏参编.微机原理与嵌入式接口技术:西安电子科技大学出版社,2016.08:第129页

    7.

    万晓东,陈则王,孔德明编著.计算机硬件技术基础:南京航空航天大学,2013.01:第275页

    8.

    刘显荣主编;张元涛,吴云君副主编;汪德彪,常继彬,叶文,范苏参编.微机原理与嵌入式接口技术:西安电子科技大学出版社,2016.08:第130页

    9.

    陈燕俐, 洪龙, CHENYan-li, et al. 自由调整中断优先级的研究和实现[J]. 南京邮电大学学报(自然科学版), 2005, 25(6):35-39.

    展开全文
  • Nios II 的中断处理方式带典型的RISC处理器的特征,所有的中断处理都从同一入口进入,然后由软件加以分配。负责分配工作的软件叫系统ISR,它是由开发系统提供的,自动的连接到可执行程序上。
  • 重要声明: 以下代码粘贴 截取他人劳动成果的成分 如雷同 不胜荣幸 如您不能容忍 请不要独自忍受@weChat:iisssssssssii 联系小民 主动删除  中断含义:  { 中断是CPU处理外部突发事件的一个重要技术。它...

    重要声明: 以下代码有粘贴 截取他人劳动成果的成分 如有雷同 不胜荣幸 如您不能容忍 请不要独自忍受@weChat:iisssssssssii 联系小民 主动删除       

    中断含义: 

    {

    中断是CPU处理外部突发事件的一个重要技术。它能使CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行CPU原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。

           根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断内部中断两类

    硬件中断:

          外部中断:一般是指由计算机外设发出的中断请求如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也是说,利用中断控制器可以屏蔽这些外部设备 的中断请求。

           内部中断:是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断。 软件中断其实并不是真正的中断,它们只是可被调用执行的一般程

    软件中断:

    其实并不是真正的中断,它们只是可被调用执行的一般程例如:ROM BIOS中的各种外部设备管理中断服务程序(键盘管理中断、显示器管理中断、打印机管理 中断等,)以及DOS的系统功能调用(INT 21H)等都是软件中断

    }

    硬中断、软中断是怎么来的? :Linux 将中断 分为两个部分 

       上半部--》硬中断:完成紧急但很快完成的事 

       下半部:分为软中断、tasklet(当然它也是一种软中断)、工作队列(当然它也是一种软中断) 作用:处理不紧急但比较耗时间的事 

    重要是事:中断下半部的最早执行时间是中断上半部执行完之后 但是中断还没有完全返回之前 比如软中断

    完整过程:

    第一步:参考 http://blog.csdn.net/zqixiao_09/article/details/50927416 略

    第二步:参考 https://www.cnblogs.com/wmx-learn/p/5360269.html#undefined

    第三步:参考 http://blog.csdn.net/zhangskd/article/details/21992933

    第四步: 需要说明的是:

    /*----------------------------------------------**** 巩固 *****------------------------------------------------------*/

    1. 问:对于软中断,I/O操作是否是由内核中的I/O设备驱动程序完成?

    答:对于I/O请求,内核会将这项工作分派给合适的内核驱动程序,这个程序会对I/O进行队列化,以可以稍后处理(通常是磁盘I/O),或如果可能可以立即执行它。通常,当对硬中断进行回应的时候,这个队列会被驱动所处理。当一个I/O请求完成的时候,下一个在队列中的I/O请求就会发送到这个设备上。

    2. 问:软中断所经过的操作流程是比硬中断的少吗?换句话说,对于软中断就是:进程 ->内核中的设备驱动程序;对于硬中断:硬件->CPU->内核中的设备驱动程序?

    答:是的,软中断比硬中断少了一个硬件发送信号的步骤。产生软中断的进程一定是当前正在运行的进程,因此它们不会中断CPU。但是它们会中断调用代码的流程。

    如果硬件需要CPU去做一些事情,那么这个硬件会使CPU中断当前正在运行的代码。而后CPU会将当前正在运行进程的当前状态放到堆栈(stack)中,以至于之后可以返回继续运行。这种中断可以停止一个正在运行的进程;可以停止正处理另一个中断的内核代码;或者可以停止空闲进程。;

    一般硬中断 基本为中断的上半部分,软中断、tasklet、队列是中断的下半部分,将上半部分没有实现完的处理继续执行。

    中断下半部的处理

    对于一个中断,如何划分出上下两部分呢?哪些处理放在上半步,哪些放在下半部?

    这里有一些经验可供借鉴:

    如果一个任务对时间十分敏感,将其放在上半部。

    如果一个任务和硬件有关,将其放在上半部。

    如果一个任务要保证不被其他中断打断,将其放在上半部。

    其他所有任务,考虑放在下半部。

    实现下半部中断的三种机制

    目前使用下面三种方法:

    1.软中断

    2.tasklet

    3.工作队列

    软中断

    软中断是一组静态定义的下半部接口,有 32 个,可以在所有处理器上同时执行,类型相同也可以;在编译时静态注册。

    asmlinkage void do_softirq(void)
    {
        __u32 pending;
        unsigned long flags;
     
        /* 判断是否在中断处理中,如果正在中断处理,就直接返回 */
        if (in_interrupt())
            return;
     
        /* 保存当前寄存器的值 */
        local_irq_save(flags);
     
        /* 取得当前已注册软中断的位图 */
        pending = local_softirq_pending();
     
        /* 循环处理所有已注册的软中断 */
        if (pending)
            __do_softirq();
     
        /* 恢复寄存器的值到中断处理前 */
        local_irq_restore(flags);
    }

    代码之中第一次就判断是否在中断处理中,如果在立刻退出函数。这说明了什么?说明了如果有其他软中断触发,执行到此处由于先前的软中断已经在处理,则其他软中断会返回。所以,软中断不能被另外一个软中断抢占!唯一可以抢占软中断的是中断处理程序,所以软中断允许响应中断。虽然不能在本处理器上抢占,但是其他的软中断甚至同类型可以再其他处理器上同时执行。由于这点,所以对临界区需要加锁保护。

    软中断留给对时间要求最严格的下半部使用。目前只有网络,内核定时器和 tasklet 建立在软中断上。

    Tasklet

    注意,这第二种机制是基于软中断实现的,灵活性强,动态创建的下半部实现机制。两个不同类型的 tasklet 可以在不同处理器上运行,但相同的不可以,可以通过代码动态注册。

    在 SMP 上,调用 tasklet 是会检测 TASKLET_STATE_SCHED 标志,如果同类型在运行,就退出函数。

    tasklet 由于是基于软中断实现的,所以也允许响应中断。但不能睡眠(我认为不能睡眠原因是它们内部有 spin lock)。

    工作队列

    将下半部功能交由内核线程执行,有着线程上下文环境,可以睡眠。

    提供接口把需要推后执行的任务排列到队列里,提供默认的工作者线程处理排到队列里的下半部工作。

    工作队列实际上是一个链表,工作线程作为死循环,链表空时休眠,不空是执行每一个工作。

    各种机制的比较

    下半部上下文顺序执行保障
    软中断中断随意,同类型都可以在不同处理器同时执行
    tasklet中断同类型不能同时执行
    工作队列进程不保障,可能被调度和抢占

    选择:

    - 工作队列:适用于任务推后到进程上下文完成,可以休眠

    - tasklet:任务接口简单,支持中断响应,但有同种类型不能同时执行的限制

    - 软中断:提供的执行顺序保障最少,支持中断响应,由于同类型软中断在其他处理器可同时执行,所以要采取措施保护共享数据。


    linux的驱动程序分两个部分实现:top-half和bottom-half。
    top-half在运行时,不能被其他任何中断再次中断,也不能被其他进程中断,它通过对CPU内的中断屏蔽置位实现,而bottom-half则只对top-half开中断。
    这样,系统就可以根据中断服务程序的访问特点,安排那些访问临界区的服务程序为top-half,其他中断服务程序为bottom-half。

    每次离开中断处理程序,系统会执行schedule(),发生进程调度。




     
    
    展开全文
  • 最好的办法是主程序和中断相结合的方法喂狗,这个需要根据实际程序中断特点编写相应的喂狗功能(参考方法:在主循环内判中断进入标志(或中断进入次数)再喂狗.)。
  • 中断中断的应用

    千次阅读 2019-12-01 23:03:31
    什么是中断? 一个程序只会做自己的事情,当需要输入或者输出时就要用到外部设备,而外部设备相比于处理器要慢得多。在等待的时候,处理器只能不停的观察外部设备的状态变化。 为了能够更加高效的运用硬件资源,...
  • 中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。 ARM处理器异常中断处理概述 ...
  • 中断

    2019-03-02 22:51:10
    1.中断相关概念 计算机中都配置了中断装置,用户程序执行过程中不但可通过系统调用,还可以用中断方式来请求和获得操作系统的服务。采用中断技术后还能实现CPU 和 I/O 设备交换信息使 CPU 与 I/O 设备并行工作。...
  • 什么是中断源?中断源的分类介绍

    万次阅读 2018-01-31 16:49:23
     中断就是使CPU暂停运行原来的程序而应更为急迫事件的需要转向去执行为中断源服务的程序(称为中断服务程序),待该程序处理完后,再返回运行原程序。  什么是中断源?  所谓中断源,即引起中断的事件或原因,...
  • STM32(Cortex-M3)中两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。
  • 这里写目录标题先验知识回顾控制寄存器回顾1、8086中断类型1、外部可屏蔽中断2、外部不可屏蔽中断3、除法错中断4、单步中断5、断点中断6、溢出中断7、软中断2、8086中断向量表3、8086中断响应1、外部可屏蔽中断响应2...
  • 中断和软中断

    2020-05-12 09:24:50
    从本质上来讲,中断是一种电信号,当设备某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。 如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己...
  • 中断判优

    2020-10-27 13:59:37
    硬件排队器的电路实现 如图,通过使用非门和与非门电路实现来实现INTR1的优先级为最高
  • 中断的分类和区别

    万次阅读 多人点赞 2018-11-03 19:48:31
    从不同的角度来说,中断可以三种分类方法。 中断可以分为同步中断(synchronous)和异步中断(asynchronous)。 中断可分为硬中断和软中断中断可分为可屏蔽中断(Maskable interrupt)和非屏蔽中断(Nomaskable ...
  • 中断从硬件到内核的路由 概念 从物理学的角度看,中断是一种电信号...因此,来自键盘的中断别于来自硬盘的中断,从而使得操作系统能够对中断进行区分,并知道哪个硬件设备产生了哪个中断。这样,操作系统才能给
  • 从本质上来讲,中断是一种电信号,当设备某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器(如 8259A)。 如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是...
  • 中断知识点集合

    千次阅读 2019-04-18 14:24:17
    中断全过程指的是从中断源发出中断请求开始,CPU响应这个请求,现行程序被中断,转至中断服务程序,直到中断服务程序执行完毕,CPU再返回原来的程序继续执行的整个过程。 为中断服务程序会用到寄存器和存储器的...
  • 中断和轮询的特点

    千次阅读 2019-10-23 11:04:13
    轮流询问之后,要求的,则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询要比I/O设备的速度要快得多,所以一般不会发生不能及时处理的问题。当然,再快的处理机,能处理的输入...
  • 程序查询、程序中断、DMA之间特点

    千次阅读 2021-02-01 16:37:48
    I/O设备与主机交换信息共有5种方式(我简单记录前三种) 1、程序查新方式 2、程序中断方式 3、直接存储器存取方式(DMA) 4、I/O通道方式 5、I/O处理机方式 ...主存与I/O设备之间一条数据通道,主存与I/O设备
  • 外部中断

    2021-04-22 15:43:45
    外部中断一外部中断基础二外部中断步骤三外部中断代码及运行 一外部中断基础 二外部中断步骤 三外部中断代码及运行 一、外部中断基础 (1)STM32的每个IO口都可以作为外部中断输入; (2)STM32的中断控制器支持19个...
  • 外部中断NMI中断.ppt

    千次阅读 2020-12-28 21:29:32
    外部中断NMI中断.ppt* 1、先看其引脚结构再看功能1。 可编程的含义:通过对芯片编程,使芯片实现不同的功能。 中断比较多的情况下,使用中断控制器来管理中断。 用来管理系统的硬件中断。 * 1、数据总线驱动器 和CPU...
  • IEEE-RBT 6节点算例结果表明,大量用户响应具有明显的集群效应,助于弥补单个用户响应的不确定性,并且在不同的可靠性要求下,优化模型中发电机备用与可中断负荷备用的配置具有不同的特点,体现了经济性和可靠性的...
  • 中断处理的编程实现需要深入了解ARM内核和处理器本身的中断特征,从而设计一种快速简便的中断处理机制。需要说明的是,具体的上层高级语言编写的中断服务函数不在本文的讨论范围之内。  ARM处理器异常中断处理概述...
  • 3.外部中断

    2019-06-27 21:34:06
    1、中断的认识 什么是中断? 当计算机在执行main函数中的代码...上面对中断的认识是在51单片机上学习到的,因为51单片机中的中断只有相对重要且基础的几个,比如,定时器中断,计数器中断,还有串口中断(当发送寄存...
  • 中断处理函数注意事项

    千次阅读 2020-05-09 11:49:24
    中断服务函数由硬件触发,因此不能获得参数,也无法返回值;另一方面,在中断服务函数中使用不可重入的函数,往往会导致问题。
  • 9.5 内部中断分类说明

    千次阅读 2019-09-20 21:03:14
    那么就来花一点时间,看一看内部中断到底有哪些不同的类型。 我们还是以x86的实模式为例,这个比较简单,但基本原理都是一样的。 在x86的实模式下,我们要来分析的内部中断就是这四个。 这四个内部中断所使用的类...
  • 操作系统的特征: 并发(性):指两个或多个事件在同一时间间隔内发生。 (宏观上同时发生,微观上交替发生) 注: 这里并发和并行概念不同,并行指的是两个或多个事件在同一时刻发生。 操作系统的并发指在...
  • ARM的中断原理

    2020-12-20 14:19:14
    1.中断概述CPU与外设的数据传输方式通常以下3种方式:查询方式、中断方式、DMA方式。本文引用地址:http://www.eepw.com.cn/article/201611/316975.htm所谓查询方式是指,CPU不到查询外设的状态,如果外设准备就绪...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 184,022
精华内容 73,608
关键字:

中断的特点有哪些