【北京迅为】《STM32MP157开发板使用手册》- 第二十八章Cortex-M4外部中断实验

news2024/9/17 22:50:53

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等


第二十八章Cortex-M4外部中断实验

本章节最终所完成的实验例程存放路径为“iTOP-STM32MP157开发板网盘资料汇总\06_Cortex-M4实验例程\04_EXTI.zip”。

28.1 认识中断

28.1.1对中断的初步理解

中断其实就是当 CPU 执行程序时,由于发生了某种随机的事件(外部或内部),引起 CPU 暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程就称为中断,引发中断的称为中断源。比如:看电视时突然门铃响,那么门铃响就相当于中断源。有些中断还能够被其他高优先级的中断所中断,那么这种情况又叫做中断的嵌套。中断示意图如下图所示:

CPU与硬件通信的方式分为轮询和中断。什么是轮询呢,轮询的定义如下:

轮询(Polling)I/O方式或程序控制I/O方式,是让CPU以一定的周期按次序查询每一个外设,看它是否有数据输入或输出的要求,若有,则进行相应的输入/输出服务;若无,或I/O处理完毕,CPU就接着查询下一个外设。

我们以上一章节的按键实验为例,实验主函数代码如下图所示:

 

在while循环之中,不断的检测key的值,根据不同的key值来实现不同的功能,在这里所用到的就是轮询,但轮询的弊端也在此体现了出来,不断的检测会造成资源的浪费,且反应速度慢。而“中断处理方式”(外设请求方式)能够协调CPU与外设间的速度差异,能够协调各种外设间的速度差异,提高系统的工作效率(速度指标)。使应用程序与外设操作基本脱离开来,降低了程序的设备相关性(关联可靠性指标、局部修改指标)。

28.1.2中断的分类

中断包括软件中断(不可屏蔽)和硬件中断。软中断为内核触发机制引起,模拟硬件中断。硬件中断又分为外部中断(可屏蔽)和内部中断(不可屏蔽)。
外部中断为一般外设请求;内部中断包括硬件出错(掉电,校验,传输)和运算出错(非法数据,地址,越界,溢出)

硬件中断是由与系统相连的外设(比如网卡 硬盘 键盘等)自动产生的. 每个设备或设备集都有他自己的IRQ(中断请求), 基于IRQ, CPU可以将相应的请求分发到相应的硬件驱动上(注: 硬件驱动通常是内核中的一个子程序, 而不是一个独立的进程).处理中断的驱动是需要运行在CPU上的, 因此, 当中断产生时, CPU会暂时停止当前程序的程序转而执行中断请求.

软中断不会直接中断CPU, 只有当前正在运行的代码(或进程)才会产生软中断. 软中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求.

28.1.3 NVIC的初步认识

NVIC 即嵌套向量中断控制器(Nested Vectored Interrupt Controller ),它是 Cortex-M 内核的器件,用于管理内核所有中断和事件,包括中断的使能和除能、中断的优先级等。M3/M4/M7 内核都是支持 256 个中断,其中包含了 16 个系统中断和 240 个外部中断,并且 具有 256 级的可编程中断设置。然而芯片厂商一般不会把内核的这些资源全部用完,如 STM32MP157 的系统中断有 10 个,外部中断有 150 个。

由于在STM32CubeIDE软件之中会自动帮我们设置好相应的配置,所以我们在此只写出之后会用到的一些内容,一些基本配置与说明在这里就不一一列出。

每个中断的优先级都是用寄存器中的8位来设置的。8位的话就可以设置2^8 =256级中断,实际中用不了这么多,所以芯片厂商根据自己生产的芯片做出了调整。 STM32MP157 只使用了这个8位中的高四位[7:4],低四位取零,这样2^4=16,只能表示16级中断嵌套。优先级分组真值表如下图所示:

例如优先级分组设置为 2每个中断的中断优先寄存器的高四位中的最高2位是抢占优先级,低 2 位是响应优先级,抢占优先级共有 2^2=4 种,子优先级共有 2^2=4种,共有 4*4=16 级嵌套, 每个中断,可以设置抢占优先级为 0~4,响应优先级为0~4。

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以以打断正在执行的抢占优先级低的中断

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

对于系统中断(比如:PendSV,SVC,SysTick)和外部中断(比如SPI,USART)它们是在同一个NVIC下面设置的,也要根据根据他们的抢占优先级和子优先级来。

28.1.4 EXTI的初步认识

EXTI(External interrupt/event controller)—外部中断/事件控制器管理了控制器的 16 个中断/事件线。EXIT 时钟挂载在 AHB 高级高性能总线上,每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。

从上图中断的系统框图可以了解到:

1)中断/事件的输入线可以通过寄存器设置为任意一个GPIO,也可以是一些外设的事件

2)Event Trigger 边沿检测电路以输入线作为信号输入端,它会根据上升沿触发选择寄存器(EXTI_RTSR)和下降沿触发选择寄存器(EXTI_FTSR)对应位的设置来控制信号触发

3)EXTI_PR寄存器内容输出到NVIC内,从而实现系统中断事件控制

4)而CPU(m)是我们的M4内核部分

EXTI 有 16 个中断/事件线,每个 GPIO 都可以被设置为输入线,占用 EXTI0 至 EXTI15。GPIO 的引脚 Px0 ~ Px15(x=A,B,C,D,E,F,G,H,I,J,K,Z)分别映射到了中断线 0~15。这样每个中断线对应了最多 12 个 IO 口。如上图所示。

GPIO 和中断线的映射关系如下表:

中断/事件线

输入源

EXTI0

PX0(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI1

PX1(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI2

PX2(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI3

PX3(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI4

PX4(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI5

PX5(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI6

PX6(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI7

PX7(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI8

PX8(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI9

PX9(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI10

PX10(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI1

PX11(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI2

PX12(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI3

PX13(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI4

PX14(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

EXTI5

PX15(X可为A,B,C,D,E,F,G,H,I,J,K,Z)

28.2 实验目的

1)IO口作为外部中断的使用

2)学习中断优先级和中断的设置

3)STM32CubeIED的熟练

28.3 按键电路的分析

本章节所要完成的任务和上一章节的任务相同,涉及到的实现方法不同,但硬件的原理相同,所以在这里又重新分析了一遍按键的原理部分。

iTOP-STM32MP157开发板板载了5个输入按键,默认为高电平,按下去的时候为低电平(这里并没有列出复位按键和B1),原理如下图所示:

我们以PWRON3为例,默认状态下按键为弹起状态,IO口和3.3V的电位相同,为高电平,当按键 PWRON3按下时,+3.3V 通过电阻 R22 然后再通过按键PWRON3最终进入 GND 形成一条通路,那么这条线路的全部电压都加到了R22这个电阻上,DCMI_D8这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么 PWRON3和+3.3V 又恢复为等电位,是一个高电平。我们就可以通过 DCMI_D8这个 IO 口的按键按下的下降沿来判断按键是否按下。

三个用户按键原理图对应的控制引脚为:

原理图名称

PWRON2

PWRON1

PWRON3

按键名称

BACK

VOL-UP

VOL-DN

引脚名称

PI2

DCMI_D10

DCMI_D8

对应引脚

PI2

PI3

PI1

在本小节所要实现功能为,通过三个输入按键来分别控制LED2、LED3和BEEP的状态,当按下VOL-UP按键时会使LED2的状态反转,当按下VOL-DN按键时会使LED3的状态反转,当按下BACK按键时会使蜂鸣器的状态反转,以下为LED和蜂鸣器对应的控制引脚:

BEEP

LED2

LED3

PI11

PE14

PE1

28.4 实验步骤

28.4.1建立EXTI工程

首先我们打开STM32CubeIDE软件,进入软件界面之后,我们点击File属性,选择NEW下的STM32 Project的选项,如下图所示:

然后我们会进入下图所示界面:在Part Number选择框输入STM32MP157A,然后在右边的选择界面选择STM32MP157AAA,然后点击Next选项

在Project Name框中输入工程名字EXTI,然后点击Finish选项即可,如下图所示: 

等待工程创建完毕,会询问我们是否要安装OpenSTLinux ,由于我们是在windows环境下,所以我们不需要安装,点击NO即可 

至此我们的工程创建完毕,进入工程界面如下图所示界面: 

28.4.2 GPIO功能引脚配置

28.4.2.1输出引脚的配置(LED和蜂鸣器)

首先我们在下面的搜索框之中输入我们要配置的引脚,我们在这里以PE1为例进行搜索,输入名称之后,对应的引脚在工程中会闪烁,如下图所示:

配置完复用功能之后,我们还要配置 Pin Reserved 选项如果不配置此项,在生成工程代码的时候将不会看到有关这个 Pin 的初始化代码。继续选中 PE1,右键弹出设置项我们选择Pin ReservedàCortex-M4。如下图所示: 

第二个LED的控制管脚PE14按同样的方法进行配置。

配置完成之后打开左侧菜单的 System CoreàGPIO 进入 GPIO 模式配置界面:如下图所示:

 

点击对应的引脚配置之后会弹出右下方的管脚配置界面,如上图所示:

在下方会列出要配置选项的具体说明和我们要进行的配置。

1)选项 GPIO output level 用来设置IO口的输出电平的高低,这这里我们选择LOW

2)选项 GPIO mode 用来设置 IO 口输出模式为 Output Push Pull(推挽)还是 Output Open Drain(开漏)。本实验我们设置为推挽输出 Output Push Pull。

3)选项 GPIO Pull-up/Pull-down 用来设置 IO 口是上拉/下拉/没有上下拉。本实验我们设置为上拉(Pull-up)。

4)选项 Mzximum ouput speed 用来设置 IO 口输出速度为低速(Low)/中速(Medium)/高速 (Hign)/快速(Very High)。我们设置为高速 High 。

5)选项 User Label 是用来设置初始化的 IO 口 Pin 值为我们自定义的宏,这里我们填写为 LED3。按照如上要求设置后的界面如下(由于PE14的配置相同,只是最后的Label值不同,也在下方列了出来):

 

然后我们继续在搜索框之中输入PI11进行搜索,输入名称之后,对应的引脚在工程中会闪烁,如下图所示: 

然后我们使用鼠标左键点击对应的引脚会弹出PI11的复用功能选择,我们在这里选择复用为GPIO_Output功能,如下图所示: 

配置完复用功能之后,我们还要配置 Pin Reserved 选项如果不配置此项,在生成工程代码的时候将不会看到有关这个 Pin 的初始化代码。继续选中 PI11,右键弹出设置项我们选择Pin ReservedàCortex-M4。如下图所示: 

配置完成之后打开左侧菜单的 System CoreàGPIO 进入 GPIO 模式配置界面,跟配置LED的步骤相同,配置完成如下图所示: 

28.4.2.2 中断引脚的配置(按键)

首先我们在下面的搜索框之中输入我们要配置的引脚,我们在这里以PI2为例进行搜索(由于三个按键的配置相同,在这里我们只是列出了BACK按键的配置步骤),输入名称之后,对应的引脚在工程中会闪烁,如下图所示:

然后我们使用鼠标左键点击对应的引脚会弹出PI2的复用功能选择,我们在这里选择复用为GPIO_EXTI2功能,如下图所示: 

配置完复用功能之后,我们还要配置 Pin Reserved 选项如果不配置此项,在生成工程代码的时候将不会看到有关这个 Pin 的初始化代码。继续选中 PI2,右键弹出设置项我们选择Pin ReservedàCortex-M4。如下图所示: 

VOL-UP和VOL-DN对应的PI3和PI1引脚按同样的方法进行配置。在此就不一一展示。

配置完成之后打开左侧菜单的 System CoreàGPIO 进入 GPIO 模式配置界面:如下图所示:

 

选项 GPIO mode 用来设置 IO 口中断模式,可以设置的中断模式为

GPIO的中断触发模式

Extemal Interrupt Mode with Rising edge trigger detection

具有上升沿触发检测功能的外部中断模式

External Interrupt Mode with Falling edge trigger detection

具有下降沿触发检测的外部中断模式

External Interrupt Mode with Rising/Falling edge trigger detection

具有上升/下降沿触发检测的外部中断模式

External Event Mode with Rising edge trigger detection

具有上升沿触发检测的外部事件模式

External Event Mode with Falling edge trigger detection

具有下降沿触发检测的外部事件模式

External Event Mode with Rising/Falling edge trigger detection

具有上升/下降沿触发检测的外部事件模式

当我们按下按键时,对应的引脚由高电平转变为低电平,所以在这里我们选择具有下降沿触发检测的外部中断模式。

选项 GPIO Pull-up/Pull-down 用来设置 IO 口是上拉/下拉/没有上下拉。本实验我们设置为上拉(Pull-up)。

选项 User Label 是用来设置初始化的 IO 口 Pin 值为我们自定义的宏,这里我们填写为VOL-DN。按照如上要求设置后的界面如下(由于PI2和PI3的配置相同,只是最后的Label值不同,也在下方列了出来):

 

 

 

配置完成之后我们进入NVIC配置,对三个中断进行使能,如下图所示: 

最后需要在Project Manage下的Code Generator选项下勾选 Generate peripheral initialization as a pair of ".c/.h' files per peripheral 选项,这样可以独立生成对应外设的初始化.h 和.c 文件(方便配置的查看),如下图所示: 

28.4.3工程的生成与完善

在上述的步骤完成之后,按下键盘的Ctrl+S组合键保存保存 EXTI.ioc 文件,系统开始生成初始化代码,工程生成之后如下图所示:

 

然后我们进行工程的完善,以及添加对应的逻辑代码。

28.4.3.1 对应文件与文件夹的添加

首先在左侧的工程浏览页之中通过鼠标右键在EXIT_CM4的Core目录下创建名字为BSP的文件,具体步骤如下图所示:

由于我们前两个章节已经完善了对应的LED和BEEP的文件,所以我们将iTOP-STM32MP157开发板网盘资料汇总\06_Cortex-M4实验例程\01_LED\LED\CM4\Core\BSP目录下和iTOP-STM32MP157开发板网盘资料汇总\06_Cortex-M4实验例程\02_BEEP\BEEP\CM4\Core\BSP目录下对应的.c、.h文件拷贝到当前工程的BSP目录下,拷贝完成如下下图所示: 

然后在BSP目录下以创建key.c文件,在Include目录下的key.h文件,创建完成如下图所示: 

28.4.3.2 key.h文件的完善

我们对key.h文件进行代码的添加,将以下内容复制到key.h文件之中如下图所示:

#ifndef __KEY_H

#define __KEY_H

#include "gpio.h"

#endif

28.4.3.3 key.c文件的完善

在key.c文件下,添加以下内容,以下内容实现的功能为定义key_scan函数,该函数用来实现按键的扫描,每一个按键按下后,会有不同的返回值,以此来确定按下的按键。

#include "./Include/key.h"
#include "./Include/led.h"
#include "./Include/beep.h"
void delay_short(volatile unsigned int n)
{
	while(n--){}
}
void delay(volatile unsigned int n)
{
	while(n--)
	{
		delay_short(0x7fff);
	}
}
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
	for(long n = 1;n<72000;n++){}; 
	delay(2);
    if (VOL_UP == 0)
    {
    	LED2_TOGGLE();
    }
	else if(VOL_DN == 0)
	{
		LED3_TOGGLE();
	}
	else if(BACK == 0)
	{
		BEEP_TOGGLE();
	}
}

在这里也可以使用系统延时的方法来达到和上述代码相同的效果,只需要将

for(long n = 1;n<72000;n++){};

delay(2);

部分代码替换为

HAL_Delay(10);

而在6.1.3关于NVIC章节中讲到对于系统中断(比如:PendSV,SVC,SysTick)和外部中断它们是在同一个NVIC下面设置的,也要根据根据他们的抢占优先级和子优先级来进行判定,而在此我们要使用的系统延时SysTick要设置的中断优先级要比外部中断的优先级高,否则会造成程序无法正常运行,修改中断优先级操作如下:

打开EXTI.ioc之后,在左侧菜单栏中的System Core下选择NVIC进入如下图所示:

可以看到Time base:System tick timer 的优先级默认设置为15,而三个外部中断的优先级默认为1,外部中断的优先级是高于默认优先级的,所以我们要对优先级进行修改

我们将Time base:System tick timer 的优先级设置为1,而三个外部中断的优先级设置为2,修改完成如下图所示: 

注意:修改优先级中断部分的代码会重置,需要重新进行代码的完善。

28.4.3.4 main.c文件的完善

我们要修改的main.c文件路径如下图所示:

打开main.c文件,为了规范我们在/* USER CODE BEGIN Includes */和/* USER CODE END Includes */之间添加以下内容

#include "../BSP/Include/led.h"

#include "../BSP/Include/beep.h"

#include "../BSP/Include/key.h"

添加完成如下图所示:

 

然后在 /* USER CODE BEGIN 2 */和/* USER CODE END 2 */之间添加以下内容:

 beep_init();

 led_init();

通过调用led_init()函数来使LED2和LED3的初始状态分别为亮和灭。

通过调用beep_init()函数来使BEEP的初始状态分别为不发声。

该逻辑代码所实现的功能为当按下VOL-UP按键时会使LED2的状态反转,当按下VOL-DN按键时会使LED3的状态反转,当按下BACK按键时会使蜂鸣器的状态反转

 

28.4.4工程的编译

在完成以上步骤之后我们点击工具栏的小锤子进行编译,编译图标如下图所示:

编译完成会在下方的终端中显示打印信息,如下图所示: 

 

如果报错,需要自己根据错误的提示信息来进行问题的寻找和改正。

28.4.5工程的调试

由于STM32MP157的裸机部分和一般的单片机有些区别,他没有内部的存储,所以只能在程序编译成功之后,通过debug的方式来进行调试(将程序放在内存之中),调试过程如下:

首先,点击菜单栏中的小甲虫Debug调试按钮,弹出以下界面,

 

在弹出来的界面,按步骤,选择响应的属性(该步骤为Jlink的步骤,如果是STLink,调试探头选择对应的即可)。如下图所示: 

选择完成之后,点击右下角的Debug按钮,点击之后,会进行再一次的编译,编译完成之后会弹出如下内容(作者用的是J-LinK),这里弹出的是J-link关于设备的选择,不同调试器的弹窗可能会不同

在弹出来的界面中,选择Accept接受,会弹出以下内容,继续点击下方的OK。 

 

之后会来到设备选择界面,我们选择Cortex-M4,如下图所示: 

 

选择Cortex-M4之后,点击右下角的OK,会弹出以下界面,选择右下角Switch.

然后会弹出一个新的页面,选择菜单栏的 resume按钮开始调试。 

当按下VOL-UP按键时会使LED2的状态反转,当按下VOL-DN按键时会使LED3的状态反转,当按下BACK按键时会使蜂鸣器的状态反转。

如果想关闭调试,则点击菜单栏的终止按钮即可。

 

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

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

相关文章

SRT3D: A Sparse Region-Based 3D Object Tracking Approach for the Real World

基于区域的方法在基于模型的单目3D跟踪无纹理物体的复杂场景中变得越来越流行。然而&#xff0c;尽管它们能够实现最先进的结果&#xff0c;大多数方法的计算开销很大&#xff0c;需要大量资源来实时运行。在下文中&#xff0c;我们基于之前的工作&#xff0c;开发了SRT3D&…

一、轻松部署的大模型开发平台dify.ai

一、轻松部署的大模型开发平台dify.ai 今天学习了大模型&#xff0c;顺便介绍的是一个名为dify.ai的神奇平台&#xff0c;它能让你轻松部署和使用大模型&#xff0c;即使你是编程小白也不用担心。 官网&#xff1a;https://dify.ai/zh 什么是大模型&#xff1f; 首先&#…

C++ nullptr 和NULL的区别

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 概念概述&#xff1a; 在C中&#xff0c;nullptr 和 NULL 都是用来表示空指针&#xff0c;但它们之间有一些重要的区别&#xff1a; nullptr和NULL之间的区分…

ceph简介

ceph存储简要概述&#xff1a; 通过将文件分解成固定大小对象&#xff0c;然后存放于pool中&#xff0c;每个pool中 可包含多个pg&#xff0c;每个pg中又可包含多个osd 通过crush算法 最终数据落盘到osd中去。 一、ceph 删除osd 步骤1 修改osd数据操作权重值 ceph osd crush r…

【贪心算法】贪心算法

贪心算法简介 1.什么是贪心算法2.贪心算法的特点3.学习贪心的方向 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.什么是贪心算法 与其说是…

C++ | Leetcode C++题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<string> readBinaryWatch(int turnedOn) {vector<string> ans;for (int i 0; i < 1024; i) {int h i >> 6, m i & 63; // 用位运算取出高 4 位和低 6 位if (h < 12 &&a…

如何在算家云搭建MindSearch(智能搜索)

一、MindSearch简介 MindSearch是一款由上海人工智能实验室书生浦语团队提出了 MindSearch&#xff08;思索&#xff09;框架&#xff0c;旨在提供高效、精准的信息检索服务&#xff0c;能够在 3 分钟内主动从 300 网页中搜集整理有效信息&#xff0c;总结归纳&#xff0c;解决…

[“1“, “2“, “3“].map(parseInt)结果

parseInt 的用法 parseInt 是 JavaScript 中的一个全局函数&#xff0c;用于将字符串转换为整数。它的基本语法如下&#xff1a; parseInt(string, radix);string&#xff1a;要解析的字符串。radix&#xff08;可选&#xff09;&#xff1a;字符串的基数&#xff0c;可以是 …

初级练习[2]:Hive SQL查询汇总分析

目录 SQL查询汇总分析 成绩查询 查询编号为“02”的课程的总成绩 查询参加考试的学生个数 分组查询 查询各科成绩最高和最低的分 查询每门课程有多少学生参加了考试(有考试成绩) 查询男生、女生人数 分组结果的条件 查询平均成绩大于60分的学生的学号和平均成绩 查询至少…

学习笔记 韩顺平 零基础30天学会Java(2024.9.13)

P545 TreeMap源码解读 TreeSet的k-v其中的v是一个静态的对象&#xff0c;但是TreeMap的v是可以变化的 TreeMap使用默认构造器取出的顺序和添加的顺序是不一样的&#xff0c;但是有构造器实现了Comparator接口的匿名内部类&#xff0c;可以按顺序排序 P546 Collections工具类1 P…

不入耳蓝牙耳机排行榜第一名是哪个品牌?解密最值得购买的五大品牌!

​到了2024年&#xff0c;开放式耳机无疑成为了耳机市场的宠儿。它们的优势在于&#xff0c;不仅佩戴舒适&#xff0c;还能在保护听力的同时&#xff0c;让你保持对周围环境的警觉&#xff0c;这对于爱好户外探险的朋友来说&#xff0c;无疑是一个巨大的安全加分项。作为一名资…

【初识Linux】Linux下基本指令

01. ls 指令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项&#xff1a; -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件。 -…

AI与艺术的碰撞:当机器开始创作,创造力何在?

一、引言 艺术与创造力的定义及重要性 艺术&#xff0c;作为人类情感和思想的表达形式&#xff0c;涵盖了绘画、音乐、文学等多种领域。它不仅是文化传承的载体&#xff0c;更是人类想象力和创造力的结晶。创造力&#xff0c;则是推动艺术发展和社会进步的关键力量&#xff0…

高性能编程:无锁队列----MsgQueue代码实践

目录 概述 代码结构 1. 头文件解析 (msgqueue.h) 2. 实现文件解析 (msgqueue.c) 核心功能解析 2.1 创建队列 (msgqueue_create) 2.2 放入消息 (msgqueue_put) 2.3 获取消息 (msgqueue_get) 2.4 交换队列 (__msgqueue_swap) 2.5 阻塞与非阻塞模式 2.6 销毁队列 (msgq…

GPT Prompt

Reference https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-apihttps://platform.openai.com/docs/guides/prompt-engineeringbilibili 8分钟系统学习提示工程,别再说大模型还不够聪明!Prompt Engineering,提示词,Few…

深兰科技董事长陈海波应出席“香港大学国际科创大赛”

近日&#xff0c;以“人工智能与智能制造”为主题的“香港大学国际科创大赛——知识转化论坛(沪港场)”在上海市普陀区隆重举行&#xff0c;众多来自人工智能与智能制造领域的专家学者与企业高管齐聚一堂&#xff0c;共话人工智能、智能制造与新质生产力的深度融合、最新进展以…

第 11篇 Helm 部署 RabbitMQ

文章目录 RabbitMQ 简介Helm ChartChart 版本选择自定义 values.yaml部署效果 参考相关博文 &#x1f680; 本文内容&#xff1a;在 Helm 中部署 RabbitMQ。 RabbitMQ 简介 ⭐ RabbitMQ&#xff1a;开源、通用消息代理&#xff0c;为一致性、高可用消息场景设计&#xff0c;包…

想引领潮流,得保持动销方案创新!

在竞争激烈的市场中&#xff0c;动销方案创新至关重要。 创新动销方案能提升品牌知名度与美誉度&#xff0c;吸引消费者关注&#xff0c;提高曝光度&#xff1b;还可增加销售额与市场份额&#xff0c;激发购买兴趣&#xff1b;更能增强企业竞争力&#xff0c;在同质化竞争中脱…

TiDB 扩容过程中 PD 生成调度的原理及常见问题丨TiDB 扩缩容指南(一)

导读 作为一个分布式数据库&#xff0c;扩缩容是 TiDB 集群最常见的运维操作之一。本系列文章&#xff0c;我们将基于 v7.5.0 具体介绍扩缩容操作的具体原理、相关配置及常见问题的排查。 通常&#xff0c;我们根据当前资源状态来决定是否需要调整 TiKV 节点的规模&#xff0…

Nacos 2.x为什么新增了RPC的通信方式?

Nacos 2.X 在 1.X 的架构基础上&#xff0c;通信层通过 gRPC 和 Rsocket 实现了长连接 RPC 调用和推送能力。主要是为了改善 Nacos 在大规模集群环境下的性能和稳定性。 同时新增一个链接层&#xff0c;用来将不同类型 Request 请求&#xff0c;将来自不同客户端的不同类型请求…