当前位置: 首页 > news >正文

wordpress 阿里云点播/西安seo专员

wordpress 阿里云点播,西安seo专员,成都消防设计公司,高效网站建设公司目录 简介: GPIO输出的八种模式 STM32的GPIO工作方式 GPIO支持4种输入模式: GPIO支持4种输出模式: 浮空输入模式 上拉输入模式 下拉输入模式 模拟输入模式: 开漏输出模式:(PMOS无效,就…

目录

简介:

GPIO输出的八种模式

STM32的GPIO工作方式

GPIO支持4种输入模式:

GPIO支持4种输出模式:

浮空输入模式

上拉输入模式

下拉输入模式

模拟输入模式:

开漏输出模式:(PMOS无效,就是开漏输出,)

开漏复用输出模式 (P-MOS和N-MOS都有效)

推挽输出模式

推挽复用输出模式

根据八种模式在keil5上配置好相应的代码

GPIO的相关寄存器 

1.GPIO的输出

       1.1LED闪烁

1.2LED流水灯

1.3:蜂鸣器


简介:

下面都是理论知识,可以稍微看一看,

GPIO的基本结构:

GPIO位结构:

电路图说明:

​​​​​​​​​​​​​​保护二极管:IO 引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。当引脚电压高于 VDD 时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。但是尽管如此,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。

P-MOS管和N-MOS管:由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。这里的电路会在下面很详细地分析到。

TTL肖特基触发器:信号经过触发器后,模拟信号转化为0和1的数字信号。但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过触发器进行TTL电平转换。ADC外设要采集到的原始的模拟信号。

下面介绍一下我们需要的LED,蜂鸣器:

GPIO输出的八种模式

 GPIO的模式:

STM32的GPIO工作方式

GPIO支持4种输入模式:​​​​​​​

  • 浮空输入(GPIO_Mode_IN_FLOATING)

  • 上拉输入(GPIO_Mode_IPU)

  • 下拉输入(GPIO_Mode_IPD)

  • 模拟输入(GPIO_Mode_AIN)

GPIO支持4种输出模式:

  • 开漏输出(GPIO_Mode_Out_OD)

  • 开漏复用输出(GPIO_Mode_AF_OD)

  • 推挽输出(GPIO_Mode_Out_PP)

  • 推挽复用输出(GPIO_Mode_AF_PP)

同时,GPIO 还支持三种最大翻转速度(2MHz、10MHz、50MHz)。每个I/O口可以自由编程,但 I/O 口寄存器必须按32位字访问。 

需要注意,在查看《STM32中文参考手册V10》中的GPIO的表格时,会看到有“FT”一列,这代表着这个GPIO口是兼容3.3V和5V的;如果没有标注“FT”,就代表着不兼容5V。

浮空输入模式

浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。

上拉输入模式

上拉输入模式下,I/O 端口的电平信号直接进入输入数据寄存器。但是在 I/O 端口悬空(在无信号输入)的情况下,输入端的电平可以保持在高电平;并且在 I/O 端口输入为低电平的时候,输入端的电平也还是低电平。 

下拉输入模式

​​​​​​​

下拉输入模式下,I/O 端口的电平信号直接进入输入数据寄存器。但是在 I/O 端口悬空(在无信号输入)的情况下,输入端的电平可以保持在低电平;并且在 I/O 端口输入为高电平的时候,输入端的电平也还是高电平。

模拟输入模式:

 模拟输入可以说是ADC模数转换器的专属配置。

模拟输入模式下,I/O 端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如 ADC 模块等等。

开漏输出模式:(PMOS无效,就是开漏输出,)

开漏输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经 N-MOS 管,最终输出到I/O端口。这里要注意 N-MOS 管,当设置输出的值为高电平的时候,N-MOS 管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由 I/O 端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS 管处于开启状态,此时 I/O 端口的电平就是低电平。同时,I/O 端口的电平也可以通过输入电路进行读取;注意,I/O 端口的电平不一定是输出的电平。

开漏复用输出模式 (P-MOS和N-MOS都有效)

开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

推挽输出模式

推挽输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经 P-MOS 管和 N-MOS 管,最终输出到 I/O 端口。这里要注意 P-MOS 管和 N-MOS管,当设置输出的值为高电平的时候,P-MOS管处于开启状态,N-MOS管处于关闭状态,此时I/O端口的电平就由P-MOS管决定:高电平;当设置输出的值为低电平的时候,P-MOS管处于关闭状态,N-MOS管处于开启状态,此时I/O端口的电平就由N-MOS管决定:低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,此时I/O端口的电平一定是输出的电平。

推挽复用输出模式

​​​​​​​推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU 直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。

 

根据八种模式在keil5上配置好相应的代码

现在的很多单片机在GPIO配置的时候,除了配置输入输出类型、速度以外,还需要配置一下模式,即GPIO_Mode。以STM32为例,有输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽式输出、 推挽式复用功能、开漏复用功能。 下面我们举一种例子来讲一下如何配置,

也为我们点亮LED灯做准备。

第一步:选择时钟寄存器,

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置寄存器的时钟使能//自己可以在keil5上跳转到他的函数定义,看看他要什么参数,我这里使用的是GPIOA,你也可以用//其他的,第一个参数变成RCC_APB2Periph_GPIOB,就是使用B寄存器

上面配置好了就可以为寄存器输入时钟,当然,时钟也有很多个,我这里选择的是RCC这个,

第二步:

建立一个数组:为啥要建立数组呢?要配置输入输出类型、速度,还有上面一直介绍的八种模式。

存放不同类型的变量C语言是用数组存放的。

 GPIO_InitTypeDef GPIO_InitStructure;  //定义一个结构体结构体有下面三个参数

第三部:设定好我们要的输出类型吗,速度,模式。

下面就是八种模式存放在函数的,以枚举类型赋给了相应的值,这样我们就不需要直接给相应的寄存器复制,直接调用这个函数即可:对应的英文如下

  • 浮空输入(GPIO_Mode_IN_FLOATING)

  • 上拉输入(GPIO_Mode_IPU)

  • 下拉输入(GPIO_Mode_IPD)

  • 模拟输入(GPIO_Mode_AIN)

  • 开漏输出(GPIO_Mode_Out_OD)

  • 开漏复用输出(GPIO_Mode_AF_OD)

  • 推挽输出(GPIO_Mode_Out_PP)

  • 推挽复用输出(GPIO_Mode_AF_PP)

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//选择什么模式,上述八种模式的一种GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; 
//我用A0这个I/O口GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//速度选择50Mhz
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化

 OK,这样的话,我们就已经选择了GPIO的模式,速度,和哪一个引脚。已经拥有了I/O口的使用权。上面这些需要的参数都是可以跳转到函数定义去看看它需要啥的,直接复制粘贴即可

最后就是操作寄存器给0或1就可以输出和读入了,当然,我们还是直接操作相应的函数给他1和0.

GPIO的相关寄存器 

下面GPIO配置寄存器,每一个端口的模式由四位进行配置。16个端口需要64位,(基本很少直接配置寄存器,库函数已经配置好了,我们直接了解库函数的使用,直接调用即可) 

所以配置寄存器有两个,一个是端口配置低寄存器,一个是端口配置高寄存器。

 端口数据寄存器:

低16位对应16个引脚,高16位没有使用。

端口输出寄存器:

低16位是进行设置的,高16位是进行清除的。 

与上面寄存器高16位是一样的功能。为了方便操作设置的,如果你想单一的进行位设置或者清除。多个端口同时进行设置和位清除,使用8.2.5寄存器就OK了,这样可以保证位设置和位清除的同步性,

可以对端口的配置进行锁定,防止意外更改,

 下面是八种模式,函数已经把我们定义好了。我们依次讲一下。

1.GPIO的输出

       1.1LED闪烁

如图所示连接面包板。我使用的是A0这个GPIO,可能图看不太清楚。

代码如下:(基于库函数的工程已经建好的情况下)

这里主要使用main.c函数

main.c

当然,置1还是置0的函数也有很多个

下面四个,具体参数可以转到相应的函数定义去看看它具体要啥。

 

#include "stm32f10x.h"   //32的头文件              
#include "Delay.h"       //延时的文件int main()
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置寄存器的时钟使能//自己可以在keil5上跳转到他的函数定义,看看他要什么参数,我这里使用的是GPIOA,你也可以用//其他的,第一个参数变成RCC_APB2Periph_GPIOB,就是使用B寄存器GPIO_InitTypeDef GPIO_InitStructure;  //定义一个结构体结构体有下面三个参数GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//选择什么模式,上述八种模式的一种GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);// GPIO_SetBits(GPIOA,GPIO_Pin_0);//选择A0这个I/O口,置1操作  // GPIO_ResetBits(GPIOA,GPIO_Pin_0);//选择A0这个I/O口,置0操作while(1){GPIO_ResetBits(GPIOA,GPIO_Pin_0);//选择A0这个I/O口,置0操作Delay_ms(100); GPIO_SetBits(GPIOA,GPIO_Pin_0);//选择A0这个I/O口,置1操作 Delay_ms(100);}
}

Delay函数可以自己找一个,江科大就有,在工程里面建一个文件夹,放在工程里面。最后拿进来就OK了,当然还要很多注意操作事项,我就不展示了。

怎么点亮看自己连接的引脚图。0点亮还是1点亮,具体由自己决定。

我上面连接的电路图是二极管长接正,短接A0口,所以,只有A0口接0就会亮。所以我是0点亮。当然看你的模式是啥,推挽输出的话:二极管长接A0口,短接负极,好像也是可以点亮的,跟它的工作方式有关,自己可以试试。但是开漏输出不行,说明开漏输出没有高电平驱动能力的

1.2LED流水灯

有了上面LED闪烁的例子,其实LED流水灯也很容易。

只不过我们多要操作7个I/O口:初始化部分麻烦了点。

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;对引脚的初始化可以这样,为什么呢?

我们右击下图所示,转到定义。

通过这幅图可以看到,pin0对应的数据是0x01,pin1为0x02........

转为16进制是不是 0000 0000 0000 0001(pin0)

                              0000 0000 0000 0010   (pin1)........

按位或就是            0000 0000 0000 0011  这样就把两个端口全部选上了。

当然最下面还有个GPIO_pin_All,就是把所有引脚全部选上了。

其实时钟控制的那一项,也是可以通过按位或的操作来进行多个选择的,同理,右键

GPIO_SetBits的参数也是可以设置多个引脚的。 

OK,有了上述知识,我就点亮四个灯,来实现流水灯,插入哪一个引脚看自己的选择,我选择

A0,1,2,3.这四个引脚。代码如下:

#include "stm32f10x.h"   //32的头文件              
#include "Delay.h"       //延时的文件int main()
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置寄存器的时钟使能//自己可以在keil5上跳转到他的函数定义,看看他要什么参数,我这里使用的是GPIOA,你也可以用//其他的,第一个参数变成RCC_APB2Periph_GPIOB,就是使用B寄存器GPIO_InitTypeDef GPIO_InitStructure;  //定义一个结构体结构体有下面三个参数GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//选择什么模式,上述八种模式的一种GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);// GPIO_SetBits(GPIOA,GPIO_Pin_0);//选择A0这个I/O口,置1操作  // GPIO_ResetBits(GPIOA,GPIO_Pin_0);//选择A0这个I/O口,置0操作while(1){GPIO_ResetBits(GPIOA,GPIO_Pin_0);//选择A0这个I/O口,置0操作Delay_ms(500); GPIO_SetBits(GPIOA,GPIO_Pin_0);//选择A0这个I/O口,置1操作 Delay_ms(500);GPIO_ResetBits(GPIOA,GPIO_Pin_1);Delay_ms(500); GPIO_SetBits(GPIOA,GPIO_Pin_1);//选择A0这个I/O口,置1操作 Delay_ms(500);GPIO_ResetBits(GPIOA,GPIO_Pin_2);//选择A0这个I/O口,置0操作Delay_ms(500); GPIO_SetBits(GPIOA,GPIO_Pin_2);//选择A0这个I/O口,置1操作 Delay_ms(500);GPIO_ResetBits(GPIOA,GPIO_Pin_3);//选择A0这个I/O口,置0操作Delay_ms(500); GPIO_SetBits(GPIOA,GPIO_Pin_3);//选择A0这个I/O口,置1操作 Delay_ms(500);}
}

当然,也可以使用 GPIO_Write函数。

GPIO_Write(GPIOA,~0x0001);//0000 0000 0000 0001
Delay_ms(100);
GPIO_Write(GPIOA,~0x0002);//0000 0000 0000 0010
Delay_ms(100);
GPIO_Write(GPIOA,~0x0004);//0000 0000 0000 0100
Delay_ms(100);
GPIO_Write(GPIOA,~0x0008);//0000 0000 0000 1000
Delay_ms(100);

1.3:蜂鸣器

这一部分留给自己操作吧,应该也是很简单的,跟上面的代码差不多。

.

相关文章:

32单片机基础:GPIO输出

目录 简介: GPIO输出的八种模式 STM32的GPIO工作方式 GPIO支持4种输入模式: GPIO支持4种输出模式: 浮空输入模式 上拉输入模式 下拉输入模式 模拟输入模式: 开漏输出模式:(PMOS无效,就…...

【linux】查看openssl程序的安装情况

【linux】查看openssl程序的安装情况 1、查看安装包信息 $ rpm -qa |grep openssl 2、安装路径 $ rpm -ql openssl $ rpm -ql openssl-libs $ rpm -ql openssl-devel 3、相关文件和目录 /usr/bin/openssl /usr/include/openssl /usr/lib64/libssl.so.* /usr/lib64/libcrypto…...

高防服务器主要运用在哪些场景?

高防服务器主要是用来防御DDOS攻击的服务器,能够为客户提供安全维护,高防服务器能够帮助网站拒绝服务攻击,定时扫描网络主节点,进行查找可能会出现的安全漏洞的服务类型,高防服务器也会根据不同的IDC机房环境来提供硬防…...

Eureka:微服务中的服务注册与发现机制

引言 在微服务架构中,由于服务数量巨大并且各个服务的实例可能会频繁上下线,因此服务注册和发现机制至关重要。 那么,有什么工具或技术可以帮助我们解决这个问题呢? 答案就是Eureka。 一、Eureka简介 Eureka是Netflix公司开源的…...

python程序设计基础:字符串与正则表达式

第四章:字符串与正则表达式 4.1字符串 最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码,最多只能表示256个符号。 随着信息技…...

华为配置WDS手拉手业务示例

配置WDS手拉手业务示例 组网图形 图1 配置WDS手拉手业务示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 企业用户通过WLAN接入网络,以满足移动办公的最基本需求。但企业考虑到AP通过有线部署的成本较高,所以通过建立…...

Apache celeborn 安装及使用教程

1.下载安装包 https://celeborn.apache.org/download/ 测0.4.0时出现https://github.com/apache/incubator-celeborn/issues/835 2.解压 tar -xzvf apache-celeborn-0.3.2-incubating-bin.tgz 3.修改配置文件 cp celeborn-env.sh.template celeborn-env.shcp log4j2.xml.…...

数据保护:如何有效应对.BecSec-P-XXXXXXXX勒索病毒的威胁

导言: 随着网络安全威胁的不断增加,勒索软件成为了网络犯罪分子的一种常见手段之一。.BecSec-P-XXXXXXXX勒索病毒(简称.BecSec勒索病毒)作为其中之一,对用户的数据安全构成了严重威胁。本文91数据恢复将介绍.BecSec勒…...

流畅的Python(十二)-继承的优缺点

一、核心要义 1. 子类化内置类型的缺点 2.多重继承和方法解析顺序 二、代码示例 1. 子类化内置类型的缺点 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2024/2/24 7:29 # Author : Maple # File : 01-子类化内置类型的问题.py # Software: PyCharm fr…...

机器学习基础(三)监督学习的进阶探索

导语:上一节我们深入地探讨监督学习和非监督学习的知识,重点关注它们的理论基础、常用算法及实际应用场景,详情可见: 机器学习基础(二)监督与非监督学习-CSDN博客文章浏览阅读769次,点赞15次&a…...

avidemux-一个免费的视频编辑器,用于剪切、过滤和编码项目

avidemux-一个免费的视频编辑器,用于剪切、过滤和编码项目 avidemux-一个免费的视频编辑器,用于剪切、过滤和编码项目avidemux下载avidemux源代码参考资料 avidemux-一个免费的视频编辑器,用于剪切、过滤和编码项目 avidemux下载 avidemux …...

RisingWave最佳实践-利用Dynamic filters 和 Temporal filters 实现监控告警

心得的体会 刚过了年刚开工,闲暇之余调研了分布式SQL流处理数据库–RisingWave,本人是Flink(包括FlinkSQL和Flink DataStream API)的资深用户,但接触到RisingWave令我眼前一亮,并且拿我们生产上的监控告警…...

【Qt学习】QRadioButton 的介绍与使用(性别选择、模拟点餐)

文章目录 介绍实例使用实例1(性别选择 - 单选 隐藏)实例2(模拟点餐,多组单选) 相关资源文件 介绍 这里简单对QRadioButton类 进行介绍: QRadioButton 继承自 QAbstractButton ,用于创建单选按…...

基于java springboot的图书管理系统设计和实现

基于java springboot的图书管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…...

自定义类型:联合和枚举

目录 1. 联合体 1.1 联合体类型的声明及特点 1.2 相同成员的结构体和联合体对比 1.3 联合体大小的计算 1.4 联合体的应用举例 2. 枚举类型 2.1 枚举类型的声明 2.2 枚举类型的优点 1. 联合体 1.1 联合体类型的声明及特点 像结构体一样,联合体也是由一个或…...

每日一学—由面试题“Redis 是否为单线程”引发的思考

文章目录 📋 前言🌰 举个例子🎯 什么是 Redis(知识点补充)🎯 Redis 中的多线程🎯 I/O 多线程🎯 Redis 中的多进程📝 结论🎯书籍推荐🔥参与方式 &a…...

chatGPT PLUS 绑卡提示信用卡被拒的解决办法

chatGPT PLUS 绑卡提示信用卡被拒的解决办法 一、 ChatGPT Plus介绍 作为人工智能领域的一项重要革新,ChatGPT Plus的上线引起了众多用户的关注,其背后的OpenAI表现出傲娇的态度,被誉为下一个GTP 4.0。总的来说,ChatGPT Plus的火…...

opencv鼠标操作与响应

//鼠标事件 Point sp(-1, -1); Point ep(-1, -1); Mat temp; static void on_draw(int event, int x, int y, int flags, void *userdata) {Mat image *((Mat*)userdata);if (event EVENT_LBUTTONDOWN) {sp.x x;sp.y y;std::cout << "start point:"<<…...

vue里echarts的使用:画饼图和面积折线图

vue里echarts的使用,我们要先安装echarts,然后在main.js里引入: //命令安装echarts npm i echarts//main.js里引入挂载到原型上 import echarts from echarts Vue.prototype.$echarts = echarts最终我们实现的效果如下: 头部标题这里我们封装了一个全局公共组件common-he…...

个人建站前端篇(六)插件unplugin-auto-import的使用

vue3日常项目中定义变量需要引入ref,reactive等等比较麻烦&#xff0c;可以通过unplugin-auto-import给我们自动引入 * unplugin-auto-import 解决了vue3-hook、vue-router、useVue等多个插件的自动导入&#xff0c;也支持自定义插件的自动导入&#xff0c;是一个功能强大的typ…...

【Python】 剪辑法欠采样 CNN压缩近邻法欠采样

借鉴&#xff1a;关于K近邻&#xff08;KNN&#xff09;&#xff0c;看这一篇就够了&#xff01;算法原理&#xff0c;kd树&#xff0c;球树&#xff0c;KNN解决样本不平衡&#xff0c;剪辑法&#xff0c;压缩近邻法 - 知乎 但是不要看他里面的代码&#xff0c;因为作者把代码…...

springmvc+ssm+springboot房屋中介服务平台的设计与实现 i174z

本论文拟采用计算机技术设计并开发的房屋中介服务平台&#xff0c;主要是为用户提供服务。使得用户可以在系统上查看房屋出租、房屋出售、房屋求购、房屋求租&#xff0c;管理员对信息进行统一管理&#xff0c;与此同时可以筛选出符合的信息&#xff0c;给笔者提供更符合实际的…...

挑战30天学完Python:Day19 文件处理

&#x1f4d8; Day 19 &#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点…...

Spring Boot application.properties和application.yml文件的配置

在Spring Boot中&#xff0c;application.properties 和 application.yml 文件用于配置应用程序的各个方面&#xff0c;如服务器端口、数据库连接、日志级别等。这两个文件是Spring Boot的配置文件&#xff0c;位于 src/main/resources 目录下。 application.properties 示例 …...

Unity单元测试

Unity单元测试是一个专门用于嵌入式单元测试的库, 现在简单讲下移植以及代码结构. 源码地址: GitHub - ThrowTheSwitch/Unity: Simple Unit Testing for C 1.我们只需要移植三个文件即可: unity.c, unity.h, unity_internals.h 2.然后添加需要测试的函数. 3.在main.c中添加…...

Spring Bean 的生命周期了解么?

Spring Bean 的生命周期基本流程 一个Spring的Bean从出生到销毁的全过程就是他的整个生命周期, 整个生命周期可以大致分为3个大的阶段 : 创建 使用 销毁 还可以分为5个小步骤 : 实例化(Bean的创建) , 初始化赋值, 注册Destruction回调 , Bean的正常使用 以及 Bean的销毁 …...

.ryabina勒索病毒数据怎么处理|数据解密恢复

导言&#xff1a; 随着网络安全威胁的不断增加&#xff0c;勒索软件已成为严重的威胁之一&#xff0c;.ryabina勒索病毒是其中之一。本文将介绍.ryabina勒索病毒的特点、数据恢复方法和预防措施&#xff0c;以帮助用户更好地应对这一威胁。当面对被勒索病毒攻击导致的数据文件…...

上网行为监控软件能够看到聊天内容吗

随着信息技术的不断发展&#xff0c;上网行为监控软件在企业网络安全管理中扮演着越来越重要的角色。 这类软件主要用于监控员工的上网行为&#xff0c;以确保工作效率和网络安全。 而在这其中&#xff0c;域智盾软件作为一款知名的上网行为监控软件&#xff0c;其功能和使用…...

Java知识点一

hello&#xff0c;大家好&#xff01;我们今天开启Java语言的学习之路&#xff0c;与C语言的学习内容有些许异同&#xff0c;今天我们来简单了解一下Java的基础知识。 一、数据类型 分两种&#xff1a;基本数据类型 引用数据类型 &#xff08;1&#xff09;整型 八种基本数…...

Django学习笔记-forms使用

1.创建forms.py文件,导入包 from django import forms from django.forms import fields from django.forms import widgets2. 创建EmployeeForm,继承forms.Form 3.创建testform.html文件 4.urls.py添加路由 5.views中导入forms 创建testform,编写代码 1).如果请求方式为GET,…...