主頁 >  其他 > STM32單片機(五).中斷系統

STM32單片機(五).中斷系統

2021-04-20 12:48:37 其他

中斷的概念: 中斷是當單片機的CPU在執行程式時,外部或內部發生了一個隨機事件,導致CPU暫時中斷正在執行的程式,轉去執行一段特殊的服務程式也就是中斷服務子程式或中斷處理程式,當處理完服務程式后,回傳到被中斷的程式繼續執行,這樣的一個程序就被稱為中斷,引發這個中斷的事件被稱為中斷源,中斷在stm32中還被分為相應的優先級,低優先級的中斷會被高優先級中斷所中斷,即為中斷的嵌套,在Crotex-M3內核中支持256個中斷,其中包含16個內核中斷以及240個外部中斷,STM32F10X芯片中只用了其中的84個中斷通道,包含16個內核中斷和68個可屏蔽中斷,
中斷的優先級: STM32的每個中斷通道都有一個中斷優先級控制位元組(8位二進制資料,可設定為0~255,數值越小,優先級越高,在STM32F103中只用其中高4位資料),其用于表達優先級的高4位又被分為搶占式優先級和回應式優先級,在搶占式優先級相同情況下,高回應優先級的中斷優先被回應,優先級相同時,按照中斷回應的順序執行服務程式,越靠前的先執行,中斷的相關功能需要通過NVIC(嵌套向量中斷器)來配置,
中斷的配置: 首先使能某個外設中斷;然后設定中斷優先級分組,初始化NVIC_InitTypeDef結構體,設定搶占優先級和回應優先級,使能中斷請求;最后撰寫中斷服務函式,

1、外部中斷編程

1.1 EXTI的結構

在STM32F10X芯片中外部中斷/事件控制器(EXTI)有20個用于產生中斷/事件請求的邊沿檢測器,其對應的每一根輸入線都可以單獨進行配置,選擇“中斷”或“事件”型別以及觸發事件(上升沿觸發、邊沿觸發和下降沿觸發),還可以對中斷開啟屏蔽,外部中斷/事件控制器(EXTI)的結構如下圖中所示:

EXTI主要有兩個功能,一個用來產生中斷,另一個被用來產生事件
(1)產生中斷的線路由輸入線開始,經邊沿檢測電路,到一個或門電路再到一個與門電路,最后至NVIC中斷控制器結束,輸入線可以通過暫存器設定為任何一個GPIO引腳,也可以是外設的時間,在這部分主要是傳遞一個電平變化的信號;邊沿檢測電路可以對觸發方式進行選擇,有上升沿觸發、下降沿觸發以及邊沿觸發三種方式;或門電路使得中斷不僅可以由外部電路進行觸發也可以通過軟體來啟動中斷/事件;與門電路用來決定是否產生中斷,只有中斷屏蔽暫存器端和或門電路端的有效信號均為1時,中斷才會被產生;最后將掛起暫存器內容輸入到NVIC中,實作系統中斷事件的控制,
(2)產生事件的前三步與(1)相同,后經過一個與門電路,再經過一個脈沖發生器電路后結束,其中與門電路是用來決定是否產生事件,只有事件屏蔽暫存器端和或門電路端的有效信號均為1時,事件才會被產生;脈沖發生器電路只有在與門電路為有效信號1時才會輸出一個脈沖信號;脈沖信號可被用于其他外設電路的使用,如定時器、ADC等等,
從EXTI框圖中可以看出,中斷的輸出是NVIC控制器,從而會導致系統運行中斷服務函式,處于軟體層面;時間的輸出是脈沖信號流向其他外設電路,處于硬體層面,

1.2 外部中斷/事件線 映射

STM32F10X的EXTI對用連接的外設如下表中所示:

EXTI線路說明
EXTI 線 0~15對應外部IO口的輸入中斷
EXTI 線 16連接到PVD輸出
EXTI 線 17連接到RTC鬧鐘事件
EXTI 線 18連接到USB OTG FS喚醒時間
EXTI 線 19連接到以太網喚醒事件

從表中可以看出EXTI可供外部IO使用的中斷線有16根,但STM32F103芯片的IO口數量卻有很多,每個GPIO埠均有16個管腳對應了16根中斷線,中斷線每次只能連接在一個IO口上,因此就需要用到外部中斷的映射功能,通過AFIO(復用IO)的外部中斷配置暫存器1的EXTIx[3:0]位來決定對應的中斷線映射到哪個GPIO埠上,對于中斷映射到GPIO埠的配置函式在stm32f10x_gpio.c和stm32f10x_gpio.h中,所以在使用標準庫進行開發時需要將這兩個檔案添加到工程中,

1.3 外部中斷/事件線 映射

EXTI相關的庫函式在stm32f10x_exti.c和stm32f10x_exti.h檔案中,使用庫函式對外部中斷進行配置的步驟如下:

  1. 使能IO口時鐘,配置IO模式為輸入;
  2. 開啟AFIO時鐘,設定IO口與中斷線的映射關系;
    首先需要使能AFIO時鐘,其是掛載在APB2總線上的;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

然后將GPIO映射到對應的中斷線上;

GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourceY]);//Y是0~15號中斷線
  1. 配置中斷分組(NVIC),使能中斷;
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			//EXTI0 中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;		//搶占優先級
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; 			//子優先級
NVIC_Init(&NVIC_InitStructure);
  1. 初始化EXTI,選擇觸發方式;
    配置好NVIC后就需要對中斷線上的中斷進行初始化,需要呼叫void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)函式,其中結構體EXTI_InitTypeDef的成員變數有:
typedef struct
{
	uint32_t EXTI_Line; 				//中斷/事件線
	EXTIMode_TypeDef EXTI_Mode; 		//EXTI模式
	EXTITrigger_TypeDef EXTI_Trigger; 	//EXTI 觸發方式
	FunctionalState EXTI_LineCmd; 		//中斷線使能或失能
}

EXTI_Line: 可配置引數為EXTI0~EXTI20;
EXTI_Mode: 可配置為EXTI_Mode_Interrupt(中斷模式)和EXTI_Mode_Event(事件模式);
EXTI_Trigger: 可配置為EXTI_Trigger_Rising(上升沿觸發)、EXTI_Trigger_Falling(下降沿觸發)以及EXTI_Trigger_Rising_Falling(邊沿觸發);
EXTI_LineCmd: 配置ENABLE為使能,DISABLE為失能,
5. 撰寫EXTI中斷服務函式
中斷服務函式就是當外部中斷發生后,需要執行的一段用戶程式,可根據需求進行撰寫,

1.4 應用示例

在本小節中使用一個按鍵來觸發外部中斷,在服務函式中執行點亮LED的程式,這個功能是很簡單的,但也能夠解釋清楚外部中斷的配置程序,詳細的代碼如下所示(其中LED檔案的代碼在上一章節中已經給出):
exit.h

#ifndef _exti_H
#define _exti_H

#include "system.h"
void MY_EXTI_Init(void);

#endif

exit.c

#include "exti.h"
#include "SysTick.h"
#include "key.h"
#include "led.h"
void MY_EXTI_Init()
{
	NVIC_InitTypeDef NVIC_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
	
	NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	EXTI_InitStructure.EXTI_Line=EXTI_Line0;
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
	EXTI_Init(&EXTI_InitStructure);
	
	
	EXTI_InitStructure.EXTI_Line=EXTI_Line2|EXTI_Line3|EXTI_Line4;
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
	EXTI_Init(&EXTI_InitStructure);
	
}
void EXTI0_IRQHandler()
{
	if(EXTI_GetFlagStatus(EXTI_Line0)==1)
	{
		delay_ms(10);
		if(K_UP==1)
		{
			led2=0;
		}	
	}
	EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI2_IRQHandler()
{
	if(EXTI_GetFlagStatus(EXTI_Line2)==1)
	{
		delay_ms(10);
		if(K_LEFT==0)
		{
			led3=1;
		}	
	}
	EXTI_ClearITPendingBit(EXTI_Line2);
}
void EXTI3_IRQHandler()
{
	if(EXTI_GetFlagStatus(EXTI_Line3)==1)
	{
		delay_ms(10);
		if(K_DOWN==0)
		{
			led2=1;
		}	
	}
	EXTI_ClearITPendingBit(EXTI_Line3);
}
void EXTI4_IRQHandler()
{
	if(EXTI_GetFlagStatus(EXTI_Line4)==1)
	{
		delay_ms(10);
		if(K_RIGHT==0)
		{
			led3=0;
		}	
	}
	EXTI_ClearITPendingBit(EXTI_Line4);
}

key.h

#ifndef _key_H
#define _key_H

#include "system.h"

#define KEY_UP_Pin 		GPIO_Pin_0
#define KEY_LEFT_Pin 	GPIO_Pin_2
#define KEY_DOWN_Pin 	GPIO_Pin_3
#define KEY_RIGHT_Pin 	GPIO_Pin_4

#define KEY_UP_PORT 	GPIOA
#define KEY_PORT 		GPIOE

#define K_UP PAin(0)
#define K_DOWN PEin(3)
#define K_LEFT PEin(2)
#define K_RIGHT PEin(4)

#define KEY_UP 1
#define KEY_LEFT 3
#define KEY_DOWN 2
#define KEY_RIGHT 4

void KEY_Init(void);
u8 KEY_Scan(u8 mode);

#endif

key.c

#include "key.h"
#include "SysTick.h"
void KEY_Init()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin=KEY_UP_Pin;
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
	
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(KEY_UP_PORT,&GPIO_InitStructure);
	
	
	GPIO_InitStructure.GPIO_Pin=KEY_LEFT_Pin|KEY_DOWN_Pin|KEY_RIGHT_Pin;
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(KEY_PORT,&GPIO_InitStructure);
}


u8 KEY_Scan(u8 mode)
{
	static u8 key=1;
	if(key==1&&(K_UP==1||K_DOWN==0||K_LEFT==0||K_RIGHT==0))
	{
		delay_ms(10);
		key=0;
		if(K_UP==1)
		{
			return KEY_UP;
		}
		else if(K_DOWN==0)
		{
			return KEY_DOWN;
		}
		else if(K_LEFT==0)
		{
			return KEY_LEFT;
		}
		else if(K_RIGHT==0)
		{
			return KEY_RIGHT;
		}
	}
	else if(K_UP==0&&K_DOWN==1&&K_LEFT==1&&K_RIGHT==1)
	{
		key=1;
	}
	if(mode==1)
	{
		key=1;
	}
	return 0;
}

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "exti.h"
#include "key.h"

u8 i=0;
int main()
{
	SysTick_Init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	MY_EXTI_Init();
	LED_Init();
	KEY_Init();
	
	while(1)
	{
		i++;
		if(i%20==0)
		{
			led1=!led1;
		}
		delay_ms(10);
	}
}

2、 定時器中斷編程

STM32F1的定時器系統由2個基本定時器(TIM6、TIM7)、4個通用定時器(TIM2~TIM5)和2個高級定時器(TIM1、TIM8)所組成,基本定時器同51單片機內的定時器類似,功能較為簡單;通用定時器在其基礎上增加了輸入捕獲與輸出比較功能;高級定時器又在通用定時器基礎上增加了可編程死去互補輸出、重復計數、帶剎車(斷路)的功能主要針對于工業電機的控制,

2.1 通用定時器

STM32F1的通用定時器內有一個16位自動多載計數器(CNT)由可編程預分頻器(PSC)驅動,其可用于測量輸入信號的脈沖寬度(輸入捕獲)或者生產輸出波形(輸出比較和PWM),使用定時器預分頻器和RCC時鐘控制器預分頻器,脈沖長度和波形周期可以在幾微秒到幾毫秒之間調整,此外每一個定時器都是獨立的,之間不互相共享任何資源,通用定時器TIM2~TIM5具備如下功能:

  1. 16位向上、向下、向上/向下自動裝載計數器(TIMx_CNT);
  2. 16位可編程預分頻器,計數器時鐘頻率的分頻系數為1~65535;
  3. 4個獨立通道(TIMx_CH1~4),通道可以被用作輸入捕獲、輸出比較、PWM生成和單脈沖模式輸出功能;
  4. 可以使用外部信號(TIMx_ETR)控制定時器,可實作多個定時器互連的同步電路;
  5. 發生更新(計數器溢位、初始化)、觸發時間(計數器啟動、停止、初始化或者由內部/外部觸發計數)、輸入捕獲以及輸出比較事件時會產生中斷/DMA請求;
  6. 支持針對定位的增量(正交)編碼器和霍爾傳感器電路
  7. 觸發輸入作為外部時鐘或者按周期的電流管理,

2.2 定時器配置步驟

定時器相關的庫函式在stm32f10x_tim,c和stm32f10x_tim.h檔案中,使用庫函式對定時器進行配置的詳細步驟如下:

  1. 使能定時器時鐘;
    定時器是掛載在APB1總線上的設備,因此使能定時器可以呼叫函式:
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMx, ENABLE);
  2. 初始化定時器引數,包含了自動重裝值,分頻系數,計數方式等;
    呼叫函式:void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
    TIM_TimeBaseInitTypeDef為一個結構體型別,包含了定時器初始化的成員變數:
typedef struct
{
	uint16_t TIM_Prescaler;			//定時器預分頻器
	unit16_t TIM_CouterMode;		//計數模式
	unit16_t TIM_Period;			//定時器周期
	unit16_t TIM_ClockDivision;		//時鐘分頻
	unit8_t TIM_RepetitionCounter;	//重復計數器
}

TIM_Prescaler: 時鐘源經過該預分頻器后輸出的是定時器時鐘,設定范圍為0~65535;
TIM_CouterMode:
可設定為TIM_CounterMode_Up(向上)、TIM_CounterMode_Down(向下)以及中心對齊計數模式;
TIM_Period:設定定時器自動多載計數值,范圍為0~65536;
TIM_ClockDivision: 時鐘分頻因子,設定定時器時鐘CK_INT頻率與數字濾波器采樣時鐘頻率分頻比;
TIM_RepetitionCounter: 重復計數器,簡單的控制PWM輸出個數,

  1. 設定定時器中斷型別,使能定時器;
    呼叫函式:void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
    TIM_IT 用來設定定時器中斷型別,包含TIM_IT_Update(更新中斷)、TIM_IT_Trigger(觸發中斷)以及輸入捕獲中斷等等;
    FunctionalState 用來使能或使能定時器中斷,ENABLE和DISABLE,

  2. 設定定時器中斷優先級,使能定時器中斷通道;
    對NVIC初始化,如前一節中所示,

  3. 開啟定時器;
    呼叫函式:void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

  4. 撰寫定時器中斷服務函式
    由于定時器中斷型別有很多,因此在中斷服務函式中需要通過狀態暫存器的值來判斷此次中斷屬于哪一種型別,然后再執行相應的用戶程式,

2.3 應用示例

本次實驗通過TIM4定時器的更新中斷控制LED燈實作不斷閃爍的功能,詳細的代碼如下所示;
time.h

#ifndef _time_H
#define _time_H

#include "system.h"

void TIM4_Init(u16 pre,u16 psc);

#endif

time.c

#include "time.h"
#include "led.h"

void TIM4_Init(u16 pre,u16 psc)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
	
	TIM_TimeBaseInitStructure.TIM_Period=pre;//?ü?ú
	TIM_TimeBaseInitStructure.TIM_Prescaler=psc;
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
	
	TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
	TIM_ClearITPendingBit(TIM4,TIM_CounterMode_Up);
	
	NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	TIM_Cmd(TIM4,ENABLE);
	
}
void TIM4_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM4,TIM_IT_Update)==1)
	{
		led2=!led2;
	}
	TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
}

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "time.h"

u8 i=0;

int main()
{
	SysTick_Init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	LED_Init();
	TIM4_Init(1000,36000-1);//500ms
	
	
	while(1)
	{
		i++;
		if(i%20==0)
		{
			led1=!led1;
		}
		delay_ms(10);
	}

}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278158.html

標籤:其他

上一篇:關于 CROSS 延期至4月21日登陸幣安智能鏈 BSC 的公告

下一篇:MCU學習筆記_C語言基礎

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more