hex文件格式学习记录
.hex文件
- .hex文件是什么
- .hex文件的數據結構
- 按照記錄類型具體分析
- Mermaid
- Flowchart
.hex文件是什么
它是由一行行符合Intel HEX 文件格式的文本所構成的ASCII 文本文件。每一行包含一 個 HEX 記錄 ,由對應機器語言碼和/或常量數據的十六進制編碼數字組成。Hex文件通常用于傳輸將被存于ROM 或者EPROM 中的程序和數 據。大多數EPROM 編程器或模擬器使用Intel HEX 文件。Hex文件是可以燒寫到單片機中,被單片機執行的一種文件格式,生成Hex文件的方式由很多種,可以通過不同的編譯器將C程序或者匯編程序編譯生成hex。
.hex文件的數據結構
Hex文件的記錄格式如下:
Intel HEX 由任意數量的十六進制記錄組成。每個記錄包含5個域,每一組字母 對應一個不同的域,每一個字母對應一個十六進制編碼的數字。每一個域由至少兩個十六進制編碼數字組成,它們構成一個字節。
- :(冒號)每個Intel HEX 記錄都由冒號開頭;
- LL 是數據長度域, 它代表記錄當中數據字節 (D…D) 的數量;
- aaaa 是地址域, 它代表記錄當中數據的起始地址;
- TT是代表HEX 記錄類型的域 , 它可能是以下數據當中的一 個:
00:數據記錄(Data Record),用來記錄數據,HEX文件的大部分記錄都是數據記錄。
01:文件結束記錄(End of FileRecord),用來標識文件結束,放在文件的最后,標識HEX文件的結尾。
02:擴展段地址記錄(ExtendedSegment Address Record),用來標識擴展段地址的記錄,擴展段地址記錄(HEX86),它包含4~19位數據地址段。由于普通的Intel的HEX記錄文件只能記錄64K的地址范圍,所以大于64K的地址數據要靠擴展段地址記錄。
03:開始段地址記錄(Start Segment Address Record)
04:擴展線性地址記錄(Extended Linear Address Record),用來標識擴展線性地址的記錄,擴展線性地址記錄也叫32位地址記錄或者HEX386記錄,這些記錄包含了數據在存儲器里真實地址的高16位。 當一個擴展線性地址記錄被讀取后,將一直保持有效,直到它被另一個擴展地址記錄改變。因為它記錄的是后面數據在存儲器里存放的真實起始地址,所以它的起始地址偏移量(Load offset)總是0000。
05:開始線性地址記錄(Start Linear Address Record),32位機(80386或更高的CPU)的EIP寄存器里存放的地址(main函數的入口地址)。 - D…D是數據域,它代表一個字節的數據。一個記錄可以有許多數據字節。記錄當中數據字節的數量必須和數據長度域(LL)中指定的數字相符。
- CC是校驗和域,它表示這個記錄的校驗和。校驗和的計算是通過將記錄當中所有十六進制編碼數字對的值相加,以256為模進行以下補足。
(CheckSum: two’s complement of length,address,record type and data fields module 256.)
記錄格式可表示為:“:[1字節長度][2字節地址][1字節記錄類型][n字節數據段][1字節校驗和] ”
關于位、字節、二進制、十六進制:
二進制,是計算機為了快速方便而采用的一種記數方式,十六進制也是一種常用的記數方式。位(bit)就是一個二進制位,即可表示0和1,而字節(Byte)是計算機更通用的計算單位,1字節等于8位,可以代表256個數字(在編程中可以通過這些數字作為判斷),int類型一般為4字節,即32位。一個十六進制數,如0xf,代表16個數字,2的4次方,即4位,所以兩個十六進制數如0xff就是一個字節。
按照記錄類型具體分析
Intel HEX文件由任意數量以回車換行符結束的數據記錄組成,數據記錄外觀如下:
:10246200464C5549442050524F46494C4500464C33
其中,10 是這個記錄當中數據字節的數量,即0x10 ;2462 是數據將被下載 到存儲器當中的地址,即0x2462;00 是記錄類型(數據記錄),即0x00;464C…464C是數據,分別代表0x46,0x4C…,注意hex中的數據域是小端序的,即按照先低位字節后高位字節的方式記錄的;33 是這個記錄的校驗和,即0x33;計算方法如下:
256D-(10H+24H+62H+00H+46H+4CH+55H+49H+44H+20H+50H+52H+4FH+46H+49H+4CH+45H+00H+46H+4CH)%256D=33H。
各種進制數的后綴字母分別為:
B :二進制數。
Q :八進制數。
D :十進制數。
H :十六進制數。
關于%是取余和取模:
在JAVA、C、C++里,%是取余運算,英文remainder;
在Python里,%號是取模運算,英文modulus;
取余運算的除法是向零舍入,取模運算的除法是向小值舍入;
取余運算結果的符號與被除數相同,取模運算結果的符號與除數相同。
Intel HEX文件必須以文件結束(EOF)記錄結束這個記錄的記錄類的值必須是01.EOF記錄外觀總是如下:
:00000001FF
其中,00 是記錄當中數據字節的數量;
0000 是數據被下載到存儲器當中的地址,在文件結束記錄當中地址是沒有意義、被忽略的。0000h 是典型的地址;
01 是記錄類型 01(文件結束記錄);
FF 是這個記錄的校驗和,計算方法如下: 256D-(00H+00H+00H+01H)=FFH。
由于每行標識數據地址的只有2Byte,所以最大只能到64K,為了可以保存高地址的數據,就有了Extended Linear AddressRecord。如果這行的數據類型是0x04,那么,這行的數據就是隨后數據的基地址。擴展線性地址記錄也叫作32位地址記錄或HEX386記錄,這些記錄含數據的高16位擴展線性地址記錄總是有兩個數據字節,外觀如下:
:02000004FFFFFC
其中,02 是這個記錄當中數據字節的數量;
0000 是地址域,對于擴展線性地址記錄,這個域總是0000;
04 是記錄類型04( 擴展線性地址記錄);
FC 是這個記錄的校驗和, 計算如下: 256D-(02H+00H+00H+04H+FFH+FFH)/256D=FFH。
當一個擴展線性地址記錄被讀取,存儲于數據域的擴展線性地址被保存,它被用于從 Intel HEX 文件讀取來的隨后的記錄。線性地址保持有效,直到它被另外一個擴展地址記錄所改變。通過把記錄當中的地址域與被移位的來自擴展線性地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。
以下的例子演示了這個過 程:
:0200000480007A //數據記錄的絕對存儲器地址高16位為0x8000
:100000001D000A00000000000000000000000000C9
:100010000000000085F170706F0104005D00BD00FC
第一行,是擴展線性地址記錄,里面的數據、也就是基地址是0x8000,第二行是數據記錄,里面的地址值是0x0000。那么數據1D000A00000000000000000000000000(共16個字節)要寫入FLASH中的地址為 (0x00008000<< 16)| 0x0000,也就是寫入FLASH的0x80000000這個地址;第三行的數據寫入地址為0x80000010。當一個HEX文件的數據超過64k的時候,文件中就會出現多個擴展線性地址記錄。
左移運算符(<<):
將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。
例:a = a << 2 將a的二進制位左移2位,右補0,
左移1位后a = a * 2;
若左移時舍棄的高位不包含1,則每左移一位,相當于該數乘以2。
按位或運算符(|):
參加運算的兩個對象,按二進制位進行“或”運算。
運算規則:0|0=0; 0|1=1; 1|0=1; 1|1=1;
即 :參加運算的兩個對象只要有一個為1,其值為1。
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。
另,負數按補碼形式參加按位或運算。
“或運算”特殊作用:
常用來對一個數據的某些位置1。
方法:找到一個數,對應X要置1的位,該數的對應位為1,其余位為零。此數與X相或可使X中的某些位置1。
例:將X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。
擴展段地址記錄也叫HEX86 記錄 , 它包括4-19 位數據地址段。擴展段地址記總是有兩個數 據字節 , 外觀如下:
:020000021200EA
其中,02 是記錄當中數據字節的數量;
0000 是地址域。對于擴展段地址記錄,這個域總是0000;
02 是記錄類型 02( 擴展段地址記錄);
1200 是地址段;
EA 是這個記錄的校驗和。
當一個擴展段地址記錄被讀取,存儲于數據域的擴展段地址被保存, 它被應用于 從 Intel HEX 文件讀取來的隨后的記錄。段地址保持有效, 直到它被另外一 個擴展地址記錄所改變。通過把記錄當中的地址域與被移位的來自擴展段地址記錄的地址數據相加獲得數據記錄的絕對存儲器地址。
以下的例子演示了這個過程:
來自數據記錄地址域的地址 2462
擴展段地址記錄數據域 ???+1200
?????????????????????????????????????????---------
絕對存儲器地址 ??????????00014462
2018年12月29日15:17:45
Mermaid
編譯連接示意:
#mermaid-svg-8IPzajS5zIM1wWwG .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-8IPzajS5zIM1wWwG .label text{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .node rect,#mermaid-svg-8IPzajS5zIM1wWwG .node circle,#mermaid-svg-8IPzajS5zIM1wWwG .node ellipse,#mermaid-svg-8IPzajS5zIM1wWwG .node polygon,#mermaid-svg-8IPzajS5zIM1wWwG .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-8IPzajS5zIM1wWwG .node .label{text-align:center;fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .node.clickable{cursor:pointer}#mermaid-svg-8IPzajS5zIM1wWwG .arrowheadPath{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-8IPzajS5zIM1wWwG .flowchart-link{stroke:#333;fill:none}#mermaid-svg-8IPzajS5zIM1wWwG .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-8IPzajS5zIM1wWwG .edgeLabel rect{opacity:0.9}#mermaid-svg-8IPzajS5zIM1wWwG .edgeLabel span{color:#333}#mermaid-svg-8IPzajS5zIM1wWwG .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-8IPzajS5zIM1wWwG .cluster text{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-8IPzajS5zIM1wWwG .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-8IPzajS5zIM1wWwG text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-8IPzajS5zIM1wWwG .actor-line{stroke:grey}#mermaid-svg-8IPzajS5zIM1wWwG .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-8IPzajS5zIM1wWwG .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-8IPzajS5zIM1wWwG #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-8IPzajS5zIM1wWwG .sequenceNumber{fill:#fff}#mermaid-svg-8IPzajS5zIM1wWwG #sequencenumber{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG #crosshead path{fill:#333;stroke:#333}#mermaid-svg-8IPzajS5zIM1wWwG .messageText{fill:#333;stroke:#333}#mermaid-svg-8IPzajS5zIM1wWwG .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-8IPzajS5zIM1wWwG .labelText,#mermaid-svg-8IPzajS5zIM1wWwG .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-8IPzajS5zIM1wWwG .loopText,#mermaid-svg-8IPzajS5zIM1wWwG .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-8IPzajS5zIM1wWwG .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-8IPzajS5zIM1wWwG .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-8IPzajS5zIM1wWwG .noteText,#mermaid-svg-8IPzajS5zIM1wWwG .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-8IPzajS5zIM1wWwG .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-8IPzajS5zIM1wWwG .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-8IPzajS5zIM1wWwG .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-8IPzajS5zIM1wWwG .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG .section{stroke:none;opacity:0.2}#mermaid-svg-8IPzajS5zIM1wWwG .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-8IPzajS5zIM1wWwG .section2{fill:#fff400}#mermaid-svg-8IPzajS5zIM1wWwG .section1,#mermaid-svg-8IPzajS5zIM1wWwG .section3{fill:#fff;opacity:0.2}#mermaid-svg-8IPzajS5zIM1wWwG .sectionTitle0{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .sectionTitle1{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .sectionTitle2{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .sectionTitle3{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-8IPzajS5zIM1wWwG .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG .grid path{stroke-width:0}#mermaid-svg-8IPzajS5zIM1wWwG .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-8IPzajS5zIM1wWwG .task{stroke-width:2}#mermaid-svg-8IPzajS5zIM1wWwG .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG .taskText:not([font-size]){font-size:11px}#mermaid-svg-8IPzajS5zIM1wWwG .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-8IPzajS5zIM1wWwG .task.clickable{cursor:pointer}#mermaid-svg-8IPzajS5zIM1wWwG .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-8IPzajS5zIM1wWwG .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-8IPzajS5zIM1wWwG .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-8IPzajS5zIM1wWwG .taskText0,#mermaid-svg-8IPzajS5zIM1wWwG .taskText1,#mermaid-svg-8IPzajS5zIM1wWwG .taskText2,#mermaid-svg-8IPzajS5zIM1wWwG .taskText3{fill:#fff}#mermaid-svg-8IPzajS5zIM1wWwG .task0,#mermaid-svg-8IPzajS5zIM1wWwG .task1,#mermaid-svg-8IPzajS5zIM1wWwG .task2,#mermaid-svg-8IPzajS5zIM1wWwG .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-8IPzajS5zIM1wWwG .taskTextOutside0,#mermaid-svg-8IPzajS5zIM1wWwG .taskTextOutside2{fill:#000}#mermaid-svg-8IPzajS5zIM1wWwG .taskTextOutside1,#mermaid-svg-8IPzajS5zIM1wWwG .taskTextOutside3{fill:#000}#mermaid-svg-8IPzajS5zIM1wWwG .active0,#mermaid-svg-8IPzajS5zIM1wWwG .active1,#mermaid-svg-8IPzajS5zIM1wWwG .active2,#mermaid-svg-8IPzajS5zIM1wWwG .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-8IPzajS5zIM1wWwG .activeText0,#mermaid-svg-8IPzajS5zIM1wWwG .activeText1,#mermaid-svg-8IPzajS5zIM1wWwG .activeText2,#mermaid-svg-8IPzajS5zIM1wWwG .activeText3{fill:#000 !important}#mermaid-svg-8IPzajS5zIM1wWwG .done0,#mermaid-svg-8IPzajS5zIM1wWwG .done1,#mermaid-svg-8IPzajS5zIM1wWwG .done2,#mermaid-svg-8IPzajS5zIM1wWwG .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-8IPzajS5zIM1wWwG .doneText0,#mermaid-svg-8IPzajS5zIM1wWwG .doneText1,#mermaid-svg-8IPzajS5zIM1wWwG .doneText2,#mermaid-svg-8IPzajS5zIM1wWwG .doneText3{fill:#000 !important}#mermaid-svg-8IPzajS5zIM1wWwG .crit0,#mermaid-svg-8IPzajS5zIM1wWwG .crit1,#mermaid-svg-8IPzajS5zIM1wWwG .crit2,#mermaid-svg-8IPzajS5zIM1wWwG .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-8IPzajS5zIM1wWwG .activeCrit0,#mermaid-svg-8IPzajS5zIM1wWwG .activeCrit1,#mermaid-svg-8IPzajS5zIM1wWwG .activeCrit2,#mermaid-svg-8IPzajS5zIM1wWwG .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-8IPzajS5zIM1wWwG .doneCrit0,#mermaid-svg-8IPzajS5zIM1wWwG .doneCrit1,#mermaid-svg-8IPzajS5zIM1wWwG .doneCrit2,#mermaid-svg-8IPzajS5zIM1wWwG .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-8IPzajS5zIM1wWwG .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-8IPzajS5zIM1wWwG .milestoneText{font-style:italic}#mermaid-svg-8IPzajS5zIM1wWwG .doneCritText0,#mermaid-svg-8IPzajS5zIM1wWwG .doneCritText1,#mermaid-svg-8IPzajS5zIM1wWwG .doneCritText2,#mermaid-svg-8IPzajS5zIM1wWwG .doneCritText3{fill:#000 !important}#mermaid-svg-8IPzajS5zIM1wWwG .activeCritText0,#mermaid-svg-8IPzajS5zIM1wWwG .activeCritText1,#mermaid-svg-8IPzajS5zIM1wWwG .activeCritText2,#mermaid-svg-8IPzajS5zIM1wWwG .activeCritText3{fill:#000 !important}#mermaid-svg-8IPzajS5zIM1wWwG .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-8IPzajS5zIM1wWwG g.classGroup text .title{font-weight:bolder}#mermaid-svg-8IPzajS5zIM1wWwG g.clickable{cursor:pointer}#mermaid-svg-8IPzajS5zIM1wWwG g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-8IPzajS5zIM1wWwG g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-8IPzajS5zIM1wWwG .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-8IPzajS5zIM1wWwG .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-8IPzajS5zIM1wWwG .dashed-line{stroke-dasharray:3}#mermaid-svg-8IPzajS5zIM1wWwG #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG .commit-id,#mermaid-svg-8IPzajS5zIM1wWwG .commit-msg,#mermaid-svg-8IPzajS5zIM1wWwG .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-8IPzajS5zIM1wWwG g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-8IPzajS5zIM1wWwG g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-8IPzajS5zIM1wWwG g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-8IPzajS5zIM1wWwG .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-8IPzajS5zIM1wWwG .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-8IPzajS5zIM1wWwG .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-8IPzajS5zIM1wWwG .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-8IPzajS5zIM1wWwG .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-8IPzajS5zIM1wWwG .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-8IPzajS5zIM1wWwG .edgeLabel text{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-8IPzajS5zIM1wWwG .node circle.state-start{fill:black;stroke:black}#mermaid-svg-8IPzajS5zIM1wWwG .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-8IPzajS5zIM1wWwG #statediagram-barbEnd{fill:#9370db}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-state .divider{stroke:#9370db}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-8IPzajS5zIM1wWwG .note-edge{stroke-dasharray:5}#mermaid-svg-8IPzajS5zIM1wWwG .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-8IPzajS5zIM1wWwG .error-icon{fill:#522}#mermaid-svg-8IPzajS5zIM1wWwG .error-text{fill:#522;stroke:#522}#mermaid-svg-8IPzajS5zIM1wWwG .edge-thickness-normal{stroke-width:2px}#mermaid-svg-8IPzajS5zIM1wWwG .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-8IPzajS5zIM1wWwG .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-8IPzajS5zIM1wWwG .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-8IPzajS5zIM1wWwG .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-8IPzajS5zIM1wWwG .marker{fill:#333}#mermaid-svg-8IPzajS5zIM1wWwG .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-8IPzajS5zIM1wWwG {color: rgba(0, 0, 0, 0.75);font: ;}編譯鏈接打包編譯打包鏈接.c/.h源文件.o二進制文件.hex燒錄文件.a壓縮文件.c/.h更新源文件.o二進制文件項目相關需求:
#mermaid-svg-gVGWqwb8Bbld9jKC .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .label text{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .node rect,#mermaid-svg-gVGWqwb8Bbld9jKC .node circle,#mermaid-svg-gVGWqwb8Bbld9jKC .node ellipse,#mermaid-svg-gVGWqwb8Bbld9jKC .node polygon,#mermaid-svg-gVGWqwb8Bbld9jKC .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-gVGWqwb8Bbld9jKC .node .label{text-align:center;fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .node.clickable{cursor:pointer}#mermaid-svg-gVGWqwb8Bbld9jKC .arrowheadPath{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-gVGWqwb8Bbld9jKC .flowchart-link{stroke:#333;fill:none}#mermaid-svg-gVGWqwb8Bbld9jKC .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-gVGWqwb8Bbld9jKC .edgeLabel rect{opacity:0.9}#mermaid-svg-gVGWqwb8Bbld9jKC .edgeLabel span{color:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-gVGWqwb8Bbld9jKC .cluster text{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-gVGWqwb8Bbld9jKC .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-gVGWqwb8Bbld9jKC text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-gVGWqwb8Bbld9jKC .actor-line{stroke:grey}#mermaid-svg-gVGWqwb8Bbld9jKC .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-gVGWqwb8Bbld9jKC #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .sequenceNumber{fill:#fff}#mermaid-svg-gVGWqwb8Bbld9jKC #sequencenumber{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC #crosshead path{fill:#333;stroke:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .messageText{fill:#333;stroke:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-gVGWqwb8Bbld9jKC .labelText,#mermaid-svg-gVGWqwb8Bbld9jKC .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-gVGWqwb8Bbld9jKC .loopText,#mermaid-svg-gVGWqwb8Bbld9jKC .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-gVGWqwb8Bbld9jKC .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-gVGWqwb8Bbld9jKC .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-gVGWqwb8Bbld9jKC .noteText,#mermaid-svg-gVGWqwb8Bbld9jKC .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-gVGWqwb8Bbld9jKC .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-gVGWqwb8Bbld9jKC .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-gVGWqwb8Bbld9jKC .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-gVGWqwb8Bbld9jKC .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC .section{stroke:none;opacity:0.2}#mermaid-svg-gVGWqwb8Bbld9jKC .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-gVGWqwb8Bbld9jKC .section2{fill:#fff400}#mermaid-svg-gVGWqwb8Bbld9jKC .section1,#mermaid-svg-gVGWqwb8Bbld9jKC .section3{fill:#fff;opacity:0.2}#mermaid-svg-gVGWqwb8Bbld9jKC .sectionTitle0{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .sectionTitle1{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .sectionTitle2{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .sectionTitle3{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-gVGWqwb8Bbld9jKC .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC .grid path{stroke-width:0}#mermaid-svg-gVGWqwb8Bbld9jKC .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-gVGWqwb8Bbld9jKC .task{stroke-width:2}#mermaid-svg-gVGWqwb8Bbld9jKC .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC .taskText:not([font-size]){font-size:11px}#mermaid-svg-gVGWqwb8Bbld9jKC .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-gVGWqwb8Bbld9jKC .task.clickable{cursor:pointer}#mermaid-svg-gVGWqwb8Bbld9jKC .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gVGWqwb8Bbld9jKC .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gVGWqwb8Bbld9jKC .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gVGWqwb8Bbld9jKC .taskText0,#mermaid-svg-gVGWqwb8Bbld9jKC .taskText1,#mermaid-svg-gVGWqwb8Bbld9jKC .taskText2,#mermaid-svg-gVGWqwb8Bbld9jKC .taskText3{fill:#fff}#mermaid-svg-gVGWqwb8Bbld9jKC .task0,#mermaid-svg-gVGWqwb8Bbld9jKC .task1,#mermaid-svg-gVGWqwb8Bbld9jKC .task2,#mermaid-svg-gVGWqwb8Bbld9jKC .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-gVGWqwb8Bbld9jKC .taskTextOutside0,#mermaid-svg-gVGWqwb8Bbld9jKC .taskTextOutside2{fill:#000}#mermaid-svg-gVGWqwb8Bbld9jKC .taskTextOutside1,#mermaid-svg-gVGWqwb8Bbld9jKC .taskTextOutside3{fill:#000}#mermaid-svg-gVGWqwb8Bbld9jKC .active0,#mermaid-svg-gVGWqwb8Bbld9jKC .active1,#mermaid-svg-gVGWqwb8Bbld9jKC .active2,#mermaid-svg-gVGWqwb8Bbld9jKC .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-gVGWqwb8Bbld9jKC .activeText0,#mermaid-svg-gVGWqwb8Bbld9jKC .activeText1,#mermaid-svg-gVGWqwb8Bbld9jKC .activeText2,#mermaid-svg-gVGWqwb8Bbld9jKC .activeText3{fill:#000 !important}#mermaid-svg-gVGWqwb8Bbld9jKC .done0,#mermaid-svg-gVGWqwb8Bbld9jKC .done1,#mermaid-svg-gVGWqwb8Bbld9jKC .done2,#mermaid-svg-gVGWqwb8Bbld9jKC .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-gVGWqwb8Bbld9jKC .doneText0,#mermaid-svg-gVGWqwb8Bbld9jKC .doneText1,#mermaid-svg-gVGWqwb8Bbld9jKC .doneText2,#mermaid-svg-gVGWqwb8Bbld9jKC .doneText3{fill:#000 !important}#mermaid-svg-gVGWqwb8Bbld9jKC .crit0,#mermaid-svg-gVGWqwb8Bbld9jKC .crit1,#mermaid-svg-gVGWqwb8Bbld9jKC .crit2,#mermaid-svg-gVGWqwb8Bbld9jKC .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-gVGWqwb8Bbld9jKC .activeCrit0,#mermaid-svg-gVGWqwb8Bbld9jKC .activeCrit1,#mermaid-svg-gVGWqwb8Bbld9jKC .activeCrit2,#mermaid-svg-gVGWqwb8Bbld9jKC .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-gVGWqwb8Bbld9jKC .doneCrit0,#mermaid-svg-gVGWqwb8Bbld9jKC .doneCrit1,#mermaid-svg-gVGWqwb8Bbld9jKC .doneCrit2,#mermaid-svg-gVGWqwb8Bbld9jKC .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-gVGWqwb8Bbld9jKC .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-gVGWqwb8Bbld9jKC .milestoneText{font-style:italic}#mermaid-svg-gVGWqwb8Bbld9jKC .doneCritText0,#mermaid-svg-gVGWqwb8Bbld9jKC .doneCritText1,#mermaid-svg-gVGWqwb8Bbld9jKC .doneCritText2,#mermaid-svg-gVGWqwb8Bbld9jKC .doneCritText3{fill:#000 !important}#mermaid-svg-gVGWqwb8Bbld9jKC .activeCritText0,#mermaid-svg-gVGWqwb8Bbld9jKC .activeCritText1,#mermaid-svg-gVGWqwb8Bbld9jKC .activeCritText2,#mermaid-svg-gVGWqwb8Bbld9jKC .activeCritText3{fill:#000 !important}#mermaid-svg-gVGWqwb8Bbld9jKC .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-gVGWqwb8Bbld9jKC g.classGroup text .title{font-weight:bolder}#mermaid-svg-gVGWqwb8Bbld9jKC g.clickable{cursor:pointer}#mermaid-svg-gVGWqwb8Bbld9jKC g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-gVGWqwb8Bbld9jKC g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-gVGWqwb8Bbld9jKC .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-gVGWqwb8Bbld9jKC .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-gVGWqwb8Bbld9jKC .dashed-line{stroke-dasharray:3}#mermaid-svg-gVGWqwb8Bbld9jKC #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC .commit-id,#mermaid-svg-gVGWqwb8Bbld9jKC .commit-msg,#mermaid-svg-gVGWqwb8Bbld9jKC .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-gVGWqwb8Bbld9jKC g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-gVGWqwb8Bbld9jKC g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-gVGWqwb8Bbld9jKC g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-gVGWqwb8Bbld9jKC .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-gVGWqwb8Bbld9jKC .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-gVGWqwb8Bbld9jKC .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-gVGWqwb8Bbld9jKC .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-gVGWqwb8Bbld9jKC .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-gVGWqwb8Bbld9jKC .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-gVGWqwb8Bbld9jKC .edgeLabel text{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gVGWqwb8Bbld9jKC .node circle.state-start{fill:black;stroke:black}#mermaid-svg-gVGWqwb8Bbld9jKC .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-gVGWqwb8Bbld9jKC #statediagram-barbEnd{fill:#9370db}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-state .divider{stroke:#9370db}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-gVGWqwb8Bbld9jKC .note-edge{stroke-dasharray:5}#mermaid-svg-gVGWqwb8Bbld9jKC .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-gVGWqwb8Bbld9jKC .error-icon{fill:#522}#mermaid-svg-gVGWqwb8Bbld9jKC .error-text{fill:#522;stroke:#522}#mermaid-svg-gVGWqwb8Bbld9jKC .edge-thickness-normal{stroke-width:2px}#mermaid-svg-gVGWqwb8Bbld9jKC .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-gVGWqwb8Bbld9jKC .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-gVGWqwb8Bbld9jKC .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-gVGWqwb8Bbld9jKC .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-gVGWqwb8Bbld9jKC .marker{fill:#333}#mermaid-svg-gVGWqwb8Bbld9jKC .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-gVGWqwb8Bbld9jKC {color: rgba(0, 0, 0, 0.75);font: ;}尋址替換.map地址文件.hex燒錄文件更新數據2018年12月29日15:20:33
Flowchart
具體流程細節
Created with Rapha?l 2.2.0開始n=0讀取.map文件中待替換變量在pflash中的起始地址和字節數,記作aa和s獲取下一個行數:n=n+1讀取.hex文件中第n行的地址域,記作an搜索替換的起始行數:an<=aa<an+32?計算替換變量所占行數:l=s/32向上取整;令i=n;a(i)=an+32*(i-n)判斷變量是否多跨一行:an+32*l<aa+s?l=l+1從第i行數據域的aa-a(i)字節后開始替換;替換完成后重算該行的校驗和;判斷循環是否繼續:i+1<n+l?獲取下一行行數:i=i+1;從第i行數據域開始替換;替換完成后重算該行的校驗和;結束yesnoyesnoyesno總結
以上是生活随笔為你收集整理的hex文件格式学习记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux桌面i3与i7,IT小干货
- 下一篇: 数字电子钟的设计与制作