數字系統設計(EDA)實驗報告【出租車計價器】

一、問題描述

題目九:出租車計價器設計(平臺實現)★★

完成簡易出租車計價器設計,選做停車等待計價功能。

1、基本功能:

(1)起步8元/3km,此后2元/km;

(2)里程指示信號為每前進50米一個高電平脈沖,上升沿有效;顯示行駛公里數,精確到0.1km。(模擬時速40km/h)

(3)前進里程開始之前顯示價錢,精確到0.1元;

(4)用兩個按鍵分別表示開始行程和結束行程。

2、選做功能:

(1)增加一個停車等待/恢復行程按鈕,用2個數碼管顯示等待時間,精確到0.1分鐘。

(2)等候費1元/min,計價精度為0.1元。

二、設計方案

????????根據題設分析得到出租車的計費工作原理分成以下4個階段:

(1)出租車起步開始計費,首先顯示起步價(設計起步費為8.0元),當出租車在3km的行駛里程以內,只收起步價8.0元;

(2)出租車行駛超過3km后,按每公里2元計費(在8.0元基礎上每行駛1km車費加2.0元),車費依次累加;

(3)出租車暫停行駛(如行駛中遇紅燈或中途由于堵車等意外情況而停車),按停止時間進行計費,每1分鐘計費1.0元;

(4)若行程終止,則車費清零,等待下一次計費的開始。

????????對應主要可分為以下三大模塊去實現:

(1)秒分頻模塊:

????????脈沖生成模塊保證整個系統的同步工作,對于電路板上提供的100Hz時鐘脈沖信號進行分頻處理,得到題目中需要用到的秒分頻信號,便于后續計量數據模塊對于信號的處理。

(2)計量控制模塊:

????????計量數據模塊主要有三個部分組成,分別是計價部分、計時部分和計程部分,這三個部分是出租車計價器系統多功能實現的基礎與保證。

????????計價部分又可以分為兩個內容,其一是在出租車正常行駛的過程中根據不同的收費標準分段將里程數折算為對應的價格費用,如本題中在起步3km以內固定收費8.0元,而超出3km起步里程后對后續的每公里里程折算為2元的價格費用;其二是在出租車暫停行駛的情況下,將等候時間折算為對應的價格費用,如本題中將每分鐘折算為1.0元。

????????與此同時,出租車需要實現開始行程、停車等待、恢復行程和結束行程四個動作,因此控制出租車的狀態需要設計三個按鍵,用來選擇出租車的啟動、暫停和終止,對應按鍵按下時將對應的電平從低電平翻轉為高電平,并將此信號送往控制模塊產生相應的響應動作。

(3)譯碼顯示模塊:

????????譯碼顯示模塊用于將出租車的實時里程數、價格費用和等待時間顯示出來。

????????① 用2個數碼管顯示實時里程數;

????????② 用2個數碼管顯示等待時間;

????????③ 用4個數碼管顯示價格費用。

系統頂層框圖如下:

三、系統實現

1、基本流程

(1)設計輸入:運用VHDL硬件描述語言根據題目所要求實現的功能和自己設計的拓展部分進行電路設計(開發軟件:Quartus Ⅱ 9.0);

(2)文件處理:對設計輸入的文件進行編譯檢查、邏輯化簡、改進優化等一系列步驟,最后生成對應的編程文件;

(3)仿真驗證:對設計處理的編程文件進行仿真測試,以驗證程序是否符合題目給出的要求和設計的功能是否可以實現;

(4)元器件編程:將對應的VHDL硬件描述語言的編程代碼數據下載至具體的可編程元器件中;

(5)硬件測試:將編寫好的系統程序載入到實驗電路板上并按題目要求進行測試(硬件:EDA-I實驗板,如下圖)。

2、程序流程圖

3、代碼說明

(1)分頻:根據題目要求首先設置秒計時,即先完成1s分頻;再根據50米給出一個高脈沖,設置4.5s分頻;對于精確到0.1元的計價,設計6s分頻;對于精確到0.1km的里程,設計9s分頻。

p1:process(rst, clk) 						-- 1s 分頻begin if rst = '0' then if clk'event and clk = '1' then if count_1 = 99 then count_1 <= 0;clk1hz <= '1'; else count_1 <= count_1 + 1;clk1hz <= '0';  end if;end if; end if; end process; p2:process(rst, clk) 						-- 4.5s 分頻begin if rst = '0' then if clk'event and clk = '1' then if count_2 = 449 then count_2 <= 0;clklhz_1 <= '1'; else count_2 <= count_2 + 1;clklhz_1 <= '0';  end if;end if; end if; end process; p3:process(rst, clk) 						-- 6s 分頻begin if rst = '0' then if clk'event and clk = '1' then if count = 599 then count <= 0;clklhz_2 <= '1'; else count <= count + 1;clklhz_2 <= '0';  end if;end if; end if; end process; p4:process(rst, clk) -- 9s 分頻begin if rst = '0' then if clk'event and clk = '1' then if count_3 = 899 then count_3 <= 0;clklhz_3 <= '1'; else count_3 <= count_3 + 1;clklhz_3 <= '0';  end if;end if; end if; end process; 

(2)段選與片選:對需要顯示在數碼管上的信號量設計譯碼方案,并根據實際情況分出的不同情況進行不同的段選與片選。

p9:process(clk2)beginif clk2'event and clk2 = '1' thencase show iswhen "000" =>show <= "001";pianxuan <= "11111110";bt <= c0;flag <= 0;when "001" =>show <= "010";pianxuan <= "11111101";bt <= c1;flag <= 1;when "010" =>show <= "011";pianxuan <= "11111011";bt <= c2;flag <= 0;when "011" =>show <= "100";pianxuan <= "11110111";bt <= c3;flag <= 0;when "100" =>show <= "101";pianxuan <= "11101111";bt <= k0;flag <= 0;when "101" =>show <= "110";pianxuan <= "11011111";bt <= k1;flag <= 1;when "110" =>show <= "111";pianxuan <= "10111111";bt <= m0;flag <= 0;when "111" =>show <= "000";pianxuan <= "01111111";bt <= m1;flag <= 0;end case;end if;end process;p10:process(bt, flag)beginif flag = 1 thencase bt iswhen "0000" => duanxuan <= "11111110";	--0when "0001" => duanxuan <= "10110000";when "0010" => duanxuan <= "11101101";when "0011" => duanxuan <= "11111001";when "0100" => duanxuan <= "10110011";when "0101" => duanxuan <= "11011011";when "0110" => duanxuan <= "11011111";when "0111" => duanxuan <= "11110000";when "1000" => duanxuan <= "11111111";when "1001" => duanxuan <= "11111011";	--9when others => NULL;end case;elsif flag = 0 thencase bt iswhen "0000" => duanxuan <= "01111110";	--0when "0001" => duanxuan <= "00110000";when "0010" => duanxuan <= "01101101";when "0011" => duanxuan <= "01111001";when "0100" => duanxuan <= "00110011";when "0101" => duanxuan <= "01011011";when "0110" => duanxuan <= "01011111";when "0111" => duanxuan <= "01110000";when "1000" => duanxuan <= "01111111";when "1001" => duanxuan <= "01111011";	--9when others => NULL;end case;         end if;end process;
end;

(3)里程計數:根據3km內和超出3km部分進行計價模式切換,并設計完成進位部分和重置部分。

p7:process(rst, start, mile_clk) 			--里程計數begin if rst = '1' then k0 <= "0000"; k1 <= "0000"; mode <= '0';elsif clklhz_3'event and clklhz_3 = '1' thenif wait_signal = '0' and start = '1' then if k1 & k0="00110000" then 		--超過3kmmode <= '1'; end if; if k0 = "1001" then k0 <= "0000"; if k1 = "1001" then k1 <= "0000"; else k1 <= k1 + '1'; end if; else k0 <= k0 + '1'; end if; end if;end if; end process; 

(4)等待時間計數:此處為了方便觀察實驗結果,我將顯示分鐘改為了顯示秒鐘,但仍按分鐘對應的秒數進行進位(0-59s)。

p5:process(rst, clk1hz, start, wait_signal)  --等待時間計數begin   if rst = '1' then 							--乘客離開m0 <= "0000";m1 <= "0000"; elsif start = '0' then 						--沒開車wait_clk <= '0'; elsif clklhz_2'event and clklhz_2 = '1' then if wait_signal = '1' then 				--停車if sec = 9 thensec <= 0;if m0 = "1001" then m0 <= "0000"; if m1 = "0101" thenm1 <= "0000"; else m1 <= m1 + '1'; end if; else m0 <= m0 + '1'; end if;else wait_clk <= '0'; sec <= sec + 1;if m0 = "1001" then m0 <= "0000"; if m1 = "0101" thenm1 <= "0000"; else m1 <= m1 + '1'; end if; else m0 <= m0 + '1'; end if; end if; else wait_clk <= '0'; end if; end if; end process; 

(5)計費:根據不同的行程狀態對應不同的時鐘信號cost_clk,按50m上升沿時鐘頻率更新計算費用,并完成進位部分和重置。

p6:process(rst, clklhz_1, clklhz_2) --檢測mile上升沿beginif wait_clk = '1' or rst = '1' thenmile_clk <= '0';elsif rst = '0' and wait_clk = '0' thenmile_clk <= clklhz_1;end if; end process; cost_clk <= clklhz_2 when wait_signal = '1' else mile_clk when mode = '1' else '0'; p8:process(rst, start, cost_clk) --計費begin if rst = '1' then --計價結束c0 <= "0000";c1 <= "0000"; c2 <= "0000";c3 <= "0000"; elsif start = '1' and mode = '0' then --還在起步范圍c0 <= "0000";c1 <= "1000"; --8.0元c2 <= "0000"; c3 <= "0000"; elsif cost_clk'event and cost_clk = '1' then --50m每個上升沿/中途停車等待if mode = '1' and start = '1' then if c0 = "1001" then c0 <= "0000"; if c1 = "1001" then c1 <= "0000"; if c2 = "1001" then c2 <= "0000";if c3 = "1001" thenc3 <= "0000";elsec3 <= c3 + '1';end if;else c2 <= c2 + '1'; end if; else c1 <= c1 + '1'; end if; else c0 <= c0 + '1'; end if; end if;end if; end process;

(6)消除抖動:通過延時計數的方法將不連續的輸入脈沖信號調整為穩定的輸出信號。

xiaodou:process(clk, start_in, wait_signal_in, rst_in)beginif clk'event and clk = '1' thenif count < 1 thencount <= count + 1;elsecount <= 0;if start_in = '1' thenstart <= '1';elsif wait_signal_in = '1' thenwait_signal <= '1';elsif rst_in = '1' thenrst <= '1';end if;end if;end if;end process;

4、完整代碼

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_unsigned.all; 
use ieee.std_logic_arith.all; 
entity taxi is 
port(clk:in std_logic;  --時鐘信號start:inout std_logic;wait_signal:inout std_logic;rst:inout std_logic;numViewOutputSg:out std_logic_vector(7 downto 0);numViewOutputBt:out std_logic_vector(7 downto 0);clk2: in std_logic --高頻時鐘);
end; architecture bhv of taxi is signal mile_clk,clk1hz,clklhz_1,clklhz_2,clklhz_3:std_logic; --clklhz:分頻后的時鐘信號signal count:integer range 0 to 599;signal count_1:integer range 0 to 99; signal count_2:integer range 0 to 449;signal count_3:integer range 0 to 899;signal sec:integer range 0 to 59 :=0; --秒數signal c0,c1,c2,c3:std_logic_vector(3 downto 0); --費用(從低到高)signal k0,k1,m0,m1:std_logic_vector(3 downto 0); --k指公里 m指時間signal en0:std_logic :='0'; signal wait_clk,cost_clk:std_logic; signal temp:std_logic;signal show:std_logic_vector(2 downto 0):="000";signal bt:std_logic_vector(3 downto 0);signal flag:integer range 0 to 1;--signal rst:std_logic; --判斷是否停車--signal start:std_logic; --使能信號--signal wait_signal:std_logic; --停車信號
begin 
--xiaodou:process(clk,start_in,wait_signal_in,rst_in)
--	begin
--		if clk'event and clk='1' then
--			if count<1 then
--				count<=count+1;
--			else
--				count<=0;
--				if start_in='1' then
--					start<='1';
--				elsif wait_signal_in='1' then
--					wait_signal<='1';
--				elsif rst_in='1' then
--					rst<='1';
--				end if;
--			end if;
--		end if;
--	end process;U1:process(rst,clk) -- 1s 分頻begin if rst='0' then if clk'event and clk='1' then if count_1=99 then count_1<=0;clk1hz<='1'; else count_1<=count_1+1;clk1hz<='0';  end if;end if; end if; end process; U0:process(rst,clk) -- 4.5s 分頻begin if rst='0' then if clk'event and clk='1' then if count_2=449 then count_2<=0;clklhz_1<='1'; else count_2<=count_2+1;clklhz_1<='0';  end if;end if; end if; end process; U6:process(rst,clk) -- 6sbegin if rst='0' then if clk'event and clk='1' then if count=599 then count<=0;clklhz_2<='1'; else count<=count+1;clklhz_2<='0';  end if;end if; end if; end process; U9:process(rst,clk) -- 9sbegin if rst='0' then if clk'event and clk='1' then if count_3=899 then count_3<=0;clklhz_3<='1'; else count_3<=count_3+1;clklhz_3<='0';  end if;end if; end if; end process; U2:process(rst,clk1hz,start,wait_signal)  --等待時間計數begin   if rst='1' then --乘客離開m0<="0000";m1<="0000"; elsif start='0' then --沒開車wait_clk<='0'; elsif clk1hz'event and clk1hz='1' then if wait_signal='1' then --停車if sec=59 thensec<=0;elsif ((sec+1) mod 6)=0 thensec<=sec+1; if m0="1001" then m0<="0000"; if m1="0101" thenm1<="0000"; else m1<=m1+'1'; end if; else m0<=m0+'1'; end if;else wait_clk<='0'; sec<=sec+1;if m0="1001" then m0<="0000"; if m1="0101" thenm1<="0000"; else m1<=m1+'1'; end if; else m0<=m0+'1'; end if; end if; else wait_clk<='0'; end if; end if; end process; U3:process( rst,clklhz_1,clklhz_2) --檢測mile上升沿beginif wait_clk='1' or rst='1' thenmile_clk<='0';elsif rst='0' and wait_clk='0' thenmile_clk<=clklhz_1;end if; end process; cost_clk<=clklhz_2 when wait_signal='1' else mile_clk when en0='1' else '0'; U4:process(rst,start,mile_clk) --里程計數begin if rst='1' then k0<="0000"; k1<="0000"; en0<='0';elsif clklhz_3'event and clklhz_3='1' thenif wait_signal='0' and start='1' then if k1 & k0="00000011" then --超過3kmen0<='1'; end if; if k0="1001" then k0<="0000"; if k1="1001" then k1<="0000"; else k1<=k1+'1'; end if; else k0<=k0+'1'; end if; end if;end if; end process; U5:process( rst,start,cost_clk) --計費begin if rst='1' then --計價結束c0<="0000";c1<="0000"; c2<="0000";c3<="0000"; elsif start='1' and en0='0' then --還在起步范圍c0<="0000";c1<="1000"; --8.0元c2<="0000"; c3<="0000"; elsif cost_clk'event and cost_clk='1' then --50m每個上升沿/中途停車等待if en0='1' and start='1' then if c0="1001" then c0<="0000"; if c1="1001" then c1<="0000"; if c2="1001" then c2<="0000";if c3="1001" thenc3<="0000";elsec3<=c3+'1';end if;else c2<=c2+'1'; end if; else c1<=c1+'1'; end if; else c0<=c0+'1'; end if; end if;end if; end process;p4:process(clk2)beginif clk2'event and clk2='1' thencase show iswhen "000" =>show <= "001";numViewOutputSg <= "11111110";bt <= c0;flag <= 0;when "001" =>show <= "010";numViewOutputSg <= "11111101";bt <= c1;flag <= 1;when "010" =>show <= "011";numViewOutputSg <= "11111011";bt <= c2;flag <= 0;when "011" =>show <= "100";numViewOutputSg <= "11110111";bt <= c3;flag <= 0;when "100" =>show <= "101";numViewOutputSg <= "11101111";bt <= k0;flag <= 0;when "101" =>show <= "110";numViewOutputSg <= "11011111";bt <= k1;flag <= 1;when "110" =>show <= "111";numViewOutputSg <= "10111111";bt <= m0;flag <= 0;when "111" =>show <= "000";numViewOutputSg <= "01111111";bt <= m1;flag <= 0;end case;end if;end process p4;p5:process(bt, flag)beginif flag = 1 thencase bt iswhen "0000" => numViewOutputBt <= "11111110";--0when "0001" => numViewOutputBt <= "10110000";when "0010" => numViewOutputBt <= "11101101";when "0011" => numViewOutputBt <= "11111001";when "0100" => numViewOutputBt <= "10110011";when "0101" => numViewOutputBt <= "11011011";when "0110" => numViewOutputBt <= "11011111";when "0111" => numViewOutputBt <= "11110000";when "1000" => numViewOutputBt <= "11111111";when "1001" => numViewOutputBt <= "11111011";--9when others => NULL;end case;elsif flag = 0 thencase bt iswhen "0000" => numViewOutputBt <= "01111110";--0when "0001" => numViewOutputBt <= "00110000";when "0010" => numViewOutputBt <= "01101101";when "0011" => numViewOutputBt <= "01111001";when "0100" => numViewOutputBt <= "00110011";when "0101" => numViewOutputBt <= "01011011";when "0110" => numViewOutputBt <= "01011111";when "0111" => numViewOutputBt <= "01110000";when "1000" => numViewOutputBt <= "01111111";when "1001" => numViewOutputBt <= "01111011";--9when others => NULL;end case;end if;end process p5;
end;

四、仿真

五、測試

1、初始狀態(行程未開始)

2、行程開始,計價開始(3km內)

3、里程達到3km

4、里程超過3km(切換計價模式)

?5、停車等待,開始按時計價

?6、行程繼續(切換計價模式)

?7、行程結束

?8、演示視頻

EDA出租車計價系統演示視頻(2x)

六、課程學習或實驗過程中出現的問題

1、對端口模式的理解不透徹,導致在分析教材部分例題和其他代碼的過程中出現問題,尤其以雙向端口(INOUT)最難學習與掌握;

2、使用EDA實驗板時,對于設置好的按鈕在進行按鍵操作的過程中,信號穩定的前后出現了多個不穩定的脈沖現象,而正常情況下一次按鍵操作理論上應只產生一個邊沿信號脈沖(如下圖所示);

3、本題中需要實現對價格費用、里程和等待時間的顯示,而在VHDL硬件描述語言的編程設計過程中,在Pin Planner(引腳規劃器)的設置中各個數字都出現了4個引腳選擇,而EDA實驗板上只有8個數碼管而不夠使用;

4、?實驗過程中設置引腳后發現沒有解決小數點的問題,在應該精確到0.1的地方沒有顯示小數點;

七、對各種問題的解決過程、方法和結果

(注:序號對應第六部分中的問題)

1、對于之前看過的一道程序中的以下部分源碼(其中,程序中DataB為雙向端口INOUT):

......
DataB <= Din when CE = '1' and Rd = '0' else
Others => 'Z';
Dout <= DataB when CE = '1' and Rd = '1' else
Others => '1';
......

? ? ? 通過查閱相關書籍及在CSDN等平臺上查找相關的資料,了解到教材上僅僅只提到了端口的雙向模式允許信號雙向傳輸(即既可以進入實體,也可以離開實體),可代替IN、OUT和BUFFER。但在實際編程時還必須要注意的細節是,當雙向端口DataB作為輸出且空閑時,必須將其設為高阻態掛起,即在上述程序的部分代碼中需要有“Others => 'Z'”這一條語句,否則實現后會導致端口死鎖;而當雙向端口DataB作為有效輸入時,DataB輸出必須處于高阻態,即在上述程序的部分代碼中需要有“CE = '1' and Rd = '1'”這一條語句,否則同樣也會出現問題。

2、通過對實驗電路板的結構分析以及在其他相關課程(如計算機組成原理)的學習中,了解到本次實驗中使用的實驗電路板的按鍵為機械式開關結構,由于機械式開關的核心部件為彈性金屬簧片,因而在開關切換的瞬間會在接觸點出現來回彈跳的現象,因此雖然看上去只是進行了一次按鍵,結果卻可能是在按鍵的信號穩定的前后出現了多個不規則的脈沖,如果將這樣的脈沖信號直接送給微處理器進行掃描采集的話,將可能把按鍵穩定前后出現的脈沖信號當作按鍵信號,這就會導致人為的一次按鍵但是微處理器以為是執行多次按鍵的現象。因此為了確保按鍵識別的準確性,應當使得在按鍵信號產生抖動的情況之下禁止進入狀態輸入,為此就必須對按鍵進行消抖處理,消除出現抖動時的不穩定的、隨機的電壓信號。測試過程中發現機械式按鍵的抖動次數、抖動時間、抖動波形都是隨機的,而不同類型的按鍵其最長抖動時間也有差別,進一步查閱相關資料可知抖動時間的長短和按鍵的機械特性有關,一般為5-10ms,但是有些按鍵的抖動時間可達到20?ms,甚至更長。所以在具體設計過程中要具體分析,根據實際情況來調整設計。

3、分析代碼后發現,在設置端口數據時將端口寬度設置為4(如下):

????????未對輸出端口進行分組處理,因此會導致每個數字都按照四位二進制的形式有4個輸出,因此可以將原先定義在結構體內的信號經譯碼后打包送到對應輸出端口(一種可行的解決方案如下):

4、根據設置的信號量分析可知,應當在c1和k1處固定顯示小數點,經過分析決定設置一個flag標記位,在片選模塊中單獨標記c1和k1兩處(flag=1),其余部分不做標記(flag=0),最后在段選模塊中根據flag的值進行輸出,即flag=1時段選信號的第一位置“1”,即顯示小數點,而flag=0時則相反。

八、總結

????????通過本次數字系統設計實驗設計,首先我學到了很多關于數字邏輯和數字系統的知識,基本理解了一些系統的設計理念以及設計方案的制定和流程。同時通過對VHDL硬件描述語言的學習,我深刻的感受到了軟硬件相結合的強大,基于軟件設計硬件的方法十分高效,同時代碼相對于電路更具備可讀性,能更好的理解系統設計原理和方法。本次我選擇的出租車計價器設計難度中等偏上,在我完成實驗設計的過程中遇到了很多問題,比如對VHDL硬件描述語言的基本語法掌握得不夠熟練,亦或者是對數字邏輯的相關知識和一些基礎的實驗元件的認識不足,因此設計過程舉步維艱,對信號量的設計也有很多的不合理之處,比如輸出信號量cost、kilogram和minute,最早設計的時候采取的方案是單獨設置輸出信號量out static_logic_vector(3 downto 0),輸出對應的二進制數,但沒有考慮到數碼管的譯碼部分,從而導致無法正確選擇合適的引腳進行數碼顯示。之后我意識到這個問題后決定將其包裝一下,對四位BCD碼進行譯碼后,再送入后續改進設計的段選模塊和片選模塊進行輸出,從而解決了這一問題。在完成實驗之后我也嘗試思考一些實驗過程中的問題,嘗試去改進一些方法策略,后來發現了按鍵抖動的問題之后設計了消除抖動的模塊,為了進行更好的演示將等待時間計時的分鐘顯示改為秒鐘顯示……通過不斷的思考,我也漸漸掌握了一定的設計能力,培養了創新思想。但僅僅是對VHDL硬件描述語言的掌握是遠遠不夠完成實驗的,管腳的連接、實驗板的操作或是軟件的安裝使用都出現過問題,而只是學習書本上的知識也是不夠的,書本上的知識往往偏向理論,實際實驗涉及到的范圍往往更廣,因此也應該要不斷學習,自覺拓展知識面,開拓視野,一步一步的完成每一件學習任務,這樣才能更好的掌握EDA這門課程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211261.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211261.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

紅隊攻防實戰之ThinkPHP-RCE集錦

你若不勇敢&#xff0c;誰又可以替你堅強&#xff1f; ThinkPHP 2.x RCE漏洞 1、查詢phpinfo() 2、任意代碼執行 3、Getshell 蟻劍連接&#xff1a; ThinkPHP5 5.0.23 RCE漏洞 發送數據包&#xff1a; 成功執行id命令&#xff1a; 工具驗證 ThinkPHP5 SQL注入漏洞 &&am…

什么是神經網絡的非線性

大家好啊&#xff0c;我是董董燦。 最近在寫《計算機視覺入門與調優》&#xff08;右鍵&#xff0c;在新窗口中打開鏈接&#xff09;的小冊&#xff0c;其中一部分說到激活函數的時候&#xff0c;談到了神經網絡的非線性問題。 今天就一起來看看&#xff0c;為什么神經網絡需…

cuda函數的前綴作用

文章目錄 cuda函數的前綴作用1、前綴作用2、global3、device4、host cuda函數的前綴作用 1、前綴作用 函數執行環境標識符&#xff0c;即表明函數在哪里被調用 2、global __global__修飾的函數是核函數&#xff0c;這些函數在GPU上執行&#xff0c;但是需要在CPU上調用。 g…

激光打標機在智能手表上的應用:科技與時尚的完美結合

隨著科技的飛速發展&#xff0c;智能手表已經成為我們日常生活中不可或缺的智能設備。而在智能手表制造中&#xff0c;激光打標機扮演著至關重要的角色。本文將詳細介紹激光打標機在智能手表制造中的應用&#xff0c;以及其帶來的優勢和影響。 ? 一、激光打標機在智能手表制…

按訂單周期結算的產品成本

原文地址&#xff1a;Product Cost By Order Cycle | SAP Blogs 產品成本核算是每個制造企業的控制部門的核心職責之一&#xff0c;根據其產品和生產的性質&#xff0c;每個企業的成本核算有所不同。它支持組織在其他職能領域做出大量戰略決策。在過去幾年中獲得了 SAP 產品成本…

Vite4、Vue3、Axios 針對請求模塊化封裝搭配自動化導入(簡單易用)

針對請求模塊化封裝搭配自動化導入&#xff08;簡單易用&#xff09; 目標目錄目標代碼前提步入正題src / utils / index.jssrc /api / index.jssrc /api / request.jssrc /api / service.jssrc /api / utils.jssrc /api / modules / demo.js 自動化配置vite.config.jseslint 校…

QEMU環境調試方法

本文從調試的角度出發&#xff0c;分享QEMU調試過程中的常見調試方法。 1.如何查看makefile構建過程執行的命令&#xff1f; 為了深入理解ucore操作系統實驗的編譯鏈接細節&#xff0c;需要知道makefile在執行的過程中一步一步的指令執行情況。然而大部分的工程中&#xff0c;…

CopyClip 2:提升Mac開發效率的利器

在Mac開發的日常工作中&#xff0c;高效地處理剪貼板內容是一個至關重要的任務。幸運的是&#xff0c;有一款強大的工具可以極大地提升你的開發效率——CopyClip 2。本文將介紹CopyClip 2的功能和優勢&#xff0c;以及它是如何成為Mac開發者們不可或缺的利器的。 CopyClip 2 簡…

【Docker】進階之路:(二)Docker簡介

【Docker】進階之路&#xff1a;&#xff08;二&#xff09;Docker簡介 什么是 DockerDocker 由來與發展歷程Docker的架構與組成Docker容器生態容器核心技術容器規范容器平臺技術 為什么使用DockerDocker的應用場景 什么是 Docker 簡單地講&#xff0c;Docker就是一個應用容器…

正則表達式(9):擴展正則表達式

正則表達式&#xff08;9&#xff09;&#xff1a;擴展正則表達式 小結 本博文轉載自 前文中一直在說&#xff0c;在Linux中&#xff0c;正則表達式可以分為”基本正則表達式”和”擴展正則表達式”。 我們已經認識了”基本正則表達式”&#xff0c;現在&#xff0c;我們來認…

T天池SQL訓練營(五)-窗口函數等

–天池龍珠計劃SQL訓練營 5.1窗口函數 5.1.1窗口函數概念及基本的使用方法 窗口函數也稱為OLAP函數。OLAP 是OnLine AnalyticalProcessing 的簡稱&#xff0c;意思是對數據庫數據進行實時分析處理。 為了便于理解&#xff0c;稱之為窗口函數。常規的SELECT語句都是對整張表進…

Unity由“鼠標點不準物體”引發的Camera的相關思考

問題 前段一個同事在使用Unity開發時遇到一個奇怪的問題&#xff0c;使用左鍵點擊發射射線的方式選擇物體&#xff0c;總是選不準&#xff0c;尤其是小的物體&#xff0c;鼠標點擊到物體上&#xff0c;有時能選上&#xff0c;有時選不上&#xff0c;偶爾點擊到物體旁邊…

Tensorflow.js 入門學習指南

Tensorflow.js 入門學習指南 官方地址TensorFlow.js (google.cn) Tensorflowjs是一個機器學習框架&#xff0c;使用 TensorFlowJS 可以創建生產級機器學習模型 安裝包 瀏覽器設置 您可以通過兩種主要方式在瀏覽器項目中獲取 TensorFlow.js&#xff1a; 使用腳本代碼。從 NPM…

基于MATLAB車輛防碰撞系統仿真

摘要 近年來&#xff0c;汽車行業的飛速發展使得我國的汽車保有量快速增長&#xff0c;但由此引發的交通事故導致的人員傷亡數量仍居高不下。從保護人身安全和降低交通事故發生的可能性的角度出發&#xff0c;車輛防碰撞系統能夠使駕駛員在沒注意到與前方車輛有碰撞危險的情況下…

Python:核心知識點整理大全11-筆記

目錄 ?編輯 6.2.4 修改字典中的值 6.2.5 刪除鍵—值對 注意 刪除的鍵—值對永遠消失了。 6.2.6 由類似對象組成的字典 6.3 遍歷字典 6.3.1 遍歷所有的鍵—值對 6.3.2 遍歷字典中的所有鍵 往期快速傳送門&#x1f446;&#xff08;在文章最后&#xff09;&#xff1a; 6.…

風力發電對講 IP語音對講終端IP安防一鍵呼叫對講 醫院對講終端SV-6005網絡音頻終端

風力發電對講 IP語音對講終端IP安防一鍵呼叫對講 醫院對講終端SV-6005網絡音頻終端 目 錄 1、產品規格 2、接口使用 2.1、側面接口功能 2.2、背面接口功能 2.3、面板接口功能 3、功能使用 1、產品規格 輸入電源&#xff1a; 12V&#xff5e;24V的直流電源 網絡接口&am…

前端知識庫Html5和CSS3

1、常見的水平垂直居中實現方案 最簡單的方案是flex布局 .container{display: flex;align-items: center;justify-content: center; }絕對定位配合margin:auto(一定要給.son寬高) .father {position: relative;height: 300px; } .son {position: absolute;top: 0;right: 0;b…

PID控制參數整定(調節方法)原理+圖示+MATLAB調試

PID控制參數整定&#xff08;調節方法&#xff09;原理圖示MATLAB調試 Chapter1 PID控制參數整定&#xff08;調節方法&#xff09;原理圖示MATLAB調試序一、P參數選取二、I的調節三、D的調節四、總結 Chapter2 PID參數調整&#xff0c;個人經驗&#xff08;配輸出曲線圖&#…

【51單片機系列】獨立按鍵介紹

本文是關于獨立按鍵的介紹及使用。首先介紹了按鍵&#xff0c;包括什么是按鍵及使用按鍵時如何實現軟件消抖。然后使用proteus仿真實現獨立按鍵控制LED指示燈的操作。 之前的LED、蜂鳴器、數碼管中IO口都是作為輸出使用&#xff0c;這里通過獨立按鍵實驗介紹IO口作為輸入的使用…

Edge 中的msedgewebview2總想聯網

目錄預覽 一、問題描述二、原因分析三、解決方案四、參考鏈接 一、問題描述 使用Edge瀏覽器的時候&#xff0c;右下角火絨總會彈出“msedgewebview2”想要聯網的彈窗&#xff0c;如下 點擊發起程序&#xff0c;找到路徑如下&#xff1a; C:\Program Files (x86)\Microsoft\…