「STC8A8K64D4开发板」——外部中断(INT0~INT4)

news2024/11/24 13:34:09

第2-4讲:外部中断(INT0~INT4)

    1. 学习目的
  1. 学习中断的相关概念。
  2. 掌握外部中断配置及中断优先级配置的程序设计。
  3. 掌握中断服务程序的编写。
    1. 中断相关概念
  1. 什么是中断

中断系统是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。

CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。

中断机制能让紧急的事情得到及时的响应,从而大大的提高了程序的实时响应能力。

  1. 中断优先级

单片机通常会有多个中断源,当多个中断源同时发出中断请求时,CPU应该先响应哪一个中断?

为了解决这个问题,单片机规定了中断优先级,各个中断可以根据事情的轻重缓急分配不同的优先级。这样,当多个中断源同时发出中断请求时,优先级高的中断能先被响应,优先级高的中断执行完成之后再去执行优先级低的中断请求。

STC8A8K64D4除INT2、INT3、定时器2、定时器 3和定时器 4外,其他中断均有4级中断优先级可设置。

高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序(自然优先级)来决定系统先响应哪个中断。

  1. 中断嵌套

当CPU响应某一中断时,若有优先级更高的中断源发出中断请求,则CPU会中断正在进行的中断服务程序,并保护现场,响应更高优先级的中断,高优先级的中断处理完成后,再继续进行被中断的中断服务程序,这个过程称为中断嵌套。如果发出新的中断请求的中断源的优先权级别与正在处理的中断源同级或更低时,CPU不会响应这个中断请求,直至正在处理的中断服务程序执行完以后才会去处理新的中断请求。

  1. 中断的开启和关闭

单片机的中断通常可以开启和关闭,用户通过编程可以控制中断的开启和关闭,这样,用户就可以根据自己的需求使用相应的中断。

使用STC单片机时,用户可以用关总中断允许位(EA/IE.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打开相应的中断允许位来使CPU响应相应的中断申请, 每一个中断源可以用软件独立地控制为开中断或关中断。

    1. STC8A8K64D4外部中断

STC8A8K64D4单片机有5个外部中断INT0~INT4,如下表所示。

表1:STC8A8K64D4外部中断

GPIO

外部中断

中断号

说明

P3.2

INT0

0

外部中断0,支持上升沿和下降沿中断,中断优先级可配置为0、1、2、3。

P3.3

INT1

2

外部中断1,支持上升沿和下降沿中断,中断优先级可配置为0、1、2、3。

P3.6

INT2

10

外部中断2,只支持下降沿中断,中断优先级只能为最低优先级0。

P3.7

INT3

11

外部中断3,只支持下降沿中断,中断优先级只能为最低优先级0。

P3.0

INT4

16

外部中断4,只支持下降沿中断,中断优先级可配置为0、1、2、3。

读者在使用这些外部中断的时候,要注意下面两点:

  1. 中断触发方式:INT0和INT1支持上升沿和下降沿触发中断,而INT2、INT3和INT4仅支持下降沿触发中断。对于INT0和INT1,触发方式通过TCON寄存器中的IT0位和IT1位配置,如外部中断0:
  1. IT0=0:上升沿或下降沿均可触发外部中断0。
  2. IT0=1,下降沿触发外部中断0。

这里,我们可以看到INT0和INT1是无法配置为单独的上升沿触发中断的,这一点也是编程时需要特别注意的事项。

  1. 中断优先级:INT0、INT1和INT4的中断优先级是可配置的,可配置的优先级别为0~3,而INT2和INT3的中断优先级是固定的,只能是0。
    1. 软件设计
      1. 外部中断应用步骤

外部中断的应用流程如下图所示,其中配置外部中断对应的IO为输入和开启GPIO的上/下拉电阻在前文已经讲解过,这里不再赘述。本节,我们重点描述外部中断初始化和中断服务程序的编写。

 

图1:外部中断应用步骤

        1. 初始化外部中断

初始化外部中断所要做的工作主要包括使能需要使用的外部中断、配置外部中断的触发方式以及配置中断优先级,最后开启总中断。

  1. 使能需要使用的外部中断

外部中断中的INT0和INT1的开启和关闭由中断使能寄存器IE的位0(EX0)和位2(EX1)控制,如下图所示。

 

图2:IE寄存器

  1. EA:总中断允许控制位。EA 的作用是使中断允许形成多级控制。即各中断源首先受 EA 控制,其次还受各中断源自己的中断允许控制位控制。

0:CPU 屏蔽所有的中断申请

1:CPU 开放中断

  1. EX0:外部中断0中断允许位。

0:禁止 INT0 中断。

1:允许 INT0 中断。

  1. EX1:外部中断1中断允许位。

0:禁止INT1中断。

1:允许INT1中断。

外部中断里面的INT2、INT3和INT4的开启和关闭由外部中断与时钟输出控制寄存器INTCLKO的位4(EX2)、位5(EX3)和位6(EX4)控制,如下图所示。

 

图3:中断与时钟输出控制寄存器

  1. EX2:外部中断2中断允许位。

0:禁止INT2中断。

1:允许INT2中断。

  1. EX3:外部中断 3 中断允许位。

0:禁止INT3中断。

1:允许INT3中断。

  1. EX4:外部中断4中断允许位。

0:禁止INT4中断。

1:允许INT4中断。

  1. 配置外部中断的触发方式

外部中断0和1的触发方式由“定时器0/1控制寄存器TCON”中的位0(IT0)和位2(IT1)控制,如下图所示。

读者需要注意的是:INT2、INT3和INT4只有下降沿触发方式,因此,他们的触发方式是无需配置的(单片机也没有提供可配置的寄存器)。

 

图4:TCON寄存器

  1. IT0:外部中断源0触发控制位。 IT0=0,上升沿或下降沿均可触发外部中断0。 IT0=1,外部中断0为下降沿触发方式。
  2. IT1:外部中断源1触发控制位。 IT1=0,上升沿或下降沿均可触发外部中断1。 IT1=1,外部中断1为下降沿触发方式。
  1. 配置中断优先级

STCA8K64D4的5个外部中断里面,INT0、INT1和INT4的中断优先级是可配置为0~3级别的,INT2和INT3的中断优先级是固定为最低级别0的,是不能配置的。中断优先级控制寄存器如下图所示。

 

图5:中断优先级控制寄存器

  1. PX0H,PX0:外部中断0中断优先级控制位,复位值为00,即最低优先级。

00:INT0 中断优先级为 0 级(最低级)。

01:INT0 中断优先级为 1 级(较低级)。

10:INT0 中断优先级为 2 级(较高级)。

11:INT0 中断优先级为 3 级(最高级)。

  1. PX1H,PX1:外部中断1中断优先级控制位,复位值为00,即最低优先级。

00:INT1 中断优先级为 0 级(最低级)。

01:INT1 中断优先级为 1 级(较低级)。

10:INT1 中断优先级为 2 级(较高级)。

11:INT1 中断优先级为 3 级(最高级)。

  1. PX4H,PX4:外部中断4中断优先级控制位,复位值为00,即最低优先级。

00:INT4 中断优先级为 0 级(最低级)。

01:INT4 中断优先级为 1 级(较低级)。

10:INT4 中断优先级为 2 级(较高级)。

11:INT4 中断优先级为 3 级(最高级)。

  1. 优先级配置示例:配置INT0的中断优先级为0

代码清单:INT0中断优先级配置示例

  1. IP  &= ~0x01;   //配置INT0的中断优先级为0,即设置PX0H PX0 = 0 0  
  2. IPH &= ~0x01;  

        1. 编写中断服务函数

中断服务函数是由硬件自动调用的,应用程序是不能调用中断服务函数的。中断服务函数使用关键字“interrupt”声明,其格式如下:

代码清单:中断服务函数声明格式

  1. void 函数名(void) interrupt n using m {  
  2. //用户代码 
  3.   

上面的中断服务函数声明中:

  1. void:中断服务函数返回值类型必须为void类型,因此,这里必须是void,指明函数无返回值。
  2. 函数名:开发人员命名,和普通函数命名方式一样。
  3. (void):中断服务函数不能调用参数,因此,这里必须是void,指明函数无参数。
  4. interrupt:声明中断服务函数的关键字,指明该函数是一个中断服务函数。
  5. n:中断号,就是中断查询次序号。必须是整数,取值范围0-31。中断号和中断源是对应的(如外部中断0的中断号是0),因此,中断号表示的是该中断服务函数所对应的中断源。STC8A8K64D4单片机的各个中断源的中断号可以在单片机的数据手册中查询(《STC8A8K64D4系列单片机技术参考手册》第958页:中断列表)。
  6. using m:用指定该中断服务程序要使用的工作寄存器组号,通常使用缺省值,即中断服务函数中省略“using m”。

  1. 示例:下面的代码是外部中断0的中断服务函数,其中断号为0,该函数中翻转指示灯D1状态。当我们初始化(开启INT0中断,配置触发方式和优先级)外部中断0并且开启了总中断之后,如果外部中断0发生,单片机硬件会自动调用该中断服务函数。

代码清单:外部中断0的中断服务函数

  1. void ext_int0_isr (void) interrupt 0         
  2. {  
  3.    led_toggle(LED_1);        //翻转用户指示灯D1

      1. 外部中断实验
  • 注:本节的实验是在“实验2-3-2:触摸按键检测”的基础上修改,本节对应的实验源码是:“实验2-4-1:外部中断”。
        1. 实验内容
  1. 编写INT0~INT4,5个外部中断的初始化和中断服务函数。
  2. 主函数中初始化外部中断2(下降沿中断)和外部中断3(下降沿中断),即本实验演示外部中断2和外部中断3。这里使用外部中断2和外部中断3,是因为他们的引脚连接到了按键Key2和按键Key1,方便测试。按下按键Key2触发外部中断2,外部中断2的中断服务函数中翻转指示灯D2的状态(由亮变灭或由灭变亮),按下按键Key1触发外部中断3,外部中断3的中断服务函数中翻转指示灯D1的状态(由亮变灭或由灭变亮)。
        1. 代码编写
  1. 新建一个名称为“exint.c”的文件及其头文件“exint.h”并保存到工程的“Source”文件夹,并将“exint.c”加入到Keil工程中的“SOURCE”组。
  2. 引用头文件

因为在“main.c”文件中使用了“exint.c”文件中的函数,所以需要引用下面的头文件“exint.h”。

代码清单:引用头文件

  1. //引用外部中断头文件  
  2. #include  "exint.h" 

  1. 编写5个外部中断的初始化和中断服务函数

中断服务函数中执行的功能均为翻转指示灯的状态的样例代码,读者可以在中断服务函数中根据自己的实际需求编写功能代码,但是需要注意的是:中断服务函数中的功能代码要做到“短小精悍”,尽可能的减少占用中断的时间,花费时间较多的程序代码可以放到主程序中运行。

下面的代码列出了外部中断2和外部中断3的中断初始化和中断服务函数,其他外部中断的代码读者可以在本节的例子程序里面查看。

  1. 外部中断2的初始化函数和中断服务函数

外部中断2的触发方式只能是下降沿触发,中断优先级只能是最低优先级0,因此,初始化函数里面没有触发方式和中断优先级的配置。

代码清单:外部中断2初始化函数

  1. /*********************************************************** 
  2. 功能描述:外部中断2初始化,外部中断2的引脚:P3.6 
  3.         :INT2只能下降沿触发外部中断 
  4. 参    数:无 
  5. 返 回 值:无 
  6. ************************************************************/  
  7. void ext_int2_init(void)  
  8. {  
  9.     //使能INT2中断注意:开启外部中断2中断的情况下,还需要开启总中断“EA=1”,中断才能起作用
  10.    INT2_Enable();  
  11. }  

代码清单:外部中断2中断服务函数

  1. /******************************************************************************** 
  2. 功能描述:外部中断2的中断服务程序 
  3. 参    数:无 
  4. 返 回 值:无 
  5. *********************************************************************************/  
  6. void ext_int2_isr (void) interrupt 10          
  7. {  
  8.    //可以在这里加入自己的应用代码,但是注意:中断服务函数中占用的时间尽可能的短
  9.    led_toggle(LED_2);        //翻转用户指示灯D2
  10. }  
  1. 外部中断3的初始化函数和中断服务函数

外部中断3同样只支持下降沿触发,中断优先级只能是最低优先级0,因此,初始化函数里面没有触发方式和中断优先级的配置。

代码清单:外部中断3初始化函数

  1. /******************************************************************************** 
  2. 功能描述:外部中断3初始化,外部中断3的引脚:P3.7
  3. 参    数:无 
  4. 返 回 值:无 
  5. *********************************************************************************/  
  6. void ext_int3_init(void)  
  7. {  
  8.    //使能INT3中断,注意:开启外部中断3中断的情况下,还需要开启总中断“EA=1”,中断才能起作用
  9.    INT3_Enable(); 
  10. }  

代码清单:外部中断3中断服务函数

  1. /*********************************************************** 
  2. 功能描述:外部中断0的中断服务程序 
  3. 参    数:无 
  4. 返 回 值:无 
  5. ************************************************************/  
  6. void ext_int3_isr (void) interrupt 11
  7. {  
  8.    //可以在这里加入自己的应用代码,但是注意:中断服务函数中占用的时间尽可能的短
  9.    led_toggle(LED_1);        //翻转用户指示灯D1
  10. }  
  1. 主函数

主函数中配置外部中断2的引脚P3.6和外部中断3的引脚P3.7为准双向输入,接着调用外部中断2和3的初始化函数ext_int2_init()和ext_int3_init()完成外部中断2和3 的初始化,之后开启总中断即可。

代码清单:主函数

  1. /************************************************************************** 
  2. 功能描述:主函数 
  3. 入口参数:无 
  4. 返 回 值:int类型 
  5. **************************************************************************/  
  6. int main(void)  
  7. {  
  8.    P2M1 &= 0x3F;   P2M0 &= 0x3F;     //设置P2.6~P2.7为准双向口(指示灯D1和D2)  
  9.    P7M1 &= 0xF9;   P7M0 &= 0xF9;     //设置P7.1~P7.2为准双向口(指示灯D4和D3)  
  10.    P3M1 &= 0x3F;   P3M0 &= 0x3F;     //设置P3.6~P3.7为准双向口(按键KEY2和KEY1)  
  11.   
  12. //如果按键电路上没有外部上拉电阻,需要开启GPIO的片内上拉。  
  13. //开发板的按键电路设计了上拉电阻,因此,无需开启片内上拉     
  14. //  P_SW2 |= 0x80;                  //将EAXFR位置1,以访问在XDATA区域的扩展SFR  
  15. //  P3PU |= 0xC0;                   //开启P3.6、P3.7的上拉电阻  
  16. //  P_SW2 &= 0x7F;                  //将EAXFR位置0,恢复访问XRAM      
  17.       
  18.   ext_int2_init();              //初始化外部中断2  
  19.   ext_int3_init();              //初始化外部中断3  
  20.   EA = 1;                       //允许总中断  
  21.   while(1)  
  22.   {  
  23.   }  
  24. }

        1. 硬件连接

本实验需要使用LED指示灯和按键,因此需要用跳线帽短接复用引脚的指示灯(D1和D2)和按键(KEY1和KEY2)。

 

图6:跳线帽短接

        1. 实验步骤
  1. 解压“…\第3部分:配套例程源码”目录下的压缩文件“实验2-4-1:外部中断”,将解压后得到的文件夹拷贝到合适的目录,如“D\STC8”(这样做的目的是为了防止中文路径或者工程存放的路径过深导致打开工程出现问题)。
  2. 双击“…\extint\project”目录下的工程文件“extint.uvproj”。
  3. 点击编译按钮编译工程,编译成功后生成的HEX文件“extint.hex”位于工程的“…\extint\Project\Object”目录下。
  4. 打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。
  5. 程序运行后,按下按键KEY1触发外部中断3,中断服务函数中翻转指示灯D1的状态(由亮变灭或由灭变亮)。按下按键KEY2触发外部中断2,中断服务函数中翻转指示灯D2的状态(由亮变灭或由灭变亮)
  • 注意事项:

因为按键存在抖动,因此一次按键可能会多次触发中断,即指示灯状态会翻转多次。

      1. 中断优先级抢占实验
  • 注:本节的实验是在“实验2-4-1:外部中断”的基础上修改,本节对应的实验源码是:“实验2-4-2:中断优先级抢占”。
        1. 实验内容
  1. 配置INT0(P3.2用杜邦线连接到触摸按键电路):上升/下降沿触发中断,中断优先级为优先级1,中断服务函数中翻转指示灯D2状态。
  2. 配置INT3(P3.7连接到按键KEY1):下降沿中断,中断优先级为最低优先级0,中断服务函数中翻转指示灯D1状态,并延时5秒。这里延时5秒是为了在INT3中断退出前有足够的时间去按下触摸按键触发INT0,演示INT0抢占INT3,方便我们理解中断优先级抢占。切记,实际应用的时候不能在中断服务函数中进行长延时。

        1. 代码编写
  1. 编写INT0的初始化和中断服务函数

外部中断0的触发方式配置为上升/下降沿触发中断,中断优先级配置为1,代码清单如下。

代码清单:外部中断0初始化函数

  1. /******************************************************************************
  2. 功能描述:外部中断0初始化,外部中断0的引脚:P3.2,INT0可以配置为 
  3.         :上升沿或下降沿均可触发外部中断(IT0=0) 
  4.         :下降沿触发外部中断(IT0=1)            
  5. 参    数:无 
  6. 返 回 值:无 
  7. *******************************************************************************/  
  8. void ext_int0_init(void)  
  9. {  
  10.    INT0_Enable();  //使能INT0中断         
  11.    IT0  = 0;           //上升沿或下降沿均可触发外部中断0  
  12.    //设置INT0的中断优先级为1,即设置PX0H PX0 = 0 1,本例中INT3优先级设置为0,所以INT0可以抢占INT3
  13.    IP  |= 0x01;      
  14.    IPH &= ~0x01;  
  15.       
  16.    //设置INT0的中断优先级为0,即设置PX0H PX0 = 0 0,本例中INT3优先级设置为0,INT0和INT3优先级相
  17.    //同,无法抢占
  18.    //IP  &= ~0x01;  
  19.    //IPH &= ~0x01;  
  20. }  

INT0中断服务函数中翻转指示灯D2状态,由指示灯D2的状态即可判断INT0有没有触发,代码清单如下。

代码清单:外部中断0中断服务函数

  1. /************************************************************************** 
  2. 功能描述:外部中断0的中断服务程序 
  3. 参    数:无 
  4. 返 回 值:无 
  5. ***************************************************************************/  
  6. void ext_int0_isr (void) interrupt 0          
  7. {  
  8.    //可以在这里加入自己的应用代码,但是注意:中断服务函数中占用的时间尽可能的短  
  9.    led_toggle(LED_2);  
  10. }  

  1. 外部中断3的初始化函数和中断服务函数

外部中断3只支持下降沿触发,中断优先级只能是最低优先级0(优先级低于前面配置的外部中断0),因此,INT0可以抢占INT3。

代码清单:外部中断3初始化函数

  1. /******************************************************************************** 
  2. 功能描述:外部中断3初始化,外部中断3的引脚:P3.7
  3. 参    数:无 
  4. 返 回 值:无 
  5. *********************************************************************************/  
  6. void ext_int3_init(void)  
  7. {  
  8.    //使能INT3中断,注意:开启外部中断3中断的情况下,还需要开启总中断“EA=1”,中断才能起作用
  9.    INT3_Enable(); 
  10. }  

INT3中断服务函数中翻转指示灯D1状态,并延时5秒,以方便演示中断抢占,代码清单如下。

代码清单:外部中断3中断服务函数

  1. /*********************************************************** 
  2. 功能描述:外部中断0的中断服务程序 
  3. 参    数:无 
  4. 返 回 值:无 
  5. ************************************************************/  
  6. void ext_int3_isr (void) interrupt 11
  7. {  
  8.    led_toggle(LED_1); //翻转用户指示灯D1
  9.    delay_ms(5000);    //延时5秒,这是为了方便延时中断抢占,实际应用时不要在中断服务函数中执行长延时
  10. }  
  1. 主函数

主函数中配置外部中断0的引脚P3.2和外部中断3的引脚P3.7为准双向输入,接着调用外部中断0和3的初始化函数ext_int0_init()和ext_int3_init()完成外部中断0和3 的初始化,之后开启总中断即可。

代码清单:主函数

  1. /************************************************************************** 
  2. 功能描述:主函数 
  3. 入口参数:无 
  4. 返 回 值:int类型 
  5. **************************************************************************/  
  6. int main(void)  
  7. {  
  8.    P2M1 &= 0x3F;   P2M0 &= 0x3F;     //设置P2.6、P2.7为准双向口(指示灯D1和D2)  
  9.    P3M1 &= 0x7F;   P3M0 &= 0x7F;     //设置P3.7为准双向口(KEY1)  
  10.    P3M1 &= 0xFB;   P3M0 &= 0xFB;     //设置P3.2为准双向口(外部中断0,用杜邦线连接到触摸按键电路 
  11.       
  12. //如果按键电路上没有外部上拉电阻,需要开启GPIO的片内上拉。  
  13. //开发板的按键电路设计了上拉电阻,因此,无需开启片内上拉     
  14. //  P_SW2 |= 0x80;             //将EAXFR位置1,以访问在XDATA区域的扩展SFR  
  15. //  P3PU |= 0x80;              //开启P3.7的上拉电阻  
  16. //  P_SW2 &= 0x7F;             //将EAXFR位置0,恢复访问XRAM      
  17.       
  18.   ext_int0_init();              //初始化外部中断0  
  19.   ext_int3_init();              //初始化外部中断3  
  20.   EA = 1;                       //允许总中断  
  21.   while(1)  
  22.   {  
  23.   }  
  24. }  

        1. 硬件连接

本实验需要使用LED指示灯D1、D2和按键KEY1以及触摸按键电路,用跳线帽短接复用引脚的指示灯D1、D2和按键KEY1(INT3),用杜邦线将双排针J14上的针P32连接到双排针J26上的针TOUCH上(INT0)。 

 

图7:跳线帽短接

        1. 实验步骤
  1. 解压“…\第3部分:配套例程源码”目录下的压缩文件“实验2-4-2:中断优先级抢占”,将解压后得到的文件夹拷贝到合适的目录,如“D\STC8”(这样做的目的是为了防止中文路径或者工程存放的路径过深导致打开工程出现问题)。
  2. 双击“…\extint_pri\project”目录下的工程文件“extint_pri.uvproj”。
  3. 点击编译按钮编译工程,编译成功后生成的HEX文件“extint_pri.hex”位于工程的“…\extint\Project\Object”目录下。
  4. 打开STC-ISP软件下载程序,下载使用内部IRC时钟,IRC频率选择:24MHz。
  5. 程序运行后,按下按键KEY1触发外部中断3,可以观察到指示灯D1状态改变。5秒内即INT3还未退出的情况下按下触摸按键,可以观察到指示灯D2状态改变。这说明由于程序中配置的INT0的优先级高于INT3的优先级,高优先级的中断可以抢占低优先级的中断。
  • 注意事项:

因为按键存在抖动,因此一次按键可能会多次触发中断,即指示灯状态会翻转多次。

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

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

相关文章

面试题30天打卡-day19

1、TCP 和 UDP 协议有什么区别,分别适用于什么场景? TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种常用的传输层协议,两者的区别比较如下: TCPUDP可靠性…

数据库初认识之MySQL

关系型数据库 数据结构 二维表格 库 -> 表 -> 列(字段):用来描述对象的一个属性 行(记录):用来描述一个对象的信息 Mysql(5.7/8.0) …

2023百度强引百度蜘蛛方法(百度蜘蛛秒引工具)

当谈到SEO时,关键字是最基本的元素之一。使用正确的关键字可以帮助您的网站在搜索引擎结果页面(SERP)中排名更高。在本篇文章中,我们将重点介绍2023年百度强引百度蜘蛛方法和百度蜘蛛秒引工具,并提供一些有用的SEO技巧…

比特米盒子刷安卓ATV6.0

最近海鲜市场有很多比特米盒子,50多块包邮,买来的盒子回来折腾下,买回来发现一直卡在“系统启动"中无法进入,不知道原来的是啥系统,看来只能找找线刷的办法,重新拯救救个这盒子。 原文链接地址&#x…

windows 下配置ssh 秘钥到souretree进行使用

一、准备工作 1、安装好git 客户端 并配置好环境变量 下载后,按照向导一步一步进行操作即可,具体步骤这里就不再进行说明。 注意:配置环境变量。 2、准备生成好SSH 秘钥文件 (默认文件名:id_rsa.rsa) &a…

【Ubuntu18.04使用yolov5教程】

欢迎大家阅读2345VOR的博客【Ubuntu18.04使用yolov5教程】🥳🥳🥳2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空…

[LeetCode周赛复盘] 第 343 场周赛20230430

[LeetCode周赛复盘] 第 343 场周赛20230430 一、本周周赛总结2660. 保龄球游戏的获胜者1. 题目描述2. 思路分析3. 代码实现 2661. 找出叠涂元素1. 题目描述2. 思路分析3. 代码实现 2662. 前往目标的最小代价1. 题目描述2. 思路分析3. 代码实现 2663. 字典序最小的美丽字符串1.…

优化Google Cloud Storage大文件上传和内存溢出

背景 我们的项目每天都会并行上传好几万份文件到下游的GCP Cloud Storage,当文件比较大时,会采用GCP的可续上传方案,通过把文件切分成多个数据块,分多次HTTP请求上传到GCP Bucket,具体可参考https://cloud.google.com…

560. 和为 K 的子数组【哈希、前缀和】

560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1: 输入:nums [1,1,1], k 2 输出:2 示例 2: 输入:nums [1,2,3], k 3 输出&…

智能座舱3.0阶段,看全球巨头如何打造更具“价值”的第三空间

面向中国这一全球最大的汽车电动化与智能化单一市场,作为全球第七大汽车技术供应商的FORVIA佛瑞亚集团开始全面发力。 在2023年上海国际车展上,FORVIA佛瑞亚携旗下佛吉亚与海拉一系列突破性技术和互动体验亮相,展示了对电气化与能源管理、安…

SpringMVC详细介绍和@RequestMapping详细使用说明

目录 SpringMVC SpringMVC 介绍 说明是 MVC MVC 全称∶ Model 模型、View 视图、 Controller 控制器。 MVC 是一种思想 MVC 示意图 理解和解读 SpringMVC 特点&概述 梳理 Spring SpringMVC SpringBoot 的关系 SpringMVC-快速入门 SpringMVC 登录流程分析 SpringM…

OpenGL学习教程之 材质

材质 在真实世界里,每个物体会对光产生不同的反应。钢看起来比陶瓷花瓶更闪闪发光,一个木头箱子不会像钢箱子一样对光产生很强的反射。每个物体对镜面高光也有不同的反应。有些物体不会散射(Scatter)很多光却会反射(Reflect)很多光,结果看起来…

Wireshark的安装及基本使用【计算机网络】

Wireshark的安装与基本使用【计算机网络】 前言推荐Wireshark的安装与基本使用一、下载二、安装三、使用技巧四、简单使用4.1 捕获4.2 简单介绍4.3 过滤 问题 最后 前言 2023-5-4 20:51:42 以下内容源自《【计算机网络】》 仅供学习交流使用 推荐 Wireshark的下载安装及简单…

macOS 13.4Beta 4(22F5059b)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直接替换opencore分区文件为clover引导文件)备注…

【软考高项笔记】第3章 信息系统治理(针对甲方)3.1 IT治理

第3章 信息系统治理(针对甲方) 3.1 IT治理 不同于管理,角度更高3.1.1 IT治理基础 目标价值 与业务目标一致 有效利用信息与数据资源 风险管理 管理层次 最高管理层 (定目标,战略) 执行管理层 &#xff08…

MySQL中添加环境变量和初始化MySQL

添加环境变量 环境变量里面有很多选项,这里我们只用到Path 这个参数。为什么在初始化的开始要添加环境变量呢?在黑框(即CMD) 中输入一个可执行程序的名字,Windows会先在环境变量中的Path所指的路径中寻找一遍,如果找到了就直接执行&#xf…

Android 开发中常见的架构设计模式组件化、插件化和模块化

在 Android 中,组件化、插件化和模块化都是很常见的架构设计手段,用于提高应用开发的灵活性、扩展性和复用性。组件化、插件化和模块化可以混合使用,根据项目的需求和规模选择合适的方案。 组件化(Componentization) 组件化是指将一个大型的…

国产!全志科技T507-H工业核心板( 4核ARM Cortex-A5)规格书

1核心板简介 创龙科技 SOM-TLT507 是一款基于全志科技 T507-H 处理器设计的 4 核 ARM Cortex-A 53 全国产工业核心板,主频高达 1.416GHz 。核心板 CPU 、ROM 、RAM、电源、晶振等所有元器件均采用国产工业级方案,国产化率 100%。 核心板通过邮票孔连接方式引出 MIPI CSI 、…

设计模式——模板方法模式

是什么? 在我们的实际开发中尝尝会遇到这种问题:在设计一个系统时知道了算法所需要的关键步骤,而且确定了这些步骤的执行顺序,但是某些步骤的具体实现还不知道,或者说某些步骤的实现与具体的环境相关,例如每…

CypherRat使用

cypherrat3.5 安卓远控,很早之前在tg下的,现在可能有高版本的 使用感受 图形化界面(相比于msf)可用于演练新场景,实战的话只能用xx破解版或是瑟瑟apk让人忽视风险继续安装由于国内安卓,部分功能失效 生成…