嵌入式系統設計師筆記

努力了3個月,終於考過了!

把這階段的心得和筆記分享到網上

 

指令週期

若干個即週期組成,是取指令、分析、執行所需的全部時間。

過程

CPU從<程序計數器>獲取所需的指令地址       (PC上取指令地址)

從內存(cache)讀取指令的內容暫存<暫存寄存器>,然後進行分析和執行 (IR暫存指令地址對應的指令)

簡稱

IR       指令寄存器

GR     通用寄存器

PC     程序計數器

PSW 狀態寄存器

流水線計算
建立時間:一個完整的指令週期,T取指+T分析+T執行
K條指令時間:建立時間+(K-1) * T取指

體系結構

哈佛體系結構:一種將程序指令存儲和數據存儲分開的存儲結構,速度快,一般用於數字處理。也成爲:普林斯頓結構

馮·諾依曼體系結構:一種將程序指令存儲和數據存儲合併在一起的存儲結構。區分指令和數據在於指令和數據的尋址方式。

大小端

大小超過char 8 字節的內存存儲形式。

隱含了一個條件,如果是char類型,無需遵循大小端.

如char t[] = {0x01,0x02};無論大小端方式,t[0],t[1]在內存地址上的位置都不會改變。

大端:高字節存於內存地址高位,低字節存於內存地址低位

如數:0x0400  

 ------------------------------------------------------------->地址增長方向

04 00

小端:相反

如數:0x0400

------------------------------------------------------------>地址增長方向

00 04

邏輯地址和物理地址轉換

邏輯地址頁號:邏輯地址/頁面大小

邏輯地址偏移:邏輯地址%頁面大小

物理地址頁號<-邏輯頁號(查表)

物理地址=物理頁號*頁面大小+邏輯地址偏移

容量計算

容量 = 2^地址總線位寬 * 數據總線位寬 (bit)

尋址能力:2^地址總線位寬,爲地址個數

一個地址大小對應內容大小:數據總線位寬,一次並行傳輸數據大小。

常用十六進制和十進制對應關係

HEX       DEC                    Bin  
0x10:     16                     2^4

0x100:    256                    2^8

0x400:    1024                   2^10

0x1000:   4K                     2^12

0x10000:  64M                    2^16

0x100000: 1G                     2^20

中斷

中斷嵌套:中斷程序處理中,遇到優先級更高的中斷,暫停當前處理,轉到跟高的中斷處理程序,更高的處理完後,繼續處理當前程序。

相同優先級中斷同時產生,會按照順序處理中斷程序。

硬件中斷觸發方式:邊沿觸發和電平觸發

邊沿觸發:上升沿觸發、下降沿觸發

電平觸發:高電平觸發、低電平觸發

尋址範圍計算

存儲容量大小 / (計算機字長*編址方式係數),建議用2^次數計算

如設機器字長爲32位,存儲容量爲16MB,若按雙字編址,其尋址範圍是

16M /(4 * 2)  = 2M

80X86彙編

常用寄存器

AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 個通用寄存器.

AX,BX,CX,DX 稱作爲數據寄存器.SP 和 BP 又稱作爲指針寄存器||SI 和 DI 又稱作爲變址寄存器||IP和FLAG控制寄存器||CS,SS,DS,ES段寄存器.

32位的有

EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI,EIP,EFLAG,就是在16位寄存器上加E.

1:立即尋址

訪問地址,如MOV A,[100H]   MOV A, PTR[100],PTR是數據段的某個地址

2:基址尋址

寄存器尋址,MOV ECX,[EAX]

3:變址尋址

在基址尋址基礎上加位移,MOV ECX,TABLE[EAX],TABLE是某個變量地址

4:寄存器間接尋址

寄存器給的是指針,MOV [ECX],EAX,不太明白,且記下。

5:基址變址尋址

寄存器尋址基礎上,位移是另外一個寄存器地址 MOV ECX,[EAX][EBX]

彙編指令

JMP XX              ##無條件跳轉

CMP AX BX           ## 比較大小等同AX- BX ,影響標誌位.

    SF符號標誌位,結果最高位爲1時標誌位SF=1
    ZF是否爲0標誌位,結果爲0時ZF = 1.
    ZF和SF就能判斷結果正負數,用於跳轉判別

JGE XX              ### 大於或者等於時候跳轉XX
JG XX               ### 大於時候跳轉XX
JI  XX              ##小於轉移XX
JZ XX               ##爲0轉移XX,ZF=0轉移
JNZ XX              ##不爲0 轉移XX
SUB AX,BX           ###AX = AX- BX,不影響進位標誌
NEG     AX          ###AX = AX的補碼
IN    AX 21H        ###從21端口讀一個字節
AND AX BX           ### AX & BX
SHL AX 01H          ### 無符號左移
SAL AX 01H          ### 有符號左移
SHR AX 01H          ### 右移 AX = AX >>1
AND AX 01H          ### AX = AX & 01,爲真ZF=1
ANL AX 01H          ### AX = AX & 01

開發過程

開發:客戶需求->軟件需求分析->軟件概要設計->軟件詳細設計->軟件編碼

測試:驗收測試<-系統配置測試<-  集成測試     <-   功能測試       <-單元測試

             黑盒測試   <-  灰盒測試                                             <-   白盒測試                      

黑白盒概念

白盒測試也稱結構測試、邏輯測試或基於程序的測試,這種測試應瞭解程序的內部構造,並且根據內部構造設計測試用例。

黑盒測試又稱功能測試、數據驅動測試或基於需求規格說明的測試,這種測試不必瞭解被測對象的內容情況,而依靠需求規格說明中的功能來設計測試用例。

白盒覆蓋測試

西方人的科學論證法和東方差異好大!剛接觸轉不過彎。

定義

1.語句覆蓋:每條語句至少執行一次。
2.判定覆蓋:每個判定的每個分支至少執行一次。
3.條件覆蓋:每個判定的每個條件應取到各種可能的值。
4.判定/條件覆蓋:同時滿足判定覆蓋條件覆蓋。
5.條件組合覆蓋:每個判定中各條件的每一種組合至少出現一次。
6.路徑覆蓋:使程序中每一條可能的路徑至少執行一次。

含義

1.語句覆蓋 爲了暴露程序中的錯誤,程序中的每條語句至少應該執行一次。因此語句覆蓋(Statement Coverage)的含義是:選擇足夠多的測試數據,使被測程序中每條語句至少執行一次。語句覆蓋是很弱的邏輯覆蓋。

2.判定覆蓋比語句覆蓋稍強的覆蓋標準是判定覆蓋(Decision Coverage)。判定覆蓋的含義是:設計足夠的測試用例,使得程序中的每個判定至少都獲得一次“真值”或“假值”,或者說使得程序中的每一個取“真”分支和取“假”分支至少經歷一次,因此判定覆蓋又稱爲分支覆蓋。

3.條件覆蓋在設計程序中,一個判定語句是由多個條件組合而成的複合判定。爲了更徹底地實現邏輯覆蓋,可以採用條件覆蓋(Condition Coverage)的標準。條件覆蓋的含義是:構造一組測試用例,使得每一判定語句中每個邏輯條件的可能值至少滿足一次。

4.多條件覆蓋。多條件覆蓋也稱條件組合覆蓋,它的含義是:設計足夠的測試用例,使得每個判定中條件的各種可能組合都至少出現一次。顯然滿足多條件覆蓋的測試用例是一定滿足判定覆蓋、條件覆蓋和條件判定組合覆蓋的。

5.修正條件判定覆蓋。修正條件判定覆蓋是由歐美的航空/航天製造廠商和使用單位聯合制定的“航空運輸和裝備系統軟件認證標準”,在國外的國防、航空航天領域應用廣泛。這個覆蓋度量需要足夠的測試用例來確定各個條件能夠影響到包含的判定的結果。它要求滿足兩個條件:首先,每一個程序模塊的入口和出口點都要考慮至少要被調用一次,每個程序的判定到所有可能的結果值要至少轉換一次;其次,程序的判定被分解爲通過邏輯操作符(and、or)連接的布爾條件,每個條件對於判定的結果值是獨立的。

例子:
if (a && b)
    ;


語句覆蓋:
    a = true, b = true
    理解爲語句都執行到,沒辦法覆蓋所有情況

判斷覆蓋/分支覆蓋:
{
    a = true, b = true
    a = false,b = false
}
或者
{
    a = true,b = true
    a = true,b = false
}
或者
{
    a = true, b = true
    a = false,b=true
}
    理解爲每個判斷都取一次真和假


條件覆蓋:
{
    a = true, b = true
    a = false,b= false;
}
或者
{
     a = true, b = false
     a = false,b= true
}
    每個條件取一次真和假,可能導致分支無法執行到
    小結:判定覆蓋只關心判定表達式的值(真/假),而條件覆蓋涉及到判定表達式的每個條件的值(真/假)。

判定條件覆蓋:
    a = true, b = true
    a = false,b = false
    判定覆蓋和條件覆蓋的合體,滿足兩者的要求,條件都取一次真假,判定都取一次真假。

組合覆蓋:
    a = true, b=true;
    a = true, b=false;
    a = false,b = true;
    a = false,b = false;
    每個條件可能性的組合
    

PV操作

PV原語通過操作信號量來處理進程間的同步與互斥的問題。

進入臨界區

P(S)//進入時候等待

work()

V(S)   //出去時候釋放,並且檢查喚醒等待隊列

出臨界區

設信號量S=0;

P(S)先執行S--;如果S<0;阻塞該進程,並插入該信號量的等待隊列。如S>=0,繼續執行

V(S)先執行S++;如果S<=0;從該信號量的等待隊列移出第一個進程,把移出的進程變爲就緒態並且插入到該信號就緒隊列,然後繼續執行(理解爲喚醒另外一個使用該信號量等待的進程);S>0,繼續執行。

表現爲:

P(S){
    S--;
    if (S < 0){
        //加入等待隊列
        //阻塞
    }
}

V(S){
    S++;
    i(S <= 0) {
        //移出等待隊列的第一個進程,並且喚醒
    }
}

臨界

臨界資源:一次僅一個進程訪問的資源

臨界區:訪問臨界資源的代碼

訪問臨界資源原則:

空閒讓進:有就上

忙則等待:沒就等

有限等待:在有限的時間進入臨界區

讓權等待:不能進入,主動釋放出處理機器。

定時器計算

定時器位寬W,時鐘頻率Y(HZ)。(單片機的12個機器週期爲一個指令週期)。假設定時長X秒

定時最長時長S: S = 2^W /Y(s)

遞增初值A:A= 2^W - XY

遞減初值B:B=X*Y

DMA

DMA結構示意圖

                                         DMA結構示意圖

DMA(Direct Memory Access,直接內存存取) 允許不同速度的硬件裝置來溝通,而不需要依賴於 CPU 的大量中斷負載。

一個完整的DMA傳輸過程必須經過DMA請求、DMA響應、DMA傳輸、DMA結束4個步驟。

請求

CPU對DMA控制器初始化,並向I/O接口發出操作命令,I/O接口提出DMA請求。

響應

DMA控制器對DMA請求判別優先級及屏蔽,向總線裁決邏輯提出總線請求。當CPU執行完當前總線週期即可釋放總線控制權。此時,總線裁決邏輯輸出總線應答,表示DMA已經響應,通過DMA控制器通知I/O接口開始DMA傳輸。

傳輸

DMA控制器獲得總線控制權後,CPU即刻掛起或只執行內部操作,由DMA控制器輸出讀寫命令,直接控制RAM與I/O接口進行DMA傳輸。

在DMA控制器的控制下,在存儲器和外部設備之間直接進行數據傳送,在傳送過程中不需要中央處理器的參與。開始時需提供要傳送的數據的起始位置和數據長度。

結束

當完成規定的成批數據傳送後,DMA控制器即釋放總線控制權,並向I/O接口發出結束信號。當I/O接口收到結束信號後,一方面停 止I/O設備的工作,另一方面向CPU提出中斷請求,使CPU從不介入的狀態解脫,並執行一段檢查本次DMA傳輸操作正確性的代碼。最後,帶着本次操作結果及狀態繼續執行原來的程序。

由此可見,DMA傳輸方式無需CPU直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場的過程,通過硬件爲RAM與I/O設備開闢一條直接傳送數據的通路,使CPU的效率大爲提高。

DMA請求優先級高,大於中斷請求

選址

線選法:片內選址高位地址連接至各個存儲芯片的高位地址端。低地址連接至片內地址(地址總線)。

譯碼法:片內選址高位地址作爲輸入,輸出作爲片選信號。

觸發器

電位出發方式觸發器

-----------
| Q    /Q |
|         |
| D     E |
-----------
  鎖存器

E = 0,D 和 /D被鎖存。
E = 1,D 和 /D進入基本觸發器。

 

浮點數

計算機內存上表示:符階 + 階碼 + 數符 + 尾數

R進制數字表示:尾數 * 數符 * R^(階符 * 階碼)  

校驗

海明碼(Hamming Code)是一個能夠有多個校驗位。具有檢測並糾正一位錯誤代碼的糾錯碼

奇校驗:1的個數爲偶數,校驗位爲1,偶數加上校驗位本身剛好有奇數個;1個數爲奇數,校驗位爲0,校驗個數也爲奇數。

偶校驗:同理可得

CRC校驗:在K位信息碼後再拼接R位的校驗碼,整個編碼長度爲N位,因此,這種編碼也叫(N,K)碼

海明碼計算

校驗碼位數
--------------------
N:數據位數+校驗位數
R:校驗位數 
K:數據位數
滿足K + R <= 2^R - 1

校驗碼插入位置
2^n位置(0,1,2,4,8......)

 

音頻格式

MP3:MPEG-1 audio layer 3

WAV:Microsoft開發的一種聲音文件格式,是最接近無損的音樂格式,所以文件大小相對也比較大。

郵箱協議

POP:下載郵件,服務器並刪除郵件

POP3:POP擴展,支持下載郵件,服務器並不刪除郵件.允許電子郵件客戶端下載服務器上的郵件,但是在客戶端的操作(如移動郵件、標記已讀等),不會反饋到服務器上

IMAP:客戶端與服務器同步

STMP:要求必須在提供了賬戶名和密碼之後纔可以登錄 SMTP 服務器,這就使得那些垃圾郵件的散播者無可乘之機。

UML常見關係

泛化:繼承

實現:類和接口關係

聚合:整體和部分關係,分得開

組合:整體和部分關係,分不開

符號:https://blog.csdn.net/aerchi/article/details/53125847

地址

物理地址:

邏輯地址:程序裏的偏移地址,如&a

線性地址:邏輯地址+基地址

銀行家算法

一種避免死鎖的算法

1:求剩餘資源

剩餘資源 = 可用資源-已使用資源

2:進程最安全運行順序

求進程還需資源,與剩餘資源比較。剩餘資源>還需資源,則從該進程開始

題型

資源R1 R2 R3 R4,最大可用數爲9,6,3,3
某一時刻,有4個進程P1~P4,使用資源如下

        資源
進程    需要最大資源  已分配資源
    P1  6 4 2 1      1 1 1 1
    P2  2 2 2 1      2 1 1 1
    P3  8 1 1 1      2 1 0 0
    P4  2 2 1 1      1 2 1 1


剩餘資源 
        R1 = 9-1-2-2-1 = 3;
        R2 = 6-1-1-1-2 = 1;
        R3 = 3-1-1-1   = 0;
        R4 = 3-1-1-1   = 0;

還需資源
        P1  5 3 1 0
        P2  0 1 1 0
        P3  6 0 1 1
        P4  1 0 0 0

所以最安全的順序是:P4->P2->P3->P1            
                

cache效率

CPU平均訪問時間=(Cache 存取週期 * Cache存取次數 + 內存存取週期 *內存存取次數)/總次數

效率=Cache存取週期/CPU平均訪問時間

題型

某計算機的存儲系統由Cache-主存系統構成,Cache的存取週期爲10ns,主存的存取週期爲50ns。在
CPU執行一段程序時,Cache完成存取的次數爲4800次,主存完成存取的次數爲200次,則CPU訪問存儲
系統的平均訪問時間是__(1)__ns,該Cache-主存系統的效率是__(2)__。
(1)A.10    B.11.60  C.11.68  D.50
(2)A.0.856 B.0.862  C.0.958  D.0.960

CPU訪問存儲系統的平均訪問時間= (10*4800+50*200)/(4800+200) = 11.60
Cache-主存系統的效率        = 10/11.6                     = 0.856

棧 

後進先出

分爲兩種,向下增長型和向上增長型

向上增長型
---------棧頂
---------
---------
---------
---------  <---SP
---------棧底
Push操作:SP++,然後壓入數據到棧底
Pop 操作:彈出棧底數據,SP--

向下增長型
---------棧頂
---------<---SP
---------
---------
---------  
---------棧底
Push操作:SP--,然後壓入數據到棧底
Pop 操作:彈出棧頂數據,SP++

原碼和反碼是爲了說明補碼的原理而設定的兩個概念,實際在計算機中只有補碼。爲了減少硬件工作,把減法變爲加法。

原碼:

反碼:正數不變,負數:  ~原碼(不含最高位符號位)

補碼:正數不變,   負數 : 反碼+1

C語言關鍵字

static:全局變量

auto:局部變量

register:寄存器 register修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度

volatile:原子變量,多用於多線程

unsigned :無符號,unsigned char val = 10; while(val -- <= 0);會無限循環。

CPM

關鍵路徑法

關鍵路徑法是用尋找關鍵路徑及其時間長度來確定項目的完成日期與總工期的方法。

關鍵路徑:總工期最長的一條/多條路徑

關鍵路徑越多,風險越大

最早開始時間(Early Start,簡稱ES),在條件具備的情況下,該活動可以開始進行的最早可能
最早結束時間(Early Finish,簡稱EF),在條件具備的情況下,該活動可以完成的最早可能
最晚開始時間(Late Start,簡稱LS),在不拖延項目進度的情況下,該活動可以開始進行的最晚可能
最早結束時間(Late Finish,簡稱LF),在不拖延項目進度的情況下,該活動可以完成的最晚可能
最少時間:關鍵路徑的時間。理解爲多個活動並行,最短時間取最長路徑.

最晚開始 = 關鍵路徑時間-該路徑時間

RSA

RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。可用於數字簽名。

非對稱加密,私鑰自己保管,公匙提供給對方解密。

數字簽名用於通信AB雙方,A向B發送簽名消息,則

B可以驗證消息是否來源於A

A不能否認發送消息

B不能編造或者改變消息。

A/D和D/A轉換器

D/A轉換器的性能指標包括分辨率、穩定時間(轉換時間)、絕對精度、線性誤差。

分辨率:刻度上最小單位

8位D/A變換器的輸出最大電壓爲5V,其分辨率指標是最低有效位輸入時輸出的變化程度,那麼該D/A變換器的分辨率=5V/2^8 = 5v/256 = 20mv

CMM

CMM即軟件能力成熟度模型,是目前國際上最流行、最實用的軟件生產過程標準和軟件企業成熟度的等級認證標準。CMM是美國卡內-梅隆大學軟件工程研究所與企業、政府合作的基礎上開發的模型,主要用於評價軟件企業的質量保證能力。

CMM把軟件開發過程的成熟度由低到高分爲初始級、可重複級、已定義級、己管理級和優化級共5個級別,每個成熟度等級被分解成幾個關鍵過程域,共18個關鍵過程區域,其中初始級無關鍵過程區域。

可重複級包括6個關鍵過程區域,爲軟件配置管理、軟件質量保證、軟件子合同管理、軟件項目跟蹤與監督、軟件項目策劃、軟件需求管理;

已定義級包括7個關鍵過程區域,爲同行評審、組間協調、軟件產品工程、集成軟件管理、培訓大綱、組織過程定義、組織過程集點;

己管理級包括2個關鍵過程區域,爲軟件質量管理和定量過程管理;

優化級包括3個關鍵過程區域,爲過程更改管理、技術改革管理和缺陷預防。

編譯

編譯器:生產目標執行文件,C/ C++/ JAVA之類的語言。

解釋器:一條條解釋,腳本類。

條件編譯:C語言中提供控制編譯器流程的語句

Cache-內存映射

直接映射

內存地址映射到固定的cache,表現爲多個內存地址映射到同一個cache地址

全相聯映射

任意內存地址可以映射到cache,表現爲映射隨意,有cache空間就映射

組相聯映射

內存分組、cache分組,組之間的映射爲全相聯映射,組內間爲直接映射,是上述兩個的折中做法

Brust

突發訪問模式 burst access mode

正常訪問:寫一個地址,再讀取數據;訪問n個地址的數據需要2n個週期

Burst:寫一個地址,連續讀取數據,訪問n個地址的數據需要n+1個週期

MTBF

平均故障間隔時間(MTBF)用以表示系統平均無故障可正常運行的時間,是所選時段多次故障間隔時間的平均值,MTBF越大,表示系統越可靠。

實時性

嵌入式實時系統中,有3個主要指標衡量系統的實時性,即響應時間、吞吐量和生存時間。

響應時間是計算機從識別一個外部事件到處理完這個事件的時間;

吞吐量是指在給定的時間內,系統可以處理的事件總數;

生存時間是數據有效等待的時間,在這段時間內數據是有效的。

嵌入式實時系統是指系統能夠在指定或者確定的時間內,完成系統功能和外部或內部、同步或異步事件做出響應的系統。因此,單純使用絕對的響應時間長短,是不能衡量系統的實時性的。

Spooling

Spooling的意思是外部設備同時聯機操作,又稱爲假脫機輸入/輸出操作,是操作系統中採用的一項將獨佔設備改造成共享設備的技術。Spooling系統的組成包括三部分:輸入井和輸出井、輸入緩衝區和輸出緩衝區、輸入進程和輸出進程。爲了解決CPU輸出數據的速度遠遠高於打印機的打印速度這一矛盾,在操作系統中一般採用Spooling技術。

上拉電阻

在一般的硬件設計尤其是IIC的電路設計中,對於SDA和SCL兩線,由於其內部是漏極開路(open-drain),通過上拉電阻外加一個3.3V電源,用於增強系統的驅動能力。

電容

電源設計中,爲了去除干擾噪聲,需要對電源進行濾波處理,通常採用電容進行濾波處理,以保護系統電源信號的穩定性。

參考:

寄存器:https://www.cnblogs.com/zhaoyl/archive/2012/05/15/2501972.html

http://qiusuoge.com/10004.html

彙編指令:https://blog.csdn.net/wwwwws/article/details/8559174

覆蓋測試:https://baike.baidu.com/item/%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95/934440?fr=aladdin

PV:https://baike.baidu.com/item/PV%E5%8E%9F%E8%AF%AD/1882650?fr=aladdin

臨界資源:https://blog.csdn.net/liuchuo/article/details/51986201

DMA:https://baike.baidu.com/item/DMA/2385376?fr=aladdin

片選/線選:http://www.docin.com/p-615586033.html

海明碼:https://www.cnblogs.com/claireyuancy/p/6892687.html

https://blog.csdn.net/feipeng8848/article/details/50924078

奇/偶校驗:https://baike.baidu.com/item/%E5%A5%87%E6%A0%A1%E9%AA%8C/1684279?fr=aladdin

音頻:https://baike.baidu.com/item/MPEG/213546?fr=aladdin

https://baike.baidu.com/item/WAV/218914?fr=aladdin

郵件協議:http://edm.ishang.net/faq/detail/the-imap-protocol.html

地址:https://zhidao.baidu.com/question/1821054119642164908.html

編址:https://mp.csdn.net/postedit/83212613
碼:https://blog.csdn.net/flycct/article/details/50573832

棧:https://baike.baidu.com/item/%E5%A0%86%E6%A0%88%E6%8C%87%E9%92%88/8770086?fr=aladdin

CPM:https://blog.csdn.net/qq_32317661/article/details/80747828

https://www.jianshu.com/p/1857ed4d8128

https://blog.csdn.net/Key_MQL/article/details/52237595?utm_source=blogxgwz0

RSA:https://baike.baidu.com/pic/RSA%E7%AE%97%E6%B3%95/263310/0/245e8bca80c9f495c9176831?fr=lemma&ct=single#aid=0&pic=245e8bca80c9f495c9176831

映射:https://blog.csdn.net/dongyanxia1000/article/details/53392315

Brust:https://blog.csdn.net/langdao04/article/details/8995216

尋址範圍:https://blog.csdn.net/obanaganastar/article/details/83212613

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章