Cortex-M芯片低功耗开发

2023-05-16

文章目录

  • 芯片的低功耗
    • 1.1 低功耗的测量数据
    • 1.2 低功耗的系统特性
    • 1.3 低功耗的系统需求
      • 1.3.1 Cortex-M3和Cortex-M4处理器的低功耗特点
    • 1.4 低功耗系统特性
      • 1.4.1 休眠模式
      • 1.4.2 系统控制寄存器(SCR)
      • 1.4.3 进入休眠模式的指令
      • 1.4.4 唤醒条件
      • 1.4.5 休眠扩展/唤醒延迟
      • 1.4.6 唤醒中断控制器(WIC)
      • 1.4.7 状态保持功率门(SRPG)
      • 1.4.8 事件通信接口
        • 1.4.8.1 外设与处理器之间通信
        • 1.4.8.2 多处理器之间通信
        • 1.4.8.3 信号量和互斥体
      • 1.4.9 退出时的休眠特性
    • 1.5低功耗指令的用法
      • 1.5.1 WFI的用法
      • 1.5.2 WFE的用法
    • 开发低功耗应用的注意点


芯片的低功耗

1.1 低功耗的测量数据

     Cortex-M微控制器的一个主要优势在于能耗效率和低功耗特性。能耗效率一般有一定的能量可以完成的工作来衡量,可以为DMIPS/uW或CoreMark/uW等形式,不过,低功耗的测量只会注重动态电流和休眠电流,其中动态电流的单位为uA/MHz, 休眠电流则为uA(时钟停止)

1.2 低功耗的系统特性

     目前,许多Cortex-M微控制器都具有许多可以提高电池寿命的系统特性。例如:

  • 多种运行模式和休眠模式
  • 超低功耗的实时时钟(RTC)、看门狗和掉电检测(BOD)
  • 在处理器处于休眠模式时仍可以运行的只能外设
  • 灵活的时钟系统控制特性,设计中不活跃的部分可被关闭

1.3 低功耗的系统需求

     低功耗系统在设计时需要考虑的需求如下:

在这里插入图片描述

     不同的嵌入式系统需要考虑的低功耗需求也是不同的,比如,对于一些电池供电的产品,能耗效率是最为关键的因素,但是对于一些追求实时特性的工控应用来说,唤醒等待时间会更为关键。中断驱动系统的工作流程如下:

在这里插入图片描述

     若数据处理请求为周期性的,且每次的持续时间都相同,在无须考虑数据处理等待时间的情况下,可以再尽可能低的时钟频率下运行以降低功耗。

1.3.1 Cortex-M3和Cortex-M4处理器的低功耗特点

  • 低功耗设计:这两种处理器的硅片面积更小,且具有多种低功耗的优化。
  • 高性能:微控制器可以运行在较低的时钟频率下,或者更快的完成处理任务以便可以在休眠模式中多待些时间。
  • 高代码密度:对于同一个应用任务,可以使用具有较小Flash存储器的微控制器以降低功耗和成本。

1.4 低功耗系统特性

1.4.1 休眠模式

     Cortex-M处理器支持两种休眠模式:休眠和深度休眠。有些情况下,深度休眠模式可利用状态保持功率门(SRPG)等高级芯片设计技术进一步降低功耗。休眠期间发生的情况取决于芯片的设计,多数情况下,可以停止部分时钟信号以降低功耗。不过芯片也可以设计为部分关掉。有些情况下,还可以将芯片全部掉电,将处于这种掉电模式下的系统唤醒的唯一方法为系统复位。不同模式的功耗对比如下:

在这里插入图片描述

1.4.2 系统控制寄存器(SCR)

     SCR => System Control Register(0xE000ED10),利用这个寄存器可以选择进入什么睡眠模式,也可以选择是不是要发送事件。具体如下:

在这里插入图片描述

1.4.3 进入休眠模式的指令

     处理器提供了两个用于进入休眠模式的指令:WFI和WFE。具体的用法如下:

在这里插入图片描述

     WFE可由事件唤醒,其中包括事件输入信号脉冲(在处理器中名为RXEV)及之前产生的事件。在处理器内部,之前产生的事件会体现在只有一位的事件寄存器中,该事件寄存器可由下列情况置位

  • 异常进入退出
  • 在使能SEV-ON-PEND特性后,当中断挂起状态由0变为1时,事件寄存器会置位
  • 片上硬件的外部事件信号(RXEV)
  • SEV(发送事件)指令的执行
  • 调试事件(如暂停请求)

     与WFI休眠类似,在WFE休眠期间,若中断的优先级高于当前等级,该中断可以将处理器唤醒,不管其优先级是否被BASEPRI屏蔽掉,或者SEV-ON-PEND如何设置。

1.4.4 唤醒条件

     多数情况下,中断(包括NMI和Systick定时中断)可以将Cortex-M3或M4从休眠模式中唤醒。不过,有些睡眠模式可能会关掉NVIC或外设的时钟信号,但是具体还是根据芯片而异,可能有的中断时无法唤醒MCU的,只有特定中断才能唤醒。WFI的具体唤醒条件如下:

在这里插入图片描述

     WFE的唤醒和WFI稍有不同,其中一个SEV-ON-PEND的bit位对其影响很大,如果这个bit位置位,无论什么中断产生并被挂起,都会唤醒处在WFE的MCU。具体唤醒条件如下:

在这里插入图片描述

     注:当SEV-ON-PEND置位,只会在挂起位从0变到1的上升沿才会产生唤醒事件唤醒WFE,如果新产生的中断挂起位已经置位,那么就不会产生唤醒事件了

1.4.5 休眠扩展/唤醒延迟

     对于一些MCU,有些低功耗模式可能会通过某种手段极大地降低功耗,如减小对SRAM的供电(SRAM分区供电)并关掉Flash存储器的供电。有些情况下,中断请求产生后,硬件电路需要时间来恢复,因此中断实际执行的时间会被延迟。Cortex-M3/M4处理器提供了一组握手信号,利用这些信号,只有在其他部分准备好以后,处理器才会被唤醒。==该特性仅对芯片设计者可见,对软件则不可见。==使用该特性时候,会发觉中断等待时间变长了。

1.4.6 唤醒中断控制器(WIC)

     WIC => Wakeup Interrupt Controller。系统进入深度睡眠期间,当处理器的所有时钟信号都被关闭后,NVIC无法检测到新产生的中断请求。为了解决这个问题,Cortex-M3版本r2p0之后引入了一个WIC的硬件单元,这个WIC是没有可编程寄存器的。芯片设计者可以配置WIC的中断检测逻辑,以支持异步操作。WIC一端连着电源管理单元PMU,一端连着NVIC,中断屏蔽信息在刚进入深度睡眠模式前由NVIC发送到WIC中,当产生中断时,WIC检测到该请求并通知PMU恢复时钟,然后处理器唤醒并通知PMU恢复时钟,一切准备就绪再去处理中断。

在这里插入图片描述

1.4.7 状态保持功率门(SRPG)

     SRPG => State Remain Power Gate。此高级技术可以极大地降低芯片的漏电流。在SRPG中,寄存器(在IC术语中通常被称为触发器)中状态保持单元是独立供电的,进入深度睡眠的时候,状态保持单元不掉电。具体的逻辑电路如下:

在这里插入图片描述

     SRPG虽然可以保存掉电前的状态,但是深度睡眠的时候仍然无法检测中断,因此还是需要WIC。对于SRPG设计,由于处理器的状态得到了保留,它可以从程序暂停的地方继续执行,这样就不会每次上电都由代码来恢复寄存器。

     WIC只会用在深度睡眠模式(此时系统控制寄存器中的SLEEPDEEP置位)。普通的休眠模式不会使能WIC操作,也不应该触发SRPG掉电操作。

     另外还有一点需要注意,当使用调试器链接系统时,调试器可能会禁止一些低功耗操作。例如,微控制器可能会被设计为,当连接调试器时,时钟会在深度睡眠模式继续运行,这样即使应用代码试图使用深度睡眠模式,调试器也可以检测系统状态。

在这里插入图片描述

1.4.8 事件通信接口

     WFE指令可由Cortex-M处理器中一个名为RXEV(接收事件)输入信号唤醒。处理器中还有一个名为TXEV(发送事件)的输出信号,当执行SEV(发送事件)指令时,TXEV会输出一个周期的脉冲信号,此时RXEV就检测到输出信号,就会唤醒处于WFE的处理器。事件通信接口的目的就是,在特定事件发生前,处理器处于休眠状态,此时可以节省功耗,事件通信接口具有多种用法。

  • 允许外设和处理器之间通信
  • 语序多个处理器之间通信

1.4.8.1 外设与处理器之间通信

     对于具有DMA的单处理器设计,处理器会利用DMA控制器进行存储器复制操作以提高性能。如果处理器用轮询来检测DMA是否完成,就会浪费能量且由于部分带宽被处理器占用而降低了性能。如果DMA操作完成之后,能够发送一个事件,这样在等待DMA结果的时候就可以用WFE进行休眠,从而节省功耗。当然,也可以将DMA输出的DMA_Done信号连接到NVIC,并利用中断机制来唤醒处理器。具体的代码如下:

setup_DMA_memcpy(src, dest, length);
while((get_DMA_status() & DMA_DONE_MASK) == 0)
{
    WFE(); // 进入睡眠,会被事件或中断唤醒,如果是DMA结束的信号,就退出睡眠并退出循环,如果其他唤醒源,退出WFE但是依然会循环并在此进入WFE
}

在这里插入图片描述

1.4.8.2 多处理器之间通信

     多处理器间的通信同样可以基于事件机制,如果处理器A为了确定处理器B的任务处理是否结束,需要查询共用存储空间中的用一个变量,处理器A可能要等待较长的时间,而且这样还会浪费能量。如果A和B之间用事件机制来通信,那么就可在在等待的过程中进入WFE,这样就会减少功耗。

  • 轮序机制

在这里插入图片描述

  • 事件机制

在这里插入图片描述

在这里插入图片描述

     注:这种任务同步无法保证系统中的多处理器开始任务执行时的精确同步。

1.4.8.3 信号量和互斥体

     事件通信接口的另一个用途就是信号量和互斥体,如果信号量机制未使用事件通信特性,处理器可能会轮询检测锁定变量是否空闲,使用了事件接口就可用WFE来等。

// 获取MUTEX/信号量锁的函数
void get_lock_with_WFE(volatile int *Lock_Variable)
{
    int status;
    do
    {
        while(_LDREXW(&Lock_Variable) != 0)   // 等待锁定,如果没拿到锁就WFE
        {
            _WFE();
        }
        status = _STREXW(1, &Lock_Variable);   // 获取到锁之后,利用STREXW强制把Lock_Variable设为1
    }while(status != 0);
    
    _DMB();
    return;
}

void free_lock(volatile int * Lock_Variable)
{
    _DMB();
    Lock_Variable = 0;  // 释放锁住的变量
    _SEV();
    return;
}

     对于具有嵌入式OS的系统,信号量操作可能会有很大不同, 这是因为在OS等待一个信号量时,它可能会将当前任务暂停并转而执行其他任务。

1.4.9 退出时的休眠特性

     这个特性主要用在中断驱动的应用中,使能了这个特性,就会减少压栈和出栈。==这个特性应该在初始化阶段结束时使能,否则若在初始化阶段产生了中断事件且退出时休眠特性已使能,则处理器会在初始化阶段还没有完全完成时进入休眠。

在这里插入图片描述

1.5低功耗指令的用法

1.5.1 WFI的用法

     WFI一般就只会用在中断驱动的应用中,如果中断事件的时序不可控,就无法确定是否能唤醒处理器了,具体参照P211页WFI的用法。

1.5.2 WFE的用法

     WFE指令长用于空循环,其中包括RTOS设计中的空循环。下面是WFE的使用示例:

volatile int timer0irq_flag;

timer0irq_flag = 0;
set_timer();
NVIC_EnableIRQ(Timer0_IRQn);
while(timer0irq_flag == 0) // 表示中断没有来,即等中断
{
    _WFE();
};
Toggle_LDE();
  • 第一种情况:Timer0在进入WFE之后才会来。由于之前的中断等等的事件,事件标志位已经置位,如果timer中断还没来,第一次走while循序会进入WFE,但是不会睡眠,而只会把事件标志位清掉,第二次循环进入的时候才会进入睡眠。
  • 第二种情况:Timer0在进入while循环前已经被触发了,此时软件标志位timer0irq_flag = 1,因此不会进入while循环,不会进入WFE。
  • 第三种情况:Timer0在while循环比较之后在WFE之前来了,此时内部事件寄存器已经被置位,这一次执行WFE是清除事件标志位,然后又去while判断,此时软件标志位已经是1了,因此就不会再进入循环了,直接点亮LED灯。

     ==注意:对于Cortex-M3的r0p0~r2p0版本,处理器自身的缺陷会影响运行时内部事件寄存器的设置。要解决这个问题,可以在中断处理中插入一个SEV指令,这样中断就可以正确地设置中断寄存器了。

_SEV(); // 设置内部事件寄存器
_WFE(); // 由于事件寄存器已经置位,只是清除事件寄存器
_WFE(); // 这一次才是真正的进入休眠

     若需要SEVONPEND特性,也应该使用WFE指令

开发低功耗应用的注意点

    1. 选择合适的微控制器:除了考虑电器特性,考虑项目所需要的存储器大小也是很必要的,如果实际使用的位控制器的flash或sram比所需要的大,那么存储器就会带来更多的功耗。
    1. 运行合适的时钟频率:多数应用并不需要很高的时钟频率,因此可以通过降低时钟频率来降低系统的功耗。有时,可能需要衡量一下应该让系统运行得快些然后进入休眠,还是运行慢些以降低动态功耗。
    1. 选择合适的时钟源:有些微控制器提供了等多个时钟源,他们的频率和精确性存在差异。在实际应用中,由于外部石英晶振可能会带来比较大的功耗,因此使用可以降低功耗的内部时钟源可能会更好。
    1. 关闭未使用的时钟信号:许多现代微控制器都允许关闭未使用外设的时钟,或者多数情况是,在使用前再将时钟信号打开。
    1. 利用时钟系统特性:有些MCU为系统的不同部分提供了各种时钟分频器,可以利用他们降低外设或外设总线等的速度。
    1. 供电设计:一个良好的电源设计是提高能耗效率的另一个关键因素。
    1. 在SRAM中运行程序:如果SRAM够大可以在SRAM中运行整个程序,这样就可以关掉flash,减少功耗。但是SRAM价格昂贵,因此一般SRAM很难放的下整个程序,这个中情况可以将程序中常用的部分复制到SRAM,而且只在执行程序中剩余部分时打开flash存储器。
    1. 使用正确地I/O端口配置:有些MCU具有可配置的I/O,可以利用降低I/O的驱动电荷和转换速率来降低I/O接口逻辑的功耗。
    1. 休眠期间关掉Flash存储器:若要使用的休眠模式不支持自动关闭flash存储器,且SRAM不足以保存整个应用,那么可以只复制休眠进入和休眠退出的函数到SRAM中,这样,flash存储器可在休眠期间被手动关闭,休眠进入和退出的函数就在SRAM中跑起。具体的流程如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ewmQdGr1-1573798816375)(C72712910B034CF69904ACEA4314DF1F)]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cortex-M芯片低功耗开发 的相关文章

  • Cortex-M3利用SVC中断调用系统服务的例子

    SVC xff08 系统服务调用 xff0c 亦简称系统调用 xff09 和PendSV xff08 可悬起系统调用 xff09 xff0c 它们多用在上了操作系统的软件开发中 SVC用于产生系统函数的调用请求 例如 xff0c 操作系统通
  • Cortex-A7中断控制器GIC

    Cortex A7中断控制器GIC 中断号 芯片内部的中断都会引起IRQ InterruptGIC将所有的中断源 最多1020个中断ID 分为三类 SPI SharedPeripheralInterrupt 共享中断 xff0c 外部中断都
  • Error: Flash Download failed - “Cortex-M3“错误解决办法

    在使用STM32F103的时候 xff0c 使用DAP仿真器下载程序 xff0c 出现下载不了的情况 xff0c 错误信息如下 xff1a 输出框里打印信息如下 xff1a No Algorithm found for 08000000H
  • Cortex-M芯片低功耗开发

    文章目录 芯片的低功耗1 1 低功耗的测量数据1 2 低功耗的系统特性1 3 低功耗的系统需求1 3 1 Cortex M3和Cortex M4处理器的低功耗特点 1 4 低功耗系统特性1 4 1 休眠模式1 4 2 系统控制寄存器 xff
  • Cortex M4 SVC 中断

    Cortex SVC 中断 SVC 系统管理调用 异常优先级为1 xff0c SVC异常是由SVC指令触发 也可以直接设置NVIC寄存器触发异常 应用程序工作在非特权访问模式 xff0c 当需要特权模式访问系统资源时 xff0c 可以使用S
  • Cortex-M4和Cortex-M7中的SIMD指令

    SIMD指令简介 单指令多数据流 xff0c 即SIMD xff08 Single Instruction xff0c Multiple Data xff09 指一类能够在单个指令周期内同时处理多个数据元素的指令集 xff0c 利用的是数据
  • uC/OSIII在Cortex-M3的任务切换和中断退出分析

    uC OSIII在任务中执行OSSched相关的函数和在中断退出后都会开始执行调度 xff0c 这是它的调度机制 而按uC OSIII书中所讲 xff0c 普通任务切换和从中断中退出后的任务切换应该是不同的函数 xff0c 因为普通任务切换
  • Atmel Cortex-A5跑Nuttx是如此酸爽

    开源RTOS Nuttx已经支持Atmel SAMA5系列MPU xff0c 而且看到Nuttx还支持Graphic API xff0c 决定尝试在Ateml SAMA5D3 Xplained上跑下Nuttx Nuttx是一款开源RTOS
  • 集成Cortex-M0内核-- Integration and Implementation Manual手册学习

    根据使用场景 xff0c 配置并集成一个Cortex M0的内核 xff0c 暂时不涉及的实现的部分 目录 阅读手册 Chapter1 Introduction 1 1 About the processor 1 2 About integ
  • Cortex-M0中断控制和系统控制

    目录 1 NVIC和系统控制块特性2 中断使能和清除使能3 中断挂起和清除挂起4 中断优先级5 中断控制的通用汇编代码使能和禁止中断设置和清除中断挂起状态设置中断优先级 6 异常屏蔽寄存器 xff08 PRIMASK xff09 7 中断输
  • could not stop cortex-m device 问题

    出现问题原因 xff1a 调试程序过程中mdk突然奔溃 xff0c 之后就再也下载程序失败 xff0c 但是读取swd IDCODE OK 下载程序就报错 个人觉得应该是单片机内部保护了 问题图 问题处理办法 先检查3 3v和GND是否短路
  • 《Cortex-M0权威指南》之Cortex-M0技术综述

    Cortex M0权威指南 之Cortex M0技术综述 转载请注明来源 xff1a cuixiaolei的技术博客 Cortex M0 处理器简介 1 Cortex M0 处理器基于冯诺依曼架构 xff08 单总线接口 xff09 xff
  • Freertos Cortex-M3上下文切换

    上下文切换是操作系统实现虚拟化的核心功能 xff0c 操作系统对任务的管理通过上下文切换完成 Freertos 在STM32F103上的上下文切换是本文介绍的内容 STM32F103 采用 Cortex M3 内核 上下文切换的本质是对现场
  • ARM Cortex-M4和Cortex-M0+中断优先级及嵌套抢占问题

    转自 xff1a http blog chinaaet com jihceng0622 p 5100001238 坐在上海回北京的高铁上 xff0c 漫长的旅途着实让人感到无聊 xff08 没买到直达的高铁 xff0c 只能慢悠悠的走一站停
  • ARM Cortex M4 SVC指令作用

    xff08 1 xff09 SVC指令 xff1a 摘自 http infocenter arm com help index jsp topic 61 com arm doc dui0203ic Cacdfeci html 与更早版本的
  • cortex-m3中寄存器

    简介 Cortex M3 是一个 32 位处理器内核 内部的数据路径是 32 位的 xff0c 寄存器是 32 位的 xff0c 存储器接 口也是 32 位的 CM3 采用了哈佛结构 xff0c 拥有独立的指令总线和数据总线 xff0c 可
  • ARM Cortex-M0+中断机制与中断编程步骤

    中断基础知识 为什么需要使用中断 xff1f 如果通过查询接收标志查看一个字节是否收到 xff0c 则需要时刻花费CPU等资源 但中断机制能够在收到一个字节后 xff0c 通知CPU把收到的字节取走 异常 xff1a CPU强行从正常运行的
  • 关于“ErrorFlash Download failed“Cortex-M3”的解决办法

    首先 xff0c 将仿真器连接电脑 xff0c 然后打开KEIL xff0c 点击FLash gt Erase xff0c 擦除Flash试一下 如果擦除不成功 xff0c 那么应该是的STM32的Flash被锁了 xff0c 要解锁一下
  • 嵌入式平台memcpy实验总结

    1 概述 最近项目中性能比较吃紧 经过跟踪发现 memcpy操作的性能存在一定问题 于是 做了一些尝试去验证一些想法 记录一下 环境 MDK530 Cortex M0芯片 主频80MHz左右 2 优化手段 在优化之前 我们要先确定基本的性能
  • Vscode EIDE+Cortex Debug搭建STM32开发仿真环境

    Embedded IDE 特色 支持8051 AVR STM8 Cortex M 0 0 3 4 7 RISC V Universal Gcc项目开发 支持导入 KEIL 项目 仅限 KEIL 5 及更高版本 支持安装标准 KEIL 芯片支

随机推荐

  • win10共享打印机(连接共享打印机的两种方法,IP地址变化的连接方法)

    一 首先电脑连接打印机 xff0c 把所连接的打印机设置为共享 xff0c 如下图所示 xff1a 先打开电脑设置 xff0c 然后点击设备 打印机和扫描仪 xff0c 打开如下界面 点击管理 打印机属性 xff0c 会出现如下界面 点击共
  • (Python)Pandas reset_index()用法总结

    Pandas是一个数据处理的库 xff0c 今天我们来学习reset index 这个函数的用法 pandas DataFrame reset index 函数作用 xff1a 重置索引或其level 重置数据帧的索引 xff0c 并使用默
  • 用Python批量修改图片名称(后缀)

    当我们需要修改批量即几百幅图片的名称或后缀时 xff0c 如果一个一个图片名称去重命名或是修改的话工作量就会很大 作为一名程序员 xff0c 当然是要通过代码去解决这些繁琐的事情 下面是用python代码来实现批量修改图片名称的代码 xff
  • git基本操作介绍

    简介 本文会简单介绍git的基本操作 这篇文章适合对git的安装 使用 运行环境 工作原理有一定了解的人员阅读 xff1b 对于初学者 xff0c 可以先参考以下文章 xff1a 最新git安装教程 windows系统git安装教程 git
  • Anaconda创建跟别人环境配置一样的虚拟环境(coda env creat -f environment.yml)

    当我们跑别人在github上的代码时 xff0c 往往需要配置跟作者一样的环境 当作者导出自己的环境配置时 xff0c 一般都是 yml文件 xff0c 这时候需要输入命令行来实现配置一模一样的环境 导出的yml文件一般配置如下 xff1a
  • 计算机视觉代码学习

    前言 自从2012年Hinton提出Alexnet以来 xff0c 深度学习 计算机视觉 xff08 CV xff09 就成为一个非常热门的赛道 从学术界到工业界 xff0c 纷纷掀起一股人工智能的浪潮 特别是学术界 xff0c 计算机视觉
  • 如何准备大学生电子设计竞赛

    大学生电子设计竞赛难度中上 xff0c 一般有好几个类型题目可以选择 xff0c 参赛者可以根据自己团队的能力 优势去选择合适自己的题目 xff0c 灵活自主空间较大 参赛的同学们可以在暑假好好学习相关内容 xff0c 把往年的题目拿来练练
  • 聊聊ChatGPT

    ChatGPT 这几周科技圈最火的当属ChatGPT xff0c 自媒体中十篇有九篇都是关于ChatGPT的 ChatGPT上可知天文 xff0c 下可知地理 xff0c 还可写论文 搞代 写小说 xff0c 可谓 全能型选手 自从去年11
  • 修改简历有用吗

    看情况 xff0c 一般都是很有用哒 xff01 简历修改会突出你的重点和优点 xff0c 优化你的简历内容 xff0c 让面试官一眼看到简历就被吸引了 xff01 如以上图片所示
  • 运行Python时出现SyntaxError: EOL while scanning string literal解决方法

    当运行Python时 xff0c 出行SyntaxError EOL while scanning string literal 一般是语法出现错误 xff0c 看一下是不是哪里忘记添加符号或是分号 xff1a 这些没打
  • 数据结构选择练习题(有解析)

    前言 已经到期末了 xff0c 昨天进行了一次马原考试 xff0c 那时候挺紧张的 xff0c 那时候虽然写完了试卷 xff0c 但是有4道题是乱写的 xff0c 因为我刚好没有背 xff0c 希望不会挂科吧 然后今天呢 xff0c 就开始
  • 论文阅读_异常检测综述

    英文题目 xff1a Anomaly Detection A Survey 中文题目 xff1a 异常检测综述 论文地址 xff1a https readpaper com paper 2122646361 领域 xff1a 异常检测 发表
  • 解决Mybatis-Plus分页插件无效

    1 导入依赖 span class token tag span class token tag span class token punctuation lt span dependencies span span class token
  • 一、FreeRTOS任务调度相关函数详解

    文章目录 1 FreeRTOS任务调度及相关函数分析1 1 任务创建过程分析1 1 1 任务创建函数分析1 1 2 任务初始化函数分析1 1 3 任务堆栈初始化分析1 1 4 添加任务到就绪列表 1 2 任务删除过程分析1 3 任务挂起过程
  • linux的exit和_exit

    进程退出 退出一个进程有多种方式 xff1a 正常退出 xff1a 在main函数里return 在进程里面调用exit exit 在进程的最后一个子线程调用pthread exit 异常退出 xff1a 被信号 xff08 9 15 xf
  • 三、任务切换之PendSV异常

    文章目录 PendSV异常1 没有PendSV异常的任务切换2 有PendSV异常的任务切换2 1 系统调用引起的任务切换2 2 systick中断引起任务切换2 3 PendSV异常处理函数2 4 寻找下一个要运行的任务2 5 时间片调度
  • Cortex-M系列中断和异常(一)

    文章目录 1 中断与异常1 1 异常的类型1 2 异常及中断的管理1 2 1 中断的一般使用方法 1 3 优先级的定义1 4 向量表和向量表的重定义1 4 1 向量表重定向的应用场景 1 5 中断输入和挂起行为1 5 1 中断请求的类型 1
  • Cortex-M系列中断和异常(三)

    文章目录 Cortex M系列中断和异常1 1 SCB中的寄存器1 1 1 中断控制和状态寄存器 xff08 SCB gt ICSR xff09 1 1 2 向量表偏移寄存器 xff08 SCB gt VTOR xff09 1 1 3 应用
  • Cortex-M系列中断和异常(四)

    文章目录 1 中断及异常的注意事项1 1 中断及异常的优先级配置1 2 中断与栈空间的关系1 3 向量表重定向情况1 4 软件中断1 5 ARM架构及中断 2 函数调用与异常处理的过程2 1 函数调用过程2 2 异常处理过程2 2 1 栈帧
  • Cortex-M芯片低功耗开发

    文章目录 芯片的低功耗1 1 低功耗的测量数据1 2 低功耗的系统特性1 3 低功耗的系统需求1 3 1 Cortex M3和Cortex M4处理器的低功耗特点 1 4 低功耗系统特性1 4 1 休眠模式1 4 2 系统控制寄存器 xff