stm32 - 中断
stm32 - 中断
- 概念
- 中断向量表
- NVIC 嵌套中断向量控制器
- 优先级
- 中断
- EXTI
- 概念
- 基本结构
- 例子- 对射式红外传感器计次
- 例子 - 旋转编码器
概念
stm32 支持的中断资源(都属于外设)
- EXTI
- TIM
- ADC
- USARt
- SPI
- I2C
stm32支持的中断
内核中断
外设中断
中断通道与优先级
一个外设可能占用多个中断通道(一个EXTI外设模块,可以有多个中断通道)
每个中断通道有16个优先级
中断向量表
自定义的中断服务函数,由编译器随机指定函数地址
stm32的中断,由于硬件的限制,只能跳到固定的地址执行程序
为了能让硬件跳转到一个不固定的中断函数中, 需要在内存中定义一个地址列表,这个列表的地址是固定的,中断发生后,先跳到这个固定位置,然后在这个固定位置,由编译器加上一条跳转到中断函数的代码,这样中断就可以跳转到任意位置了
NVIC 嵌套中断向量控制器
用于同一分配中断优先级和管理中断的,NVIC是一个内核外设
一个外设可能占用多个中断通道,所以有n条线
NVIC只有一个输出口,其根据每个中断的优先级分配中断的先后顺序
然后通过仅有的一个输出口,通知CPU应该处理哪个中断

优先级
- 响应优先级:“插队看病”
- 抢占优先级:“中断嵌套”
NVIC中断优先级由优先级寄存器的4位(0~15)决定,数值越小优先级越高
高n位为抢占优先级,4-n位为响应优先级
抢占优先级高的可以中断嵌套,响应优先高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队
中断
EXTI
检测指定GPIO的电平信号
电平信号发生变化时,EXTI申请中断
概念
触发方式
上升沿(低->高)触发中断
下降沿(高->低)触发中断
双边沿(上升沿和下降沿都可以触发中断)
软件触发:引脚电平未发生变化,通过在软件中调用执行代码触发中断
GPIO
任意的GPIO口都可以当做外部中断的引脚,但是相同的pin引脚不能同时触发中断(PA0/PB0; PA1/PB1/PC1)
通道数
16个GPIO_pin,外加PVD输出,RTC闹钟,USB唤醒,以太网唤醒
触发响应方式
中断响应:申请中断,让CPU执行中断函数
事件响应: 当外部中断检测到引脚电平变化时,正常的流程是选择触发中断,也可以选择触发事件,那么外部中断的信号就不会通向CPU了,而是通向其他外设,用来触发其他外设的操作
基本结构
EXTI模块支持20个中断通道数,16个pin_脚+PVD+RTC+USB+ETH
针对GPIO,利用AFIO进行中断选择(当使用GPIO实现外部中断时)
PA0/PB0/PC0… 通过AFIO选择器选择一个作为pin_0通道
PA1/PB1/PC1… 通过AFIO选择器选择一个作为pin_1通道
PA2/PB2/PC2… 通过AFIO选择器选择一个作为pin_2通道
每个通道有16可配置优先级,通过NVIC进行优先级配置
NVIC可以进行优先级分组(抢占/响应),每个分组都有取值范围,不同的取值范围,在CPU进行中断服务的时机不同
注意16个引脚输入通道,最终只有7个输入,其中9-5和15-10便成了路两路输出通道,因此需要中断标志位判断哪一个中断过来
PB14引脚的电平信号就可以通过AFIO进入到EXTI电路中
例子- 对射式红外传感器计次
main.c
#include "stm32f10x.h"
#include "OLED.h"
#include "infrCountSensor.h"int main()
{OLED_Init();OLED_ShowString(1,1,"helloworld");OLED_ShowString(2,1,"count: ");InfrCountSensor_Init(14);while (1) {OLED_ShowNum(2,8,InfrCountSensor_GetCount(),8);}
}
infrCountSensor.h
#ifndef __INFRCOUNTSENSOR_H__
#define __INFRCOUNTSENSOR_H__
#include "stm32f10x.h"
void InfrCountSensor_Init(unsigned char pin_num);
unsigned int InfrCountSensor_GetCount();
uint16_t GPIO_Pin_Num_Set(uint16_t pin_num);
uint8_t GPIO_AFIO_Pin_Num_Select(uint16_t pin_num);
uint32_t EXTI_Line_Set(unsigned char pin_num);
#endif
infrCountSensor.c
#include "infrCountSensor.h"static unsigned int infrCountSensor_count;uint16_t GPIO_Pin_Num_Set(uint16_t pin_num)
{uint16_t GPIO_Pin_num=0;switch (pin_num){case 0: {return GPIO_Pin_0;break;}case 1: {return GPIO_Pin_1;break;}case 2: {return GPIO_Pin_2;break;}case 3: {return GPIO_Pin_3;break;}case 4: {return GPIO_Pin_4;break;}case 5: {return GPIO_Pin_5;break;}case 6: {return GPIO_Pin_6;break;}case 7: {return GPIO_Pin_7;break;}case 8: {return GPIO_Pin_8;break;}case 9: {return GPIO_Pin_9;break;}case 10: {return GPIO_Pin_10;break;}case 11: {return GPIO_Pin_11;break;}case 12: {return GPIO_Pin_12;break;}case 13: {return GPIO_Pin_13;break;}case 14: {return GPIO_Pin_14;break;}case 15: {return GPIO_Pin_14;break;}default: return GPIO_Pin_num;}}uint8_t GPIO_AFIO_Pin_Num_Select(uint16_t pin_num)
{uint8_t AFIO_Pin_num=0;switch (pin_num){case 0: {return GPIO_PinSource0;break;}case 1: {return GPIO_PinSource1;break;}case 2: {return GPIO_PinSource2;break;}case 3: {return GPIO_PinSource3;break;}case 4: {return GPIO_PinSource4;break;}case 5: {return GPIO_PinSource5;break;}case 6: {return GPIO_PinSource6;break;}case 7: {return GPIO_PinSource7;break;}case 8: {return GPIO_PinSource8;break;}case 9: {return GPIO_PinSource9;break;}case 10: {return GPIO_PinSource10;break;}case 11: {return GPIO_PinSource11;break;}case 12: {return GPIO_PinSource12;break;}case 13: {return GPIO_PinSource13;break;}case 14: {return GPIO_PinSource14;break;}case 15: {return GPIO_PinSource14;break;}default: return AFIO_Pin_num;}
}uint32_t EXTI_Line_Set(unsigned char pin_num)
{uint32_t EXTI_Line_num=0;switch (pin_num){case 0: {return EXTI_Line0;break;}case 1: {return EXTI_Line1;break;}case 2: {return EXTI_Line2;break;}case 3: {return EXTI_Line3;break;}case 4: {return EXTI_Line4;break;}case 5: {return EXTI_Line5;break;}case 6: {return EXTI_Line6;break;}case 7: {return EXTI_Line7;break;}case 8: {return EXTI_Line8;break;}case 9: {return EXTI_Line9;break;}case 10: {return EXTI_Line10;break;}case 11: {return EXTI_Line11;break;}case 12: {return EXTI_Line12;break;}case 13: {return EXTI_Line13;break;}case 14: {return EXTI_Line14;break;}case 15: {return EXTI_Line15;break;}default: return EXTI_Line_num;}
}void InfrCountSensor_Init(unsigned char pin_num)
{// 打开GPIO/AFIO时钟// GPIO和AFIO是APB2总线的外设,需要手动开启时钟,RCC用于配置内核外的外设时钟// EXIT中断默认开始时钟,NVIC是内核外设(内核外设也无需开启时钟)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 配置GPIO 输入模式uint16_t GPIO_Pin_num=0;GPIO_Pin_num=GPIO_Pin_Num_Set(pin_num);GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; // 上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_num;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);// 配置AFIO 选择器(中断引脚选择)// GPIO_AFIODeInit(); // 清空配置// GPIO_PinLockConfig(); // 锁定引脚,防止意外被更改// GPIO_PinRemapConfig(); // 引脚重映射// 选择指定的GPIO / pin 作为外部中断源uint8_t AFIO_Pin_num=0;AFIO_Pin_num=GPIO_AFIO_Pin_Num_Select(pin_num);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,AFIO_Pin_num); // 配置数据选择器,// AFIO_Pin_num 是AFIO的中断选择器号,这里是第14个数据选择器// 配置EXTI中断,触发方式,触发响应方式// EXTI_DeInit(); // 清除配置// EXTI_StructInit(); // 结构体赋值// EXTI_GenerateSWinterrupt(); // 软件触发// 外部中断的外部状态寄存器会设置对应的标志位// 在主程序中读写外部中断标志位,在中断服务函数中读写外部中断标志位uint32_t EXTI_Line_num=0;EXTI_Line_num=EXTI_Line_Set(pin_num);EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line_num; // 指定要配置的中断线,中断EXTI输入通道EXTI_InitStructure.EXTI_LineCmd=ENABLE; // 中断线的新状态,开启中断EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt ; // 中断模式interrupt或事件模式eventEXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; //触发方式,下降沿EXTI_Init(&EXTI_InitStructure); // 初始化// 配置NVIC,中断优先级,进入CPU再执行中断程序NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断分组,两位抢占,两位响应NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn; // 中断EXTI输出通道,15-10占用一个通道,在中断服务函数中需要判断中断标志位NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; // 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; // 响应优先级 (在响应中断中)NVIC_Init(&NVIC_InitStructure);
}void EXTI15_10_IRQHandler(void) // 中断函数
{// 中断标志位的判断if (EXTI_GetITStatus(EXTI_Line14)==SET){// 清楚中断标志位EXTI_ClearITPendingBit(EXTI_Line14);infrCountSensor_count++;}
}unsigned int InfrCountSensor_GetCount()
{return infrCountSensor_count;
}
例子 - 旋转编码器
对于两个中断,AFIO、EXTI、NVIC的code方式
main.c
#include "stm32f10x.h"
#include "Delay.h"
#include "LED.h"
#include "key.h"
#include "Buzzer.h"
#include "PhotoSensor.h"
#include "OLED.h"
#include "infrCountSensor.h"
#include "encoder.h"int main()
{OLED_Init();OLED_ShowString(1,1,"helloworld");OLED_ShowString(2,1,"count: ");Encoder_Init();while (1) {OLED_ShowSignedNum(2,8,Encoder_Get(),8);}
}
encoder.h
#ifndef __ENCODER_H__
#define __ENCODER_H__#include "stm32f10x.h"
void Encoder_Init();
int16_t Encoder_Get();
#endif
encoder.c
#include "encoder.h"int16_t encoder_rotate;void Encoder_Init()
{// 打开GPIO/AFIO时钟// GPIO和AFIO是APB2总线的外设,需要手动开启时钟,RCC用于配置内核外的外设时钟// EXIT中断默认开始时钟,NVIC是内核外设(内核外设也无需开启时钟)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// 配置GPIO 输入模式GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; // 上拉输入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);// 配置AFIO 选择器(中断引脚选择)// 选择指定的GPIO / pin 作为外部中断源GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0); // 配置数据选择器,// AFIO_Pin_num 是AFIO的中断选择器号,这里是第14个数据选择器GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1); // 配置数据选择器,// AFIO_Pin_num 是AFIO的中断选择器号,这里是第14个数据选择器// 配置EXTI中断,触发方式,触发响应方式// 外部中断的外部状态寄存器会设置对应的标志位// 在主程序中读写外部中断标志位,在中断服务函数中读写外部中断标志位;EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line0 | EXTI_Line1; // 指定要配置的中断线,中断EXTI输入通道EXTI_InitStructure.EXTI_LineCmd=ENABLE; // 中断线的新状态,开启中断EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt ; // 中断模式interrupt或事件模式eventEXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; //触发方式,下降沿EXTI_Init(&EXTI_InitStructure); // 初始化// 对两个通道分别设置优先级// 配置NVIC,中断优先级,进入CPU再执行中断程序NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断分组,两位抢占,两位响应NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; // 中断EXTI输出通道NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; // 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; // 响应优先级 (在响应中断中)NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn; // 中断EXTI输出通道NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; // 抢占优先级(在抢占中断中)NVIC_InitStructure.NVIC_IRQChannelSubPriority=2; // 响应优先级 (在响应中断中)NVIC_Init(&NVIC_InitStructure);
}void EXTI0_IRQHandler()
{if (EXTI_GetITStatus(EXTI_Line0)==SET){EXTI_ClearITPendingBit(EXTI_Line0);if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){encoder_rotate--;} }
}void EXTI1_IRQHandler()
{if (EXTI_GetITStatus(EXTI_Line1)==SET){EXTI_ClearITPendingBit(EXTI_Line1);if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0){encoder_rotate++;} }
}int16_t Encoder_Get()
{return encoder_rotate;
}
相关文章:
stm32 - 中断
stm32 - 中断 概念中断向量表NVIC 嵌套中断向量控制器优先级 中断EXTI概念基本结构例子- 对射式红外传感器计次例子 - 旋转编码器 概念 stm32 支持的中断资源(都属于外设) EXTITIMADCUSARtSPII2C stm32支持的中断 内核中断 外设中断 中断通道与优先级 一…...
【洛谷 P1216】[USACO1.5] [IOI1994]数字三角形 Number Triangles 题解(动态规划)
[USACO1.5] [IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中,从 7 → 3 → 8 →…...
十四天学会C++之第四天(面向对象编程基础)
类和对象是什么? 在C中,类是一种用户定义的数据类型,它可以包含数据成员(也就是属性)和成员函数(也就是方法)。类是一种模板或蓝图,用于创建具体的对象。 对象是类的实例ÿ…...
复习Day09:哈希表part02:141.环形链表、142. 环形链表II、454.四数相加II、383赎金信
之前的blog:https://blog.csdn.net/weixin_43303286/article/details/131765317 我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用…...
Internet通过TCP/IP协议可以实现多个网络的无缝连接
Internet通过TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议)协议实现多个网络的无缝连接。 TCP/IP是Internet的基础通信协议套件,它定义了数据如何在不同网络之间传输和路由,使得…...
互联网Java工程师面试题·Dubbo 篇·第二弹
目录 18、Dubbo 用到哪些设计模式? 19、Dubbo 配置文件是如何加载到 Spring 中的? 20、Dubbo SPI 和 Java SPI 区别? 21、Dubbo 支持分布式事务吗? 22、Dubbo 可以对结果进行缓存吗? 23、服务上线怎么兼容旧版本&…...
(c语言)经典bug
#include<stdio.h> //经典bug int main() { int i 0; int arr[10] {1,2,3,4,5,6,7,8,9,10}; for (i 0; i < 12; i) //越界访问 { arr[i] 0; printf("hehe\n"); } return 0; } 注:输出结果为死循…...
用于工业物联网和自动化的 Apache Kafka、KSQL 和 Apache PLC4
由于单一系统和专有协议,数据集成和处理是工业物联网(IIoT,又名工业 4.0 或自动化工业)中的巨大挑战。Apache Kafka、其生态系统(Kafka Connect、KSQL)和 Apache PLC4X 是以可扩展、可靠和灵活的方式实现端…...
1.1.1开发基础-硬件-万用表
1 万用表 万用表又叫多用表、三用表、复用表,是一种多功能、多量程的测量仪表,一般万用表可测量直流电流、直流电压、交流电压、电阻和音频电平等,有的还可以测交流电流、电容量、电感量及半导体的一些参数,是最常用、最简单的测试设备。 万用表是一种多功能多量程的便…...
Mysql内置函数、复合查询和内外连笔记
目录 一、mysql内置函数 1.1.日期函数 1.2.字符串函数 1.3.数学函数 1.4.其他函数 二、复合查询 2.2 自连接 2.3 子查询 2.3.1单行自查询 2.3.2 多行子查询 2.3.3 多列子查询 2.3.4在from子句中使用子查询 2.3.5合并查询 三、表的内连和外连 3.1内连接 3.2外连接…...
【VUE·疑难问题】定义 table 中每行的高度(使用 element-UI)
一、如何定义 table 中每一行的 height ? 1.table例子 <!-- 二、table --><div style"overflow: hidden;display: block;height: 68vh;width: 100%;"><el-table stripe show-header style"width: 100%" :data"tableData&q…...
【重拾C语言】四、循环程序设计(后判断条件循环、先判断条件循环、多重循环;典例:计算平均成绩、打印素数、百钱百鸡问题)
目录 前言 四、循环程序设计 4.1 计算平均成绩——循环程序 4.1.1 后判断条件的循环 a. 语法 b. 典例 4.1.2 先判断条件的循环 a. 语法 b. 典例 4.1.3 for语句 a. 语法 b. 典例 4.2 计算全班每人平均成绩—多重循环 4.2.1 打印100以内素数 4.2.2 百钱百…...
Linux 安装 Gitlab
1、到官网下载Gitlab安装包 (如果是Centos,到el目录下载)。下载GitLab 2、安装依赖软件 sudo yum install -y policycoreutils-python3、安装gitlab sudo rpm -i gitlab-jh-16.3.4-jh.0.el7.x86_64.rpm 4、修改 gitlab.rb sudo vi /etc/gitlab/gitlab.rb 5、g…...
stm32-SPI协议
SPI协议详解(图文并茂超详细) SPI通讯协议 于是我们想有没有更好一点的串行通讯方式;相比较于UART,SPI的工作方式略有不同。 SPI是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和…...
想要精通算法和SQL的成长之路 - 并查集的运用和案例(省份数量)
想要精通算法和SQL的成长之路 - 并查集的运用 前言一. 并查集的使用和模板1.1 初始化1.2 find 查找函数1.3 union 合并集合1.4 connected 判断相连性1.5 完整代码 二. 运用案例 - 省份数量 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 并查集的使用和模板 先说一下并查集…...
解决内网拉取企微会话存档代理问题的一种办法
问题:客户的服务都是内网的,不能直接访问外网;访问外网的话需要走kong网关才能出去。 会话存档官网说可以使用socket5、http方式拉取会话存档;我这边尝试了直接使用kong网关的ip和端口配置进去,是访问不了的 我后面就…...
二十二,加上各种贴图
使用pbr的各种贴图,albedo,金属度,ao,法线,粗糙度,可以更好的控制各个片元 1,先加上纹理坐标 texCoords->push_back(osg::Vec2(xSegment, ySegment)); geom->setVertexAttribArray(3, texCoords, osg::Array::BI…...
新版校园跑腿独立版小程序源码 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务
最新校园跑腿小程序源码 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务 此版本为独立版本,不需要** 直接放入就可以 需要自己准备好后台的服务器,已认证的小程序…...
SpringBoot banner 样式 自动生成
目录 SpringBoot banner 样式 自动生成 图案网站: 1.第一步创建banner.txt文件 2.访问网站Ascii艺术字实现个性化Spring Boot启动banner图案,轻松修改更换banner.txt文件内容,收集了丰富的banner艺术字和图,并且支持中文banner下…...
回收站里面删除的照片如何恢复?
现在拍照已经成为人们生活中的一种方式,照片为我们保留了许多珍贵而美好的回忆。大家通常会把重要的照片保存在硬盘里,但当不小心把照片移入回收站并彻底删除时,情况就有点糟糕了。那么,回收站里删除的照片还有办法恢复吗…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...


