GD32F103VE深度睡眠与唤醒

news2024/11/25 15:52:10

GD32F103VE深度睡眠与唤醒,执行WFI指令或执行1次WFE指令,命令CPU进入深度睡眠模式。

电源管理单元有3种省电模式:睡眠模式,深度睡眠模式和待机模式;
进入深度睡眠的步骤如下:
1,配置SLEEPDEEP=1
2,配置STBMOD=0
3,执行WFI指令或执行1次WFE指令,命令CPU进入深度睡眠模式。
普通的睡眠模式需要执行两次WFE指令(有点奇怪,实测如此,不清楚原因),命令CPU进入深度睡眠模式。

深度睡眠的结果:
1,关闭Cortex-M3的内核时钟;
2,关闭AHB时钟:SRAM,DMA,FMC,SysTick,SDIO
3,关闭APB时钟:Timer0~Timer13,ADC,APB1外设,APB2外设
4,IRC8M内部RC的8MHz振荡器被关闭;
5,HXTAL外部高速振荡器被关闭;
6,PLL锁相环被关闭;
7,IRC40K内部RC的40KHz振荡器工作,FWDGT独立看门狗定时器启动时会选择IRC40K作为时钟源;
8,LXTAL外部低速振荡器32.768Hz工作,原因是RTC产生报警会让CPU退出待机模式;
9,LDO输出1.2V

EXTI触发源:I/O管脚的16根线和内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。
通过配置GPIO模块的AFIO_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源;
EXTI可以产生中断,也产生事件信号
深度睡眠模式唤醒:
1,采用WFI_CMD进入深度睡眠模式,任何EXTI中断都可以唤醒;
2,采用WFE_CMD进入深度睡眠模式,如果SEVONPEND=0,则任何EXTI事件都可以唤醒;
3,采用WFE_CMD进入深度睡眠模式,如果SEVONPEND=1,则任何中断都可以唤醒;

退出深度睡眠模式后,CPU使用IRC8M内部RC的8MHz振荡器;

#include "DeepSleepMode.h"
#include "delay.h"

/*
电源管理单元有3种省电模式:睡眠模式,深度睡眠模式和待机模式;
进入深度睡眠的步骤如下:
1,配置SLEEPDEEP=1
2,配置STBMOD=0
3,执行WFI指令或执行1次WFE指令,命令CPU进入深度睡眠模式。
而普通的睡眠模式需要执行两次WFE指令(有点奇怪,实测如此,不清楚原因),命令CPU进入深度睡眠模式。

深度睡眠的结果:
1,关闭Cortex-M3的内核时钟;
2,关闭AHB时钟:SRAM,DMA,FMC,SysTick,SDIO
3,关闭APB时钟:Timer0~Timer13,ADC,APB1外设,APB2外设
4,IRC8M内部RC的8MHz振荡器被关闭;
5,HXTAL外部高速振荡器被关闭;
6,PLL锁相环被关闭;
7,IRC40K内部RC的40KHz振荡器工作,FWDGT独立看门狗定时器启动时会选择IRC40K作为时钟源;
8,LXTAL外部低速振荡器32.768Hz工作,原因是RTC产生报警会让CPU退出待机模式;
9,LDO输出1.2V

EXTI触发源:I/O管脚的16根线和内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。
通过配置GPIO模块的AFIO_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源;
EXTI可以产生中断,也产生事件信号
深度睡眠模式唤醒:
1,采用WFI_CMD进入深度睡眠模式,任何EXTI中断都可以唤醒;
2,采用WFE_CMD进入深度睡眠模式,如果SEVONPEND=0,则任何EXTI事件都可以唤醒;
3,采用WFE_CMD进入深度睡眠模式,如果SEVONPEND=1,则任何中断都可以唤醒;

退出深度睡眠模式后,CPU使用IRC8M内部RC的8MHz振荡器;
*/

void Enter_DeepSleepMode0_Use_WFI_CMD(void);
void Enter_DeepSleepMode1_Use_WFE_CMD(void);
void Enter_DeepSleepMode2_Use_WFE_CMD(void);

//函数功能:使用WFI命令使CPU进入深度睡眠模式;任何EXTI中断都可以唤醒;
//唤醒方式: 外部中断;若没有唤醒,再次烧录程序,就会无法烧录;
//测试OK
void Enter_DeepSleepMode0_Use_WFI_CMD(void)
{
	rcu_periph_clock_enable(RCU_PMU);//使能"电源管理单元时钟"外设时钟
	pmu_to_deepsleepmode(PMU_LDO_LOWPOWER,WFI_CMD);
  //PMU_LDO_LOWPOWER命令CPU进入深度睡眠,LDO为低功耗模式	
	//注意:WFI need EXTI interrupt wakeup
}

//函数功能:在SEVONPEND=0时,使用WFE命令使CPU进入深度睡眠模式,任何EXTI事件都可以唤醒;
//测试OK
void Enter_DeepSleepMode1_Use_WFE_CMD(void)
{
	rcu_periph_clock_enable(RCU_PMU);//使能RCU_PMU外设时钟
	system_lowpower_reset(SCB_LPM_WAKE_BY_ALL_INT);//设置SEVONPEND=0
	pmu_to_deepsleepmode(PMU_LDO_NORMAL,WFE_CMD);
	//SLEEPDEEP=1,STBMOD=0,使用WFE命令或执行SEV事件,使CPU进入深度睡眠,但LDO工作
  //唤醒:若通过WFE进入,来自EXTI的任何事件可唤醒,本程序使用外部事件;
}

//函数功能:在SEVONPEND=1时,使用WFE命令使CPU进入深度睡眠模式,任何中断都可以唤醒,如UART,Timer等
//测试OK
void Enter_DeepSleepMode2_Use_WFE_CMD(void)
{
	rcu_periph_clock_enable(RCU_PMU);//使能RCU_PMU外设时钟
	system_lowpower_set(SCB_LPM_WAKE_BY_ALL_INT);//设置SEVONPEND=1
	pmu_to_deepsleepmode(PMU_LDO_NORMAL,WFE_CMD);
	//SLEEPDEEP=1,STBMOD=0,使用WFE命令或执行SEV事件,使CPU进入深度睡眠,但LDO工作
  //唤醒:若通过WFE进入,SEVONPEND=1时,中断可唤醒,本程序使用USART0
}

 

#include "KEY.h"
#include "DeepSleepMode.h"
#include "LED.h"
#include "delay.h"
#include "SYSCLKConfig.h"

/*
GD32F103VE外部中断线线0~15,对应外部IO口的输入中断。
它有7个中断向量,外部中断线0 ~ 4分别对应EXTI0_IRQn ~ EXTI4_IRQn中断向量;
外部中断线 5 ~ 9 共用一个 EXTI9_5_IRQn中断向量;外部中断线10~15 共用一个EXTI15_10_IRQn中断向量。
7个中断向量:EXTI0_IRQn,EXTI1_IRQn,EXTI2_IRQn, EXTI3_IRQn, EXTI4_IRQn,EXTI9_5_IRQn和EXTI15_10_IRQn。
这7个中断向量对应7个中断服务函数:
EXTI0_IRQHandler();
EXTI1_IRQHandler();
EXTI2_IRQHandler();
EXTI3_IRQHandler();
EXTI4_IRQHandler();
EXTI9_5_IRQHandler();
EXTI15_10_IRQHandler();
*/

void ExternalInterrupt7_Init(void);

//函数功能:初始化ExternalInterrupt7
void ExternalInterrupt7_Init(void)
{
	rcu_periph_clock_enable(RCU_GPIOE);//使能GPIOE时钟,enable GPIO clock
	rcu_periph_clock_enable(RCU_AF);//使能复用功能时钟

	gpio_init(GPIOE, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);//将GPIOE7设置为浮空输入

	nvic_irq_enable(EXTI5_9_IRQn, 2U, 0U);//设置EXTI5_9_IRQn的中断优先级,抢占优先级为2,子优先级为0
	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOE, GPIO_PIN_SOURCE_7);
	//设置GE7引脚为外部中断源,select GPIO pin exti sources
  exti_init(EXTI_7, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
	//配置外部中断线使用外部中断7(EXTI_7)
	//中断模式为外部中断(EXTI_INTERRUPT)
	//中断触发方式为下降沿中断(EXTI_TRIG_FALLING)
	exti_interrupt_flag_clear(EXTI_7);//清除外部中断7标志
	exti_interrupt_enable(EXTI_7);//使能外部中断7(EXTI_7)
	exti_event_enable(EXTI_7);//使能外部事件7(EXTI_7)
}

//this function handles external lines 5 to 9 interrupt request
//函数功能:外部中断5~外部中断9的中断服务函数
void EXTI5_9_IRQHandler(void)
{
	FlagStatus ret;

	ret=exti_interrupt_flag_get(EXTI_7);
	//读取外部中断7(EXTI_7)的中断标志
	//get EXTI lines flag when the interrupt flag is set
	if(RESET != ret)
	{
		//退出深度睡眠模式后,CPU使用IRC8M内部RC的8MHz振荡器;
		MySystemClockInit(1,1);//恢复使用外部晶振,带有PLL工作,系统时钟108MHz
	}
	exti_interrupt_flag_clear(EXTI_7);//清除外部中断7标志
}
#include "SYSCLKConfig.h"

void RCU_IRC8M_Clock_Out_Init(void);
void RCU_HXTAL_Clock_Out_Init(void);
void RCU_SYS_Clock_Out_Init(void);
void MySystemClockInit(uint8_t tRCClockSource,uint8_t use_pll);

//函数功能:内部RC8MHz振荡器时钟输出
void RCU_IRC8M_Clock_Out_Init(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);//使能GPIOA时钟,enable GPIO clock
	gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
	//将GPIOA8设置为复用功能IO推挽输出,初始化时钟输出引脚
	//CK_OUT0为时钟输出引脚,映射到PA8引脚
	rcu_ckout0_config(RCU_CKOUT0SRC_IRC8M);
	//设置CK_OUT0引脚(PA8)的输出时钟源为CK_IRC8M(内部RC8MHz)时钟
}

//函数功能:外部8MHz振荡器时钟输出
void RCU_HXTAL_Clock_Out_Init(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);//使能GPIOA时钟,enable GPIO clock
	gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
	//将GPIOA8设置为复用功能IO推挽输出,初始化时钟输出引脚
	//CK_OUT0为时钟输出引脚,映射到PA8引脚
	rcu_ckout0_config(RCU_CKOUT0SRC_HXTAL);
	//设置CK_OUT0引脚(PA8)的输出时钟源为CK_HXTAL(外部8MHz)时钟
}

//函数功能:将CK_OUT0映射到PA8引脚,输出系统时钟;
void RCU_SYS_Clock_Out_Init(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);//使能GPIOA时钟,enable GPIO clock
	gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);
	//将GPIOA8设置为复用功能IO推挽输出,初始化时钟输出引脚
	//CK_OUT0为时钟输出引脚,映射到PA8引脚
	rcu_ckout0_config(RCU_CKOUT0SRC_HXTAL);
	//设置CK_OUT0引脚(PA8)的输出时钟源为CK_HXTAL(外部8MHz)时钟
}

//MySystemClockInit(0,1);//使用内部RC振荡器,带有PLL工作,系统时钟108MHz
//MySystemClockInit(1,1);//使用外部晶振,带有PLL工作,系统时钟108MHz
//MySystemClockInit(0,0);//直接使用内部RC振荡器,不带PLL工作,系统时钟8MHz
//MySystemClockInit(1,0);//直接使用外部晶振,不带PLL工作,系统时钟8MHz
//函数功能:系统时钟初始化
void MySystemClockInit(uint8_t tRCClockSource,uint8_t use_pll)
{
///选择"振荡源"开始//
	if(tRCClockSource==0)//内部RC时钟
	{
	  rcu_osci_on(RCU_IRC8M);//启用"内部RC8MHz振荡器"
	  rcu_osci_stab_wait(RCU_IRC8M);//等待内部RC8MHz振荡器稳定
	}
	else//内部高速晶振时钟
	{
	  rcu_osci_on(RCU_HXTAL);//启用"外部8MHz晶振"
	  rcu_osci_stab_wait(RCU_HXTAL);//等待外部8MHz晶振振荡器稳定
	}
///选择"振荡源"结束//

///选择"PLL时钟源"开始//
	if(use_pll)//使用PLL
	{
		if(tRCClockSource==0)//内部RC时钟
	  {
	    rcu_pll_config(RCU_PLLSRC_IRC8M_DIV2,RCU_PLL_MUL27);
	    //设置内部RC8MHz输出的时钟再2分频后作为PLL输入时钟源,并设置倍频因子为27
		  rcu_osci_on(RCU_PLL_CK);//使能"PLL时钟"
		  rcu_osci_stab_wait(RCU_PLL_CK);//等待"PLL时钟"稳定
	  }
	  else
	  {
	    rcu_predv0_config(RCU_PREDV0_DIV2);//设置外部晶振输出后再进行2分频得到的时钟
	    rcu_pll_config(RCU_PLLSRC_HXTAL,RCU_PLL_MUL27);
	    //设置外部晶振8MHz输出的时钟再2分频后作为PLL输入时钟源,并设置倍频因子为27

	    rcu_osci_on(RCU_PLL_CK);//使能"PLL时钟"
	    rcu_osci_stab_wait(RCU_PLL_CK);//等待"PLL时钟"稳定
	  }
  }
///选择"PLL时钟源"结束//

///选择"系统时钟源"开始//
	if(use_pll)//使用PLL
	{
	  rcu_system_clock_source_config(RCU_CKSYSSRC_PLL);
	  //选择选择CK_PLL时钟作为系统时钟CK_SYS
  }
	else
	{
	  if(tRCClockSource==0)//内部RC时钟
	  {
	    rcu_system_clock_source_config(RCU_CKSYSSRC_IRC8M);
	    //直接选择内部RC8MHz输出的时钟CK_IRC8M作为系统时钟CK_SYS
		}
		else
		{
	    rcu_system_clock_source_config(RCU_CKSYSSRC_HXTAL);
	    //直接选择外部晶振时钟输出的CK_HXTAL时钟作为系统时钟CK_SYS
	  }
  }
///选择"系统时钟源"结束//
}
#include "LED.h"

void LED_Init(void);

//函数功能:初始化MCU_Led
void LED_Init(void)
{
	rcu_periph_clock_enable(RCU_GPIOD);//使能GPIOD时钟,enable GPIO clock

	gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
	//将GPIOD15设置为输出上拉

	MCU_Led_Off();
//	GPIO_BC(GPIOD) = GPIO_PIN_15;//清除GPIOD15输出,GPIO bit clear register
}
#ifndef __LED_H
#define __LED_H

#include "gd32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t

#define MCU_Led_Off()  GPIO_BOP(GPIOD)=GPIO_PIN_15  //GD15输出高电平
#define MCU_Led_On() GPIO_BC(GPIOD)=GPIO_PIN_15   //GD15输出低电平
#define MCU_Led_Toggle() gpio_bit_write( GPIOD,GPIO_PIN_15,(bit_status)((1-gpio_input_bit_get(GPIOD,GPIO_PIN_15))) )
//GD15取反输出电平

extern void LED_Init(void);

#endif

main.c如下:

#include "gd32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t
#include "delay.h"

#include "LED.h"
#include "KEY.h"
#include "DeepSleepMode.h"
#include "SYSCLKConfig.h"

//PC13仅可以作为RTC功能引脚
//PC14和PC15可以作为通用I/O口或外部32.768KHz低速晶振引脚
int main(void)
{
	//MySystemClockInit(1,1);

	//NVIC_PRIGROUP_PRE4_SUB0:抢占优先级为4bit(取值为0~15),子优先级为0bit(没有响应优先级)
	//NVIC_PRIGROUP_PRE3_SUB1:抢占优先级为3bit(取值为0~7),子优先级为1bit(取值为0~1)
	//NVIC_PRIGROUP_PRE2_SUB2:抢占优先级为2bit(取值为0~3),子优先级为2bit(取值为0~3)
	//NVIC_PRIGROUP_PRE1_SUB3:抢占优先级为1bit(取值为0~1),子优先级为3bit(取值为0~7)
	//NVIC_PRIGROUP_PRE0_SUB4:抢占优先级为0bit(没有抢占优先级),子优先级为3bit(取值为0~15)
	nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);//设置系统中断优先级"抢占优先级为4bit,子优先级为0bit"

  INTX_ENABLE();//开启所有中断

	LED_Init();//初始化MCU_Led

	delay_init();//系统时钟配置

	ExternalInterrupt7_Init();//初始化ExternalInterrupt7


//	Enter_DeepSleepMode0_Use_WFI_CMD();//使用WFI命令使CPU进入深度睡眠模式;任何EXTI中断都可以唤醒;
//  Enter_DeepSleepMode1_Use_WFE_CMD();//在SEVONPEND=0时,使用WFE命令使CPU进入深度睡眠模式,任何EXTI事件都可以唤醒;
  Enter_DeepSleepMode2_Use_WFE_CMD();//在SEVONPEND=1时,使用WFE命令使CPU进入深度睡眠模式,任何中断都可以唤醒,如UART,Timer等

//PE7中断唤醒后,执行下面的代码//
	while(1)//唤醒后,则灯闪烁
	{
		delay_ms(500);
		MCU_Led_Toggle();
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/845042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[K8S:命令执行:权限异常:解决篇]:通过更新kubeconfig配置相关信息

文章目录 一:场景复现:1.1:关键信息:1.2:全异常日志输出: 二:解决流程:2.1:更新 kubeconfig:2.1.1:执行命令: 2.2:再次执行…

Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP

一对一音视频通话使用场景 一对一音视频通话都需要稳定、清晰和流畅,以确保良好的用户体验,常用的使用场景如下: 社交应用:社交应用是一种常见的使用场景,用户可以通过音视频通话进行面对面的交流;在线教…

Android google admob Timeout for show call succeed 问题解决

项目场景: 项目中需要接入 google admob sdk 实现广告商业化 问题描述 在接入Institial ad 时,onAdLoaded 成功回调,但是onAdFailedToShowFullScreenContent 也回调了错误信息 “Timeout for show call succeed.” InterstitialAd.load(act…

算法刷题之路

刷题历程 - - - 基本数据结构 - - -数组、字符串、堆、栈、队列、链表739.每日温度(栈)155. 最小栈20. 有效的括号581.最短无序连续数组169. 多数元素(数组)136.只出现一次的数字128.最长连续序列560.和为k的子数组(组…

yolo使用说明

yolo-v5代码 一、环境准备 yolo-v5更像是一个工程 算法和v4差不多,只是细节有所不同 拉取代码 环境要求 因为v6用到了torch1.6中的混合精度 二、数据准备 训练使用的是coco数据集 coco数据集很大,训练起来费时间,可以直接用自己数据集来做…

三、axios+vue

Axios 导入&#xff1a; <script src"https://unpkg.com/axios/dist/axios.min.js"></script> 基础语法&#xff1a; axios.get(?keyvalue&key2value2).then(function(response){},function(err){} axios.post(地址&#xff0c;{key:value,key2…

IDEA常用插件介绍

1.CodeGlance&#xff08;CodeGlance Pro&#xff09; 安装后&#xff0c;重新启动编译器即可。 CodeGlance是一款非常好用的代码地图插件&#xff0c;可以在代码编辑区的右侧生成一个竖向可拖动的代码缩略区&#xff0c;可以快速定位代码的同时&#xff0c;并且提供放大镜功能…

DARPA TC-engagement5数据集解析为json格式输出到本地

关于这个数据集的一些基本信息就不赘述了&#xff0c;参考我之前的博客。DARPA TC-engagement5数据集官方工具可视化 官方给的工具是将解析的数据存到elasticsearch的&#xff0c;但是数据集的解压增长率非常恐怖&#xff0c;对空间要求很高。因此针对这个问题&#xff0c;我对…

win10配置rocketmq

下载地址&#xff1a;下载 | RocketMQ ,版本根据自己情况定&#xff0c;我选用的是4.7.* 1、下载后解压。D:\rocketmq-all-4.7.0-bin-release 2、需要注意一下jdk安装目录的目录名不能有空格&#xff0c;否则会报错找不到JAVA 3、环境变量新增ROCKEMQ_THOMED:\rocketmq-all-4…

MySQL语句判断数据库数据重复情况,新增、删除、不变。

判断 7月8月两个月数据对比情况&#xff0c;新增、删除(离职)、重复。 根据manager_name,gg_name,employer,department,historical_office判断出是否重复数据 -- ●- 新增或离职 -- ●- 创建临时表CREATE TABLE temp_table (SELECT id,manager_name,gg_name,employer,departme…

4用opencv玩转图像2

opencv绘制文字和几何图形 黑色底图 显示是一张黑色图片 使用opencv画圆形 #画一个圆 cv2.circle(imgblack_img,center(400,400),radius100,color(0,0,255),thickness10) 画实心圆 只需要把thickness-1。 cv2.circle(imgblack_img,center(500,600),radius50,color(0,0,255),t…

项目优化后续 ,手撸一个精简版VUE项目框架!

之前说过项目之前用的vben框架&#xff0c;在优化完性能后打包效果由原来的纯代码96M变成了56M&#xff0c;后续来啦&#xff0c;通过更换框架&#xff0c;代码压缩到了36M撒花~ 现在就来详细说说是怎么手撸一个框架的&#xff01; 方案&#xff1a; 搭建一套 vite vue3 a…

系统架构设计师-软件架构设计(7)

目录 大型网站系统架构演化 一、第一阶段&#xff1a;单体架构 到 第二阶段&#xff1a;垂直架构 二、第三阶段&#xff1a;使用缓存改善网站性能 1、缓存与数据库的数据一致性问题 2、缓存技术对比【MemCache与Redis】 3、Redis分布式存储方案 4、Redis集群切片的常见方式 …

【C++】STL map和set用法基本介绍

map、set用法简介 前言正式开始set构造erasefindswapcountlower_bound 和 upper_boundlower_boundupper_bound equal_rangepair multiusetfinderasecount map构造insert[ ][ ]底层原理 multimap两道题目前K个高频单词两个数组的交集 前言 首先&#xff0c;使用map和set最少要了…

[golang gin框架] 45.Gin商城项目-微服务实战之后台Rbac微服务之角色权限关联

角色和权限的关联关系在前面文章中有讲解,见[golang gin框架] 14.Gin 商城项目-RBAC管理之角色和权限关联,角色授权,在这里通过微服务来实现角色对权限的授权操作,这里要实现的有两个功能,一个是进入授权,另一个是,授权提交操作,页面如下: 一.实现后台权限管理Rbac之角色权限关…

pom文件---maven

027-Maven 命令行-实验四-生成 Web 工程-执行生成_ev_哔哩哔哩_bilibili 27节.后续补充 一.maven下载安装及配置 1)maven下载 2) settings文件配置本地仓库 3)settings配置远程仓库地址 4)配置maven工程的基础JDK版本 5)确认JDK环境变量配置没问题,配置maven的环境变量 验证…

C++ 派生类成员的标识与访问——虚基类

当某类的部分或者全部直接基类是从另一个共同的基类派生而来时&#xff0c;在这些直接基类中从上一级共同基类继承来的成员就拥有相同的名称。在派生类的对象中&#xff0c;这些同名数据成员在内存中同时多个副本&#xff0c;同一个函数名会有多个映射。 可以通过作用域分辨符…

CISCO MDS 9148 SAN Switch 交换机命令配置方法:

前言 CISCO MDS 9148 SAN 交换机已经停产&#xff0c;但还是要掌握一下配置的方法&#xff1a; 升级款后面 9148S 或者 9100系列&#xff0c;但配置方式基本都差不多&#xff0c;掌握一个就好&#xff1a; 高性能和极具吸引力的价值 Cisco MDS 9148S 16G 多层光纤交换机是下…

24届近5年南京理工大学自动化考研院校分析

今天学长给大家带来的是南京理工大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、南京理工大学 ​ 学校简介 南京理工大学是隶属于工业和信息化部的全国重点大学&#xff0c;学校由创建于1953年的新中国军工科技最高学府——中国人民解放军军事工程学院&#xf…

用户权限提升Sudo

目录 前言 一、su的用法 二、sudo提权 总结 前言 sudo是linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具&#xff0c;如halt&#xff0c;reboot&#xff0c;su等等。换句话说通过此命令可以让非root的用户运行只有root才有权限…