新增:串口通讯避障功能

​ 1、Launcher中的串口只使用串口0(调试串口)、串口2(主动RS485端口);串口1与串口3不使用,且不初始化。将串口通讯缓冲区修改为1100Byte。

​  目的:CH564由于将Launcher代码搬运到RAM中运行,因此可使用的变量大小只有32Kbyte。不使用的串口将不初始化,同时使用的通讯缓冲区将节约出来,否则RAM空间不够使用。

​ 2、串口2 - 增加RS485使能,同时通讯增加避障功能。
This commit is contained in:
caocong
2026-01-19 16:39:22 +08:00
parent 094fd76a72
commit 5e9338cee4
37 changed files with 37088 additions and 289 deletions

View File

@@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-973562663347761187" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-1165963439095783164" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>

View File

@@ -0,0 +1,145 @@
:080000006F00300B000000004E
:1000080001000100010001000100010001000100E0
:1000180001000100010001000100010001000100D0
:10002800010001008280EF02B003B7074040411190
:10003800238D070037B9030002C61309F99737045F
:1000480040409D49154AB2476376F900054541018C
:100058006F005004230D34016537230C44014D37DC
:100068001C2C793F1C2C93F4F70F593F93F714007D
:10007800230D040089C7B24785073EC6E9B7014585
:10008800F9B7EF02E07D2A84AE84713F85472A895B
:100098006305F50413DA040193D98400AD47937A14
:1000A800F40F137AFA0F93F9F90F93F4F40F630628
:1000B800F400930780046315F402370440409D4719
:1000C8003CAC3D3F230C5401253F230C44010D3F1C
:1000D800230C3401353704AC25374A856F00807B03
:1000E800370440400D4B230D6401193F99471CAC60
:1000F800013F230D04002937230D6401D9B7EF020E
:10010800C0770547AA87638DE5000947638EE50038
:10011800014589E5BE8513050002A5376F002078E3
:10012800AA8513052005D5BFAA851305800DF5B747
:10013800EF022072937BF50F130900103309794100
:100148002A8A2E84328BAA8509456361C902153F24
:10015800AA8A229BB704404063158B0056856F001E
:10016800C0721C2005049CAC613DFDB7193FAA8AEA
:100178002299B70440401C2005049CAC5135E31C6F
:1001880024FF93090BF0DE9913040A103304744119
:1001980093D989008144B70B404063E934033304A1
:1001A8006A01937504F00945E93DB3EAAA00814460
:1001B8001374F40FB7094040E3F284FAB3079900C7
:1001C8009C238504238CF900253DFDB79395840075
:1001D800A29509457D35B3EAAA00130C0910834797
:1001E80009000509238CFB00213DE31A89FFE397E9
:1001F8000AF68504C204C1804DB7EF026066AE847A
:10020800AA852D453284B7094040A53D83C7890199
:100218002A89FD3383C78901A294DD3363159400CD
:100228004A856F00206783C789010504A30FF4FE80
:10023800C13BEDB7EF02C062AE84AA851305800406
:100248003284B7094040353D83C789012A894D3B2F
:1002580083C78901A2946D3383C789010504A30F5D
:10026800F4FE793BE31A94FE4A852DA5EF02605E01
:1002780041118567131415003EC2A167330AB40003
:100288003EC4C167AA8A13541A003EC654000149E5
:100298003306AA409C423357F4023307F7026365DA
:1002A8005701BA976374F606630509007D19137937
:1002B800F90F2285CA85A13593172900C1078A97A6
:1002C80083A947FFE177AA8433543403A16B33042D
:1002D8003403A2993E94330B7401631E090263EA46
:1002E8006A05216BB30A5A414E9B568A630B09046F
:1002F800216963E86A0585454E851135C98CB307C0
:100308002B018DE4DA89D28A3E8BE5B7050991067F
:100318001379F90F41B7E3647BFDE36254FD22854D
:100328008545F13BC98C33047441D5D426854101F8
:10033800A9ABFD773E9BDA85130500029933C98C7A
:1003480079BF0569E3F459FFCE8513050002338AA6
:100358002901053BC98CD289F5B7B70700201307D7
:10036800A0052380E7008280B707002023800700CC
:100378008280EF02805041112A840D653000A1452A
:100388001305C50C453D1C87AA841CA09C871CB07E
:100398001C843CA09C843CB01C855CA09C855CB003
:1003A8005931458D4101E5A9EF02204D41112A84BB
:1003B8000D653000A1451305C50CAD3D1C87AA8409
:1003C8001CA09C871CB01C843CA09C843CB01C8551
:1003D8005CA09C855CB01C867CA09C867CB0A1310E
:1003E800458D41016DA9EF0240492A842A860D6591
:1003F8009145130545093D3D1C203830AA843CB081
:1004080018A01C3038203CA018B03139458D41A9BE
:10041800EF02A0464111AA840D651306F100854537
:100428001D05093D9C872A841307000A93F70702D4
:1004380081C71307100A8547B70600209CA0A38030
:10044800E600D536418D410199A9B707002003C7B9
:1004580007009307A0056316F706EF0260404111F5
:1004680085647000914513854400E9331C861307A1
:10047800500F2A846393E70498866310F7041C8757
:10048800639DE7029887631AF702B7B75AA593875F
:1004980057A593854400130520043EC6DD362A84FB
:1004A8008144B709404011497C00A6979C238504E4
:1004B800238CF900B136E39924FFB536418D41010B
:1004C800D1AE11458280EF02403B370440408D4752
:1004D8003CAC3D36930790FB1CAC1D36230D040045
:1004E8007DAEEF028039370440408D473CAC093E71
:1004F8009307B0FA1CAC2936230D04004DA6EF0271
:10050800C0373709002083471900AE8401112A84B7
:10051800B2859DCB834719001307100A639EE70233
:10052800B707F9FFB306F40021670D4563F4E60247
:10053800FD17AE97A29763FFE700268622857539D7
:100548002A84D534418D39A01305F10132C6C93545
:10055800B24569D10561A1A61307000AE39FE7FC2C
:10056800B707FDFFC1B7EF024031B704002083C7CA
:10057800140001112A84B9C783C714001307100A8D
:10058800639AE704B367B400D2070D45B1E3B70730
:10059800F9FFB306F400216763FCE602FD17AE9786
:1005A800A29763F7E702B707002003C7070093077E
:1005B800A0051145631EF70022854D392A84A5340C
:1005C800418D39A01305F1012EC69935B2454DD597
:1005D8000561F1A41307000AE397E7FCB367B400C9
:1005E800D2070D45F5F7B707FDFF65B7EF02E0281D
:1005F800B704002083C7140001112A84A1C783C748
:1006080014001307100A6399E704B707F9FFB30644
:10061800F40021670D4563FFE602FD17B297A29724
:1006280063FAE702B707002003C707009307A0058E
:1006380011456311F7022285E53C2A84EFF0BF9E3D
:10064800418D09A81305F10132C62EC4D133A24544
:10065800324655D50561A1A41307000AE394E7FCC7
:10066800B707FDFF6DB7EF024021B704002083C72D
:10067800140001112A84A9C783C714001307100A9C
:100688006398E704B367B400D2070D45370707003E
:1006980095EF637DE4029387F5FFA29763F8E7027D
:1006A800B707002003C707009307A0051145631F7C
:1006B800F7002285653E2A84EFF0FF96418D39A028
:1006C8001305F1012EC6A933B2455DD50561C1AA4E
:1006D8001307000AE396E7FCB367B400D2070D4599
:1006E800F5F73707030075B7EF022019B7040020A4
:1006F80083C7140001112A84B1C383C714001307E8
:10070800100A6397E704370707000D456370E40490
:100718009307F6FFA29763FBE702B707002003C71A
:1007280007009307A00511456312F7022285EFF031
:100738003FA02A84EFF03F8F418D09A81305F101EE
:1007480032C62EC4F131A245324645D9056181AA87
:100758001307000AE393E7FC370703007DB7EF02AE
:100768002010B709002083C7190041112A89AE84D7
:10077800328485CF83C719001307100A639DE702E7
:10078800370707000D456376E9029307F4FFCA9718
:1007980063F1E702B3898400330999400144639304
:1007A8009902EFF05F88418D29A01305E1008D3192
:1007B80071D14101C5A01307000AE39DE7FC370783
:1007C8000300C9B71306F100854533852401EFF00E
:1007D800DFA298209C872A846305F700136525000B
:1007E800C9BF85046DBFEF02A007B709002083C702
:1007F800190041112A842E89B2849DCB83C7190020
:100808001307100A639CE702370707000D45637555
:10081800E4029387F4FFA29763F0E7024A86A6856D
:100828002285EFF09F9D2A84EFF0EFFF418D29A0EC
:100838001305F100F13E79D14101A9A81307000A77
:10084800E39EE7FC37070300D1B7397101436EC651
:1008580019A0397141536AC866CA62CC5ECE19A024
:10086800397101535AD056D252D44ED64AD826DAC4
:1008780022DC06DE33016140828241114AC026C271
:1008880022C406C68282B24D4101024D924C224CCE
:10089800B24B4101024B924A224AB24941010249F4
:1008A80092442244B2404101828097010020938102
:1008B800E1F417F100201301617437850600B705CC
:1008C80000203786002063FAC5008322050023A094
:1008D800550011059105E3EAC5FEFD42739002BC7F
:0808E800370500206700050040
:00000001FF

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,896 @@
:020000040000FA
:100000006F00300B00000000010001000100010042
:1000100001000100010001000100010001000100D8
:100020000100010001000100010001008280EF02D7
:10003000B003B70740404111238D070037B90300D3
:1000400002C61309F997370440409D49154AB24743
:100050006376F900054541016F005004230D34011A
:100060006537230C44014D371C2C793F1C2C93F42D
:10007000F70F593F93F71400230D040089C7B247C7
:1000800085073EC6E9B70145F9B7EF02E07D2A844E
:10009000AE84713F85472A896305F50413DA0401AC
:1000A00093D98400AD47937AF40F137AFA0F93F93A
:1000B000F90F93F4F40F6306F400930780046315BB
:1000C000F402370440409D473CAC3D3F230C5401B3
:1000D000253F230C44010D3F230C3401353704AC7C
:1000E00025374A856F00807B370440400D4B230D38
:1000F0006401193F99471CAC013F230D04002937C7
:10010000230D6401D9B7EF02C0770547AA87638D35
:10011000E5000947638EE500014589E5BE851305C5
:100120000002A5376F002078AA8513052005D5BFEA
:10013000AA851305800DF5B7EF022072937BF50FAA
:1001400013090010330979412A8A2E84328BAA853B
:1001500009456361C902153FAA8A229BB704404042
:1001600063158B0056856F00C0721C2005049CAC83
:10017000613DFDB7193FAA8A2299B70440401C206F
:1001800005049CAC5135E31C24FF93090BF0DE9968
:1001900013040A103304744193D989008144B70BC6
:1001A000404063E9340333046A01937504F0094560
:1001B000E93DB3EAAA0081441374F40FB709404043
:1001C000E3F284FAB30799009C238504238CF90099
:1001D000253DFDB793958400A29509457D35B3EA89
:1001E000AA00130C0910834709000509238CFB00A2
:1001F000213DE31A89FFE3970AF68504C204C18012
:100200004DB7EF026066AE84AA852D453284B709EA
:100210004040A53D83C789012A89FD3383C78901F1
:10022000A294DD33631594004A856F00206783C76D
:1002300089010504A30FF4FEC13BEDB7EF02C062D4
:10024000AE84AA85130580043284B7094040353D49
:1002500083C789012A894D3B83C78901A2946D33E5
:1002600083C789010504A30FF4FE793BE31A94FECA
:100270004A852DA5EF02605E4111856713141500B4
:100280003EC2A167330AB4003EC4C167AA8A1354B0
:100290001A003EC6540001493306AA409C42335717
:1002A000F4023307F70263655701BA976374F606E1
:1002B000630509007D191379F90F2285CA85A135D7
:1002C00093172900C1078A9783A947FFE177AA847A
:1002D00033543403A16B33043403A2993E94330B9B
:1002E0007401631E090263EA6A05216BB30A5A416D
:1002F0004E9B568A630B0904216963E86A058545AC
:100300004E851135C98CB3072B018DE4DA89D28A69
:100310003E8BE5B7050991061379F90F41B7E36400
:100320007BFDE36254FD22858545F13BC98C330496
:100330007441D5D426854101A9ABFD773E9BDA8572
:10034000130500029933C98C79BF0569E3F459FF9D
:10035000CE8513050002338A2901053BC98CD28959
:10036000F5B7B70700201307A0052380E7008280B8
:10037000B7070020238007008280EF0280504111E0
:100380002A840D653000A1451305C50C453D1C8729
:10039000AA841CA09C871CB01C843CA09C843CB0FC
:1003A0001C855CA09C855CB05931458D4101E5A957
:1003B000EF02204D41112A840D653000A14513053F
:1003C000C50CAD3D1C87AA841CA09C871CB01C8456
:1003D0003CA09C843CB01C855CA09C855CB01C86C9
:1003E0007CA09C867CB0A131458D41016DA9EF02B6
:1003F00040492A842A860D659145130545093D3DEE
:100400001C203830AA843CB018A01C3038203CA0F6
:1004100018B03139458D41A9EF02A0464111AA8497
:100420000D651306F10085451D05093D9C872A844D
:100430001307000A93F7070281C71307100A8547BD
:10044000B70600209CA0A380E600D536418D41016F
:1004500099A9B707002003C707009307A0056316F3
:10046000F706EF02604041118564700091451385E5
:100470004400E9331C861307500F2A846393E70472
:1004800098866310F7041C87639DE7029887631AB8
:10049000F702B7B75AA5938757A59385440013056C
:1004A00020043EC6DD362A848144B7094040114904
:1004B0007C00A6979C238504238CF900B136E39930
:1004C00024FFB536418D4101D1AE11458280EF0246
:1004D000403B370440408D473CAC3D36930790FB92
:1004E0001CAC1D36230D04007DAEEF0280393704AD
:1004F00040408D473CAC093E9307B0FA1CAC29360E
:10050000230D04004DA6EF02C037370900208347B2
:100510001900AE8401112A84B2859DCB834719004E
:100520001307100A639EE702B707F9FFB306F4004A
:1005300021670D4563F4E602FD17AE97A29763FFAE
:10054000E7002686228575392A84D534418D39A065
:100550001305F10132C6C935B24569D10561A1A6BD
:100560001307000AE39FE7FCB707FDFFC1B7EF02DF
:100570004031B704002083C7140001112A84B9C791
:1005800083C714001307100A639AE704B367B40023
:10059000D2070D45B1E3B707F9FFB306F4002167B1
:1005A00063FCE602FD17AE97A29763F7E702B70771
:1005B000002003C707009307A0051145631EF7003D
:1005C00022854D392A84A534418D39A01305F101C6
:1005D0002EC69935B2454DD50561F1A41307000A21
:1005E000E397E7FCB367B400D2070D45F5F7B7070B
:1005F000FDFF65B7EF02E028B704002083C71400B1
:1006000001112A84A1C783C714001307100A639934
:10061000E704B707F9FFB306F40021670D4563FF50
:10062000E602FD17B297A29763FAE702B707002028
:1006300003C707009307A00511456311F702228540
:10064000E53C2A84EFF0BF9E418D09A81305F10116
:1006500032C62EC4D133A245324655D50561A1A478
:100660001307000AE394E7FCB707FDFF6DB7EF023D
:100670004021B704002083C7140001112A84A9C7B0
:1006800083C714001307100A6398E704B367B40024
:10069000D2070D453707070095EF637DE402938786
:1006A000F5FFA29763F8E702B707002003C707002A
:1006B0009307A0051145631FF7002285653E2A8434
:1006C000EFF0FF96418D39A01305F1012EC6A93335
:1006D000B2455DD50561C1AA1307000AE396E7FCA0
:1006E000B367B400D2070D45F5F73707030075B7B8
:1006F000EF022019B704002083C7140001112A84D7
:10070000B1C383C714001307100A6397E7043707C0
:1007100007000D456370E4049307F6FFA29763FB9F
:10072000E702B707002003C707009307A00511459C
:100730006312F7022285EFF03FA02A84EFF03F8F8B
:10074000418D09A81305F10132C62EC4F131A2452D
:10075000324645D9056181AA1307000AE393E7FCF5
:10076000370703007DB7EF022010B709002083C7C9
:10077000190041112A89AE84328485CF83C71900BC
:100780001307100A639DE702370707000D456376DC
:10079000E9029307F4FFCA9763F1E702B389840083
:1007A00033099940014463939902EFF05F88418DCA
:1007B00029A01305E1008D3171D14101C5A01307B6
:1007C000000AE39DE7FC37070300C9B71306F100F1
:1007D000854533852401EFF0DFA298209C872A8489
:1007E0006305F70013652500C9BF85046DBFEF02DF
:1007F000A007B709002083C7190041112A842E8958
:10080000B2849DCB83C719001307100A639CE702CB
:10081000370707000D456375E4029387F4FFA2973D
:1008200063F0E7024A86A6852285EFF09F9D2A8421
:10083000EFF0EFFF418D29A01305F100F13E79D1D2
:100840004101A9A81307000AE39EE7FC370703004C
:10085000D1B7397101436EC619A0397141536AC8C5
:1008600066CA62CC5ECE19A0397101535AD056D2F5
:1008700052D44ED64AD826DA22DC06DE3301614055
:10088000828241114AC026C222C406C68282B24D6B
:100890004101024D924C224CB24B4101024B924A13
:1008A000224AB2494101024992442244B2404101E4
:1008B0008280970100209381E1F417F10020130159
:1008C00061745165B70500203756002063FAC500F2
:1008D0008322050023A0550011059105E3EAC5FE1A
:1008E000FD42739002BC3705002067000500000040
:020000040001F9
:104000006F105009000000000000002000000000B8
:10401000A2090020A40900200000006092180020DE
:1040200000000000000000009218002092180020FC
:1040300000000000000000009218002000000000B6
:10404000A60900200000000092180020921800200D
:104050009218002092180020921800209218002038
:104060009218002092180020921800209218002028
:104070009218002092180020921800209218002018
:104080009218002092180020921800209218002008
:10409000860B002092180020921800209218002011
:1040A00092180020921800201305800873100580D4
:1040B00037F500E0130535D1930500080F00F00F28
:1040C0002300B5002300B5002300B5002300B50090
:1040D0002300B5002300B5002300B5002300B50080
:1040E0002300B5002300B5002300B5002300B50070
:1040F0002300B5002300B5002300B5002300B50060
:104100002300B5002300B5002300B5002300B5004F
:104110002300B5002300B5002300B5002300B5003F
:104120000100010001000100010001000100010087
:104130000100010001000100010001000100010077
:10414000010001008280EF02C07FB70740404111AB
:10415000238D070037B9030002C61309F997370406
:1041600040409D49154AB2476376F9000545410133
:104170006F007000230D34016537230C44014D3767
:104180001C2C793F1C2C93F4F70F593F93F7140024
:10419000230D040089C7B24785073EC6E9B701452C
:1041A000F9B7EF02007A2A84AE84713F85472A89E5
:1041B0006305F50413DA040193D98400AD47937ABB
:1041C000F40F137AFA0F93F9F90F93F4F40F6306CF
:1041D000F400930780046315F402370440409D47C0
:1041E0003CAC3D3F230C5401253F230C44010D3FC3
:1041F000230C3401353704AC25374A856F00A0778E
:10420000370440400D4B230D6401193F99471CAC06
:10421000013F230D04002937230D6401D9B7EF02B4
:10422000E0730547AA87638DE5000947638EE500C3
:10423000014589E5BE8513050002A5376F0040746E
:10424000AA8513052005D5BFAA851305800DF5B7EE
:10425000EF02406E937BF50F13090010330979418B
:104260002A8A2E84328BAA8509456361C902153FCB
:10427000AA8A229BB704404063158B0056856F00C5
:10428000E06E1C2005049CAC613DFDB7193FAA8A75
:104290002299B70440401C2005049CAC5135E31C16
:1042A00024FF93090BF0DE9913040A1033047441C0
:1042B00093D989008144B70B404063E93403330448
:1042C0006A01937504F00945E93DB3EAAA00814407
:1042D0001374F40FB7094040E3F284FAB30799006E
:1042E0009C238504238CF900253DFDB7939584001C
:1042F000A29509457D35B3EAAA00130C091083473E
:1043000009000509238CFB00213DE31A89FFE3978F
:104310000AF68504C204C1804DB7EF028062AE8404
:10432000AA852D453284B7094040A53D83C7890140
:104330002A89FD3383C78901A294DD336315940074
:104340004A856F00406383C789010504A30FF4FE0B
:10435000C13BEDB7EF02E05EAE84AA851305800491
:104360003284B7094040353D83C789012A894D3BD6
:1043700083C78901A2946D3383C789010504A30F04
:10438000F4FE793BE31A94FE4A85F5A3EF02805AC6
:1043900041118567131415003EC2A167330AB400AA
:1043A0003EC4C167AA8A13541A003EC6540001498C
:1043B0003306AA409C423357F4023307F702636581
:1043C0005701BA976374F606630509007D191379DE
:1043D000F90F2285CA85A13593172900C1078A974D
:1043E00083A947FFE177AA8433543403A16B3304D4
:1043F0003403A2993E94330B7401631E090263EAED
:104400006A05216BB30A5A414E9B568A630B090415
:10441000216963E86A0585454E851135C98CB30766
:104420002B018DE4DA89D28A3E8BE5B70509910626
:104430001379F90F41B7E3647BFDE36254FD2285F4
:104440008545F13BC98C33047441D5D4268541019F
:1044500031ABFD773E9BDA85130500029933C98C99
:1044600079BF0569E3F459FFCE8513050002338A4D
:104470002901053BC98CD289F5B71307A005A38C88
:10448000E1828280A38C01828280EF02204D411163
:104490002A840D653000A1451305C50C653D1C87B8
:1044A000AA841CA09C871CB01C843CA09C843CB0AB
:1044B0001C855CA09C855CB07931458D4101C9A10A
:1044C000EF02C04941112A840D653000A145130552
:1044D000C50C49351C87AA841CA09C871CB01C8471
:1044E0003CA09C843CB01C855CA09C855CB01C8678
:1044F0007CA09C867CB08139458D410151A1EF02A1
:10450000E0452A842A860D659145130545099935AC
:104510001C203830AA843CB018A01C3038203CA0A5
:1045200018B01531458DA9A9EF0240434111AA8465
:104530000D651306F10085451D05293D9C872A84DC
:104540001307000A93F7070281C71307100A85476C
:104550009CA0238DE182C53E418D410115A103C779
:1045600091839307A0056316F706EF02803D411182
:1045700085647000914513854400E93B1C86130750
:10458000500F2A846393E70498866310F7041C870E
:10459000639DE7029887631AF702B7B75AA5938716
:1045A00057A593854400130520043EC6DD3E2A84AA
:1045B0008144B709404011497C00A6979C2385049B
:1045C000238CF900B13EE39924FFB53E418D4101B2
:1045D0005DA611458280EF026038370440408D4768
:1045E0003CAC3D3E930790FB1CAC1D3E230D0400EC
:1045F00041AEEF02A036370440408D473CAC0D364B
:104600009307B0FA1CAC293E230D040095AEEF02CF
:10461000E03483C7A183AE8401112A84B2859DCB87
:1046200083C7A1831307100A639EE702B707F9FF48
:10463000B306F40021670D4563F4E602FD17AE975B
:10464000A29763FFE70026862285C1392A84E53CCC
:10465000418D39A01305F10132C6F935B24569D152
:10466000056139AE1307000AE39FE7FCB707FDFFBA
:10467000C1B7EF02A02E83C7A18301112A84A9C765
:1046800083C7A1831307100A6398E704B367B400D4
:10469000D2070D45A1E3B707F9FFB306F400216780
:1046A00063FAE602FD17AE97A29763F5E70203C728
:1046B00091839307A0051145631EF7002285F93108
:1046C0002A845134418D39A01305F1012EC6A93D2C
:1046D000B2455DD505616DA41307000AE399E7FCB7
:1046E000B367B400D2070D45F5F7B707FDFF75B7FF
:1046F000EF02C02683C7A18301112A84A9C383C7FF
:10470000A1831307100A6396E704B707F9FFB306FE
:10471000F40021670D4563FCE602FD17B297A297EE
:1047200063F7E70203C791839307A0051145631060
:10473000F7022285313E2A843934418D09A81305B8
:10474000F10132C62EC4CD33A24532464DD90561A2
:1047500005AC1307000AE397E7FCB707FDFF45BF69
:10476000EF02C01F83C7A18301112A84B9C383C785
:10477000A1831307100A6396E704B367B400D20756
:104780000D453707070085EF637BE4029387F5FF4C
:10479000A29763F6E70203C791839307A00511452B
:1047A000631FF7002285DD362A84EFF0DF99418D03
:1047B00039A01305F1012EC6853BB2454DD90561DF
:1047C000C1A21307000AE398E7FCB367B400D2075D
:1047D0000D45F5F73707030045BFEF02201883C7E3
:1047E000A18301112A84A1C383C7A1831307100ADF
:1047F0006395E704370707000D45637EE4029307DE
:10480000F6FFA29763F9E70203C791839307A00518
:1048100011456312F7022285EFF09FA32A84EFF07F
:104820009F92418D09A81305F10132C62EC4ED39BE
:10483000A245324655D90561A1A21307000AE395A6
:10484000E7FC370703004DBFEF02A00F83C7A1832A
:1048500041112A89AE84328485CF83C7A18313078F
:10486000100A639DE702370707000D456376E902EA
:104870009307F4FFCA9763F1E702B3898400330911
:104880009940014463939902EFF0FF8B418D29A079
:104890001305E100513971D14101F1A81307000A54
:1048A000E39DE7FC37070300C9B71306F100854510
:1048B00033852401EFF07FA698209C872A84630526
:1048C000F70013652500C9BF85046DBFEF026007BF
:1048D00083C7A18341112A842E89B2849DCB83C7CB
:1048E000A1831307100A639CE702370707000D45F1
:1048F0006375E4029387F4FFA29763F0E7024A86A8
:10490000A6852285EFF07FA12A84EFF0DF83418D19
:1049100029A01305F100093979D14101A9A813078C
:10492000000AE39EE7FC37070300D1B73971014362
:104930006EC619A0397141536AC866CA62CC5ECE90
:1049400019A0397101535AD056D252D44ED64AD8F2
:1049500026DA22DC06DE33016140828241114AC040
:1049600026C222C406C68282B24D4101024D924C3B
:10497000224CB24B4101024B924A224AB2494101B8
:10498000024992442244B240410182802A8309CAEA
:1049900083830500230073007D16050385056DFAEA
:1049A000828001A001A00568028801A083C7D1828E
:1049B00093F7F707A386F18283D6E18113070010EE
:1049C0006393E602B7474040D8331377070FD8B355
:1049D000D83313671700D8B3374740405C3393E7A9
:1049E00007085CB3828083D6E18113070020639CB3
:1049F000E600B7474040D8331377070FD8B3D83312
:104A000013672700C9BF83D6E18113070030639C79
:104A1000E600B7474040D8331377070FD8B3D833F1
:104A2000136787004DBF03D7E18193070040E3156B
:104A3000F7FAB7474040D8331377070FD8B3375743
:104A4000002013070700F8C7130750032396E70A4F
:104A500009472387E70AD83313674700ADBFB74735
:104A600040407D479AABBAAB13070004F8CFB8D3E8
:104A7000F8D3B8D7F8D713070020B8DBF8DBB8DFD6
:104A80001387C19B98D31387C193D8D31387C1973A
:104A9000B8C31387C18B98D71387C18FF8C3375713
:104AA00000201307470BD8D71387C187B8C7239EA9
:104AB0000708238F07080947A38FE7082390070AF1
:104AC0002381070AA381E70A2392070A2383070A9F
:104AD000A383E70A2394070A2385070AA385E70A25
:104AE0002396070A2387070AA387E70A828015C54A
:104AF000EFF2DFE637444040A5471CA09307F005DE
:104B00003CA0B13F930780FBA30004001CA0114709
:104B1000B7E700E023A2E710A5B5B74740409823C8
:104B20001367270098A398231377D70F98A3B7E7A5
:104B300000E0114723A2E718828037474040231244
:104B4000A70A8347670A93F7C70F93E72700230352
:104B5000F70A8280EFF29FE02A861384C18B1385C7
:104B6000C19F9385C18B1D35EF0090038947630B6F
:104B7000F5007D1513351500A300A4040945230095
:104B80000404653FF5BB011126CC22CE4ACA4EC8AB
:104B900052C656C45AC2B744404098249C349376B7
:104BA000F70F418B630A0778983493F7F70F9D8BC3
:104BB000418B631307640947638BE75E6361F70604
:104BC0006393075C83C7F409A18B638C07589387B1
:104BD000C19B9823B6232381E1829833A381E1828C
:104BE000FA23DE23239EE1802390D182239FF1804C
:104BF00003CA21829386C19B137A0A0663180A2A84
:104C000083C531822D4593F7F50F6361B52AB7351A
:104C100000208A07938505BEAE979C43828715477F
:104C20006385E75C7244E2445249C249324AA24A6F
:104C3000124B05617300203083D701829946A1830E
:104C4000FD1793F7F70F63E4F612B73600208A07D3
:104C5000938606C1B6979C438287B7370020938717
:104C6000C7CF842323A2F18235A8B74740409433AD
:104C7000854513F6F60F639EB60A238BC180930613
:104C80000020239CD18003C7618185476318F70A00
:104C9000B73700209387C7CDA433B82323A2F1826E
:104CA000A204D98C83D7C18163F4F400239E918040
:104CB00003D7C1819307F0039304000463E6E70080
:104CC00083D4C181C204C18003AB4182268613858F
:104CD000C19BDA856539269B23A261839307F00F78
:104CE0006306FA1C83C72182E207E18763DC07447D
:104CF00003D7C1819307000463E6E70083D7C1812E
:104D0000C207C18303D7C1811D8F42074183239E00
:104D1000E18037474040231EF7089947230FF708E3
:104D2000374740408347F70993F7F707A30FF70882
:104D3000D5BD238B018093060004A1B7B7370020AF
:104D40009387C7CB91BF83D70182094793F7F70FAA
:104D50006388E702636AF70099EF938701818423F0
:104D600023A2F182014A3DBF0D476380E7028144DF
:104D7000130AF00F05BFB73700209387C7CAD5B510
:104D8000B7370020938747C8E9BDB737002093871E
:104D9000C7C6C1BDB7370020938707C6D9B583C63C
:104DA00061810547639CE602B73700209387C7CB34
:104DB000A433B823B7350020A204D98C375500207E
:104DC0001386E4FF9385E5CB1305A503C136B757DA
:104DD00000209387870323A2F182E9B583C761810D
:104DE00013FAF70FC9F7B73700209387C7CDA4335D
:104DF000B823B7350020A204D98C3755002013867C
:104E0000E4FF9385E5CD1305A5054936B757002086
:104E100093878705C9B783D7018293F7F70F238D4F
:104E2000F180C9B583C7B1819CA203D7C1818547F1
:104E3000E3FAE7EA239EF18075B583D7018293F701
:104E4000F70FA38DF1800547238AE18061BD83C7F9
:104E50002182FD8B99EF83D70182054793F7F70FE6
:104E60006396E70483C7518193F7E70FA38AF18024
:104E700095BD83C621828947FD8A6399F60283D74F
:104E8000018293F7F70F9DE383D7E1811307200891
:104E900093F7F70F6386E7046362F7020D476386B3
:104EA000E7041547638DE7046387D702B74740409F
:104EB0001547238FE708A38FE7089DB51307400820
:104EC000638AE70213076008E392E7FEB7474040B2
:104ED000238B070A01BD37474040A303F70A19B5E2
:104EE000B74740402383070AF5BBB7474040A38537
:104EF000D70ACDBBB74740402387070AE5B3B7477A
:104F00004040A389D70AF9BB83C72182FD8BB5EB4B
:104F100083D70182854693F7F70F639ED700B73793
:104F2000002083C737CC93F70702C9D383C75181C9
:104F300093E7170025BF83D70182094793F7F70F3F
:104F4000E396E7F603D7E181930700106304F702C5
:104F500003D7E18193070020630EF70003D7E181B7
:104F6000930700306308F70003D7E18193070040FF
:104F7000E31AF7D683C7D18293E70708A386F182A5
:104F800095B383C721828946FD8BE39DD7D483D710
:104F9000018293F7F70FE39707D483D7E1811307D3
:104FA000100893F7F70F638BE7046366F7020D476A
:104FB0006381E70615476384E7080547E398E7EE52
:104FC000374740408347370A93F7C70F93E71700E7
:104FD000A301F70A01BB130740086387E70413071F
:104FE0006008E395E7EC374740408347670B93F74A
:104FF000C70F93E71700230BF70AEDB1374740407F
:105000008347270A93F7C70F93E717002301F70A8F
:10501000D1B9374740408347B70A93F7C70F93E7A3
:105020001700A305F70A7DB9374740408347E70AD1
:1050300093F7C70F93E717002307F70A65B13747C0
:1050400040408347370B93F7C70F93E71700A30937
:10505000F70A49B923800600C9BB83C72182239E72
:10506000019A0947FD8B639EE70A03D7E181130686
:1050700010081377F70F6305C7066363E6020D4652
:10508000630DC70615466304C70885476302F70426
:1050900003D7C1818947E3FBE7E0239EF18039B55F
:1050A000130640086300C706130660086306C706B8
:1050B00013062008E31EC7FC374740400347670A32
:1050C0000D8B05466313C70098A203D7C1818DB32A
:1050D000B747404083C7370A8D8B6393E7009CA294
:1050E000B747404083C7270A05478D8B6393E70086
:1050F0009CA203D7C181894725BB3747404003475E
:10510000B70A7DBF374740400347E70A55BF3747D7
:1051100040400347370B6DB7374740400347670BA5
:1051200045B783C72182FD8B81CB83D7C181E37BC8
:10513000F7BA239EE1807DB683C75181858BF5D771
:1051400098A2E5B783D7C18189EBB7474040239E3A
:1051500007081947238FE708E1B6B74740401947CA
:1051600099BBA38F040883D7C40783C7218293F711
:10517000070689C7239E018083C7318283D7C181F7
:10518000E39007BAD9B703D70408A384E18205479F
:10519000A385E18283C7340A93F7C70FA381F40A7A
:1051A00083C7340A93F7F707A381F40AA5BC83C722
:1051B000740A054793C74700A383F40A03D544083C
:1051C0001375F50F2384A1822385E182EFF09F9868
:1051D00083C7740A93F7F707A383F40A83C7740A93
:1051E00093E72700A383F40A35BC83C7340B93F7F6
:1051F000F707A389F40A3DB40947638AE710636A95
:10520000F70A639F070C83D7C18181E79947A38F72
:10521000F40883C7218293F70706BDEB83C7318269
:10522000954613F7F70F6380D70A99476315F70A76
:1052300003D7C1819307F0031304000463E6E7007A
:1052400003D4C1814204418083A441822286A68581
:105250001385C19BEFF08FF383D7C181A29423A262
:105260009182818FC207C183239EF180B74740405E
:10527000239E870803C7E70913474700238FE708E2
:1052800003C7E7091377C70F13672700238FE708C2
:1052900083C7D182E207E18763D40700EFF00FF103
:1052A000374740408347E70993F7F707230FF7088D
:1052B00095BA0D47E398E79683C7A40A93F7F707D3
:1052C0002385F40A85B283C7A1813747404093F70D
:1052D000F70F3CB375BFB7474040239E07084DBF4B
:1052E0002390040A83C7240A93C747002381F40A42
:1052F0002386018283C7240A93F7C70F2381F40A08
:1053000083C7240A93F7F7072381F40A21BA83D7C6
:10531000440A83C7640A93C747002383F40A83C7F8
:10532000640A93F7C70F2383F40A83C7640A93F7C9
:10533000F7072383F40AFDB09C2493F7070489C779
:10534000930700049CA4F9B893F7260095C78947F2
:105350009CA4B824098B11CB03C751811367270084
:10536000A38AE18083C7518175B803C75181137740
:10537000D70FA38AE1807DB093F7160099CFA38D54
:105380000180238D0180A38A0180238A0180A3816B
:105390000400EFF0CFEC854775B794A46FF09F88B9
:1053A000EFF2CFDB9387C19F80339C231307200844
:1053B0006383E708636DF70013070008638AE70259
:1053C000130710086382E70205456FF06FDB1307D0
:1053D0003008E39BE7FEA387018205472387E1822C
:1053E000EFF04F8A0945D5B7EFF02F890145F1BF9E
:1053F000EFF0AF88B754002083A7C4073307F40049
:105400001356C70093D6C7006315D6008566639709
:10541000D7007D758565798DEFF08FB403A5C4073E
:105420002286938501A0EFF04FBB83A7C407A29704
:1054300023AEF40665BFB754002003A58407228677
:10544000938501A0EFF04FC083A784071375F50F74
:10545000A29723ACF40695BFEFF24FD02A8437050C
:10546000820085450505EF0020718D453705080050
:105470004523814537050400612BEF00D0112285BB
:10548000EF00300A6FF0CFCF37A7404083475780F7
:10549000858BEDDF034507808280EFF28FCAED3701
:1054A000930770056313F508C5379307B00A631EA9
:1054B000F506D93F938AC19F2A892380AA00E9373C
:1054C0003304A9001374F40F2A8AA380AA006D3F45
:1054D000B307850093F4F70F2381AA0075373304CF
:1054E0009500A381AA001379D90F930700081374BC
:1054F000F40F6318F9009389C19F01498509631866
:105500002A03593763138502613D8947630FF5000C
:10551000B7A7404003C75780238007800547631221
:10552000E50203C757802380A7806FF0CFC4A93F4F
:105530002A940509A381A9001374F40F1379F90FB4
:1055400075BF03C7578023800780C5B7EFF20FC12F
:10555000373500201305C5C2EF00907037E400E036
:105560009164232094105145EF00700CB707404020
:105570001387471514433706F8FF7D1693E6060494
:1055800014C3144393057005F18E14C38CA3130642
:1055900080FA90A3010013874714144393E606088A
:1055A00014C3238007008CA390A301001443370683
:1055B000E0FF7D16F18E14C3238007002320942082
:1055C0006FF00FBCEFF28FB941115D20EF00A07FAB
:1055D0001305800CEF00B005716513050520EF0081
:1055E000700883A5818037350020130585C3EF003F
:1055F000F0646800EFE0BFF0B245373500201305D6
:1056000085C4EF00B06337350020130585C5EF0072
:1056100030653704404078309307A00A6314F700E0
:10562000353701A081453705100069291304440C62
:105630001C400545EFF0AFCBB7E700E011473965F7
:1056400023A2E71013050510013DB7A4404083C70E
:105650005480858B91C3913583C7E182EDDBB70719
:1056600040401307A0FAF8B385450545F92301A08A
:10567000B70740409386471498421377070819CF1D
:10568000938747159C4337070800F98FBDCBB78731
:105690007D019387078423A4F18082809C421307B5
:1056A000000293F70706638DE702B737310193874E
:1056B00007D03707404003274714B1662166758F2E
:1056C000630FC7026363E6020DC791666307D702E3
:1056D00037074040183711830507B3D7E70265BF86
:1056E000B7877D0193870784E9B7E313D7FE3D476A
:1056F00011A06147B387E702E1BF5147E5BF9207B9
:10570000C1BFB7373101938707D071B7EFF26FA3ED
:1057100003A78180B78793039387F76F63F9E71433
:10572000B70740401307700598A3130780FA98A3A2
:10573000010093864714984237062000518F98C283
:105740003704404023800700253793044415A52DD6
:105750009C4081451305000893E707049CC039234A
:1057600013053002512DB7674040938707089843CF
:10577000B70600803145558F98C39843B70600C0DF
:10578000FD16758F98C39843B706004093097005BE
:10579000558F98C39525854513050008C1299C4060
:1057A0003707F8FF7D17F98F9CC0230034011309D8
:1057B00080FA230024010100930444149C4093E7E1
:1057C00007089CC0230004002300340123002401A7
:1057D00001009C403707C0FF7D17F98F9CC0230054
:1057E00004007935CD23E52623003401230024016C
:1057F0000100930740031CB423000400230034017C
:105800002300240101009C4051777D17F98F9CC033
:105810009C409CC023000400230034012300240189
:1058200001009C4093F7F7F99CC09C4093E7070662
:105830009CC0230004002300340123002401010044
:105840009C403707400013053002D98F9CC02300CD
:1058500004005D23230034012300240101009C4047
:1058600093F7F7F79CC0230004006FF0CF90B707C1
:1058700040401307700598A3130780FA98A301000E
:10588000138647141842B706E0FFFD16758F18C23D
:1058900045BD01A097410000938141FE17E1000042
:1058A00013014176171500001305055B97350000BD
:1058B000938545751386418163FAC50083220500EF
:1058C00023A0550011059105E3EAC5FE138541812A
:1058D0009385C1A36377B500232005001105E36D0F
:1058E000B5FEFD42739002BC8D4273904280896286
:1058F000938282887390023097E2FFFF9382027155
:1059000093E2320073905230972201E09382826FCB
:1059100093D222007390023B972201E09382826E21
:1059200093D222007390123BC142739032BCAD629D
:10593000938202D07390023A9142739002BDB702F3
:105940000003890273B022BCEFF05FDC9702000015
:10595000938282C77390123473002030914763EFB3
:10596000B702B7370020938707D18A05BE959841C3
:10597000B707404093874709028794431345F5FFD3
:1059800037074040E98E94C3930607099C42E98F8C
:105990009CC2930707089843798D88C382809043FF
:1059A0009346F5FF37074040758E90C313060709ED
:1059B0001C42C98F1CC2930707089843F98E94C3F1
:1059C0008280944337074040C98E94C393060709E9
:1059D0009C421345F5FF65BF9843498F98C3B707AD
:1059E0004040938707089843498F98C38280B70740
:1059F0004040938607089842498F98C293860709CA
:105A000098421345F5FF93874709698F98C261B79C
:105A1000914763EFB702B7370020938747D28A05D3
:105A2000BE959841B70740409387470B0287944340
:105A30001345F5FF37074040E98E94C39306070BE3
:105A40009C42E98F9CC29307070A9843798D88C3CB
:105A5000828090439346F5FF37074040758E90C390
:105A60001306070B1C42C98F1CC29307070A9843F1
:105A7000F98E94C38280944337074040C98E94C303
:105A80009306070B9C421345F5FF65BF9843498F6A
:105A900098C3B70740409387070A9843498F98C334
:105AA0008280B70740409386070A9842498F98C280
:105AB0009386070B98421345F5FF9387470B698F31
:105AC00098C261B7914763EFB702B7370020938759
:105AD00087D38A05BE959841B70740409387470D05
:105AE000028794431345F5FF37074040E98E94C37E
:105AF0009306070D9C42E98F9CC29307070C9843BD
:105B0000798D88C3828090439346F5FF37074040E4
:105B1000758E90C31306070D1C42C98F1CC29307D4
:105B2000070C9843F98E94C3828094433707404012
:105B3000C98E94C39306070D9C421345F5FF65BFBC
:105B40009843498F98C3B70740409387070C984301
:105B5000498F98C38280B70740409386070C9842CC
:105B6000498F98C29386070D98421345F5FF938796
:105B7000470D698F98C261B7B70740401387071474
:105B8000104363550500938707169043135705018B
:105B90003D8BFD57B397E7009356450193C7F7FF39
:105BA000FD8A3397D7001347F7FF718F0546639639
:105BB000C500E98FB397D7005D8FB70740406355A5
:105BC000050023A0E716828023A0E7148280EFE27D
:105BD000FFD841116800EFE09F92B2473707415666
:105BE0001307875093F7F7F0638BE70037074356A7
:105BF000130787506383E70241016FE07FD889452F
:105C00007D55C935894537054000193537C5F1FF40
:105C100089451305F5679933C5B73705F0FF894501
:105C20007D154D353705F1FF89451305F50BCD334E
:105C3000797589451305F577F9BFB7074040FC230F
:105C400085476391F502B70740401307700598A395
:105C5000130780FA1365050498A30100E8A32380C5
:105C6000070082801345F5FF3D89F1BFB70740402B
:105C70001307700598A3130780FA98A3010005473E
:105C8000639AE500F827498FF8A7B70740402380BB
:105C900007008280F8271345F5FF698FF5B7EFE21B
:105CA0007FC983A48180A5ED860491809397140019
:105CB0002A8463E6A706135C15002A8B814A268591
:105CC0000549014A8549930BF007228681468145A3
:105CD000EF001038AA8799E16374AC00B307F44071
:105CE00013D7F741636657016397EA0063F56701CD
:105CF000CA893E8BBA8A9307190063147901630C31
:105D00000A0033D5F40233B727013E893A9A931734
:105D10001500E3FC87FA238831836FE03FC585498E
:105D2000DDBFEFE2BFC381452A84953F83C701836E
:105D300003A5818025473355F502A9473305F502B0
:105D400085470D813355850215056378A7002946DF
:105D500081468145EF006075AA8737A7404083469A
:105D6000378093E60608A301D78083C60183A30387
:105D7000D78093D6870093F6F60FA300D78093F7CA
:105D8000F70F2300F7808347378093F7F707A301C6
:105D9000F7806FE0FFBEEFE27FBC71651305052061
:105DA0004937B7A74040130770FC2381E7800D47B0
:105DB000A381E78013070004A380E78011472382B3
:105DC000E7806FE0FFBB37F700E01C4393E7470035
:105DD0001CC383A7818037470F0013070724B3D75D
:105DE000E702238CF1821307803E93F7F70FB38706
:105DF000E70223AAF1828280B7F700E0D843814608
:105E0000799BD8C303C781833306A702014790CB90
:105E1000D4CB814694C7D8C798431367170298C359
:105E2000D843058B75DF9843799B98C38280B7F779
:105E300000E0D8438146799BD8C303A7418333064A
:105E4000E502014790CBD4CB814694C7D8C798438D
:105E50001367170298C3D843058B75DF9843799B66
:105E600098C38280EFE29FAF83A781805144294687
:105E70003304F4028146814511803354A402228503
:105E80002D252A89AA842946814622858145EF004D
:105E9000301C81E5914763F4A70093041900B7D73C
:105EA0004040130700F8B8B30547F8B313D7840090
:105EB0001377F70F98B393F4F40F84A30D47B8B397
:105EC000130770FCB8A31307000498B3B70740404A
:105ED0009386470B98429387070A1377F7EF98C288
:105EE00098431367072098C36FE09FA932858147C5
:105EF000B7D6404063C3A7008280D8321377070229
:105F00006DDF3387F5001823850798A2E5B70111E7
:105F100006CE2EC60DCD1841AA8705C358417D5522
:105F200011CB8546631BD70098472300070023A2A7
:105F300007000545F240056182809847B24614A3E8
:105F40009847050798C7D8437D17D8C3DDB70546DE
:105F50006C00693FF9BF797122D426D24ECE52CC63
:105F600056CA06D64AD05AC82A8AAE8A3284814492
:105F70009309000263440602B3879A0083870700EF
:105F80009DE363D6840263D2E402198C93F7260062
:105F90009309000281C719E393090003858A014927
:105FA0009DE6228929A88504C1BF058CC5B7014497
:105FB000F1BFCE8552853AC6993F32477D19E34AF3
:105FC00020FF22896353040001493304244163CB39
:105FD000E402CA84B3872441D697838507009DEDE8
:105FE0002289634120056353040001443305940072
:105FF000B250225492540259F249624AD24A424B58
:1060000045618280B3049740268B93050003528537
:106010007D1BF53DE31B0BFE269965BF5285C53DF3
:1060200085044DBFCE855285DD357D195DBF5D711F
:10603000A6C252DC86C6A2C4CAC04EDE56DABA84F4
:106040003E8A95E1930700030147D28626862C08F5
:10605000FC841137B640264496440649F259625AE8
:10606000D25A616182802A893684C68A91CAA94738
:1060700001446317F60063D50500B305B04005443D
:10608000A30701029307F102A546130568FC33F745
:10609000C50263D3E6002A9713070703A38FE7FE21
:1060A0009389F7FF33D7C50263F7C50401CCB9C4A0
:1060B00013772A0021C79305D0024A8542C6813D45
:1060C0003248FD1493774A0099CF93071006930541
:1060D00000034A85631CF8021D3D930580074A852D
:1060E0003D350904F9145687D2862686CE854A8521
:1060F0009D35229585B7BA85CE8751BF1307D0024B
:10610000A38FE9FE01449389E7FF6DBF093593052D
:106110008005F1B7014582800145828039715AD0EE
:10612000373B002022DC26DA4AD84ED652D456D24B
:106130005ECE62CC06DE66CAAA892E893284014A06
:106140008144930B5002930AB002294C130BCBD419
:10615000830509008DE56386090081454E85EFF0D2
:106160001FDBF250625426854259D254B259225A4A
:10617000925A025BF24B624CD24C2161828063885E
:1061800075014E85EFF0BFD885040509D1B78307A7
:106190001900930C1900639A7701930550024E85FC
:1061A000EFF0FFD685046689CDB7D5D7638757054D
:1061B00063C8FA00130730026384E704814705A02F
:1061C0001307D002638AE70013070003E398E7FE92
:1061D000930C2900894721A0930C29008547038748
:1061E0000C006303570563C1EA0293063002630B98
:1061F000D70266890146A54535A8930C29007DBFC5
:10620000930C29009147E1BF9306D0026309D700A0
:1062100093060003E31FD7FC93E7270031A0850C0A
:106220008547C1BF93E74700850CE1B73306860376
:106230000509369603070900930607FD13F5F60FC7
:10624000E3F6A5FE9305E0029946631EB700050933
:106250008146A54503070900130707FD1375F70FCE
:1062600063F5A502368A030709009305A0066301BA
:10627000B70A63C1E5029305C004630BB708930531
:1062800080066300B70881452DA0B3868603050903
:10629000BA96C9B793054007630CB7069305A007E4
:1062A0006308B7061305C00681456314A7000509F6
:1062B00091450307090013050006130810066344FF
:1062C000E50013081004130570066340E506130586
:1062D00050066355A71413057004634DE50293053A
:1062E0005004635DB71293063004E310D7EA1840F8
:1062F000930C4400A30601005886BE8601476C003B
:1063000041A0030519008145E315E5FA090955B7D0
:10631000050995BF93063006E30BD7FC63C6E60676
:10632000930680056303D7028DB59306300763019A
:10633000D70463C8E6029306F006630ED70A9306F5
:10634000000793E74700E312D7E4D9CD1D04937506
:1063500084FFC288138485003E880147B287C14606
:106360003DA8930650076300D706930680075DBFDC
:106370001840930C4400DA8511C3BA855287BE8653
:106380004E85EFF05FBD2DA895C11D04937584FF68
:10639000C288138485003E880547B287A946D0414C
:1063A0008C414E85EFF01FD7AA94C5B3930C4400DF
:1063B000D2883287854629460C404E85EFF03FC78C
:1063C000AA946684D9B399C91D04937584FFC288C1
:1063D000138485003E880147B287C9B7930C4400F7
:1063E000D28832878146C1BF3287930C4400D2885D
:1063F00081464146D1B781CD1D04937584FFC28883
:10640000138485003E880147B287A14649BF328781
:10641000930C4400D2888146214679BF1D049375B0
:1064200084FF138485003287D0418C41C2884E8519
:106430003E88B687A946EFF03FCEBDB739712ED260
:1064400032D4AA855010014506CE36D63AD83EDA67
:1064500042DC46DE32C6EFF07FCCF2402161828022
:10646000011122CC26CA06CE1C21AA840144DC8755
:106470008307F100050499EFA9479305F10005464C
:106480000145DC87EFF09FA62285F2406244D244AA
:106490000561828005469305F1000145EFF01FA5D7
:1064A000B38784009C23DC87E1B73288AA882E87D3
:1064B000DDEA63F1C510C167636DF618B707000127
:1064C000B337F600B307F040E19BE1073353F60022
:1064D00097160000938646889A969422130300022A
:1064E000B697B306F340630BF3003397D500B35769
:1064F000F5003318D6005D8FB318D5001356080188
:106500003355C70293160801C18293D70801337728
:10651000C702B385A6024207D98F63FAB700C297B4
:106520001307F5FF63E4070163EDB7303A858D8FFC
:1065300033D7C702C20893D80801B3F7C702B3869E
:10654000E602C207B3E8F80063FBD800C2989307DD
:10655000F7FF63E50801791763E3D8003E8742053A
:10656000598D8145828063F5D50081450145828042
:10657000C16763E7F618B7070001B3B7F600B307C2
:10658000F040E19BE10733D8F6001707000013073E
:10659000A77C42971823930800023E973388E8406F
:1065A0006394E81863E1B6283335C5001345150038
:1065B000814582804DC6C167637FF624133706107C
:1065C000134717000E07B356E6009707000093879E
:1065D000A778B6979C2393060002BA97B38EF6402D
:1065E000639EF608B387C540935606014206418272
:1065F000854533D5D70213D70801B3F7D702330344
:10660000C502C207D98F63FA6700C2971307F5FF67
:1066100063E4070163E467223A85B387674033D7B1
:10662000D702C20893D80801B3F7D7023306C702CE
:10663000C207B3E8F80063FBC800C2989307F7FFEE
:1066400063E50801791763E3C8003E874205598D69
:1066500082809337061093C717008E0785BD814649
:10666000970700009387476FB6979C2301479306CF
:106670000002BA97B38EF640E386F6F63318D601D9
:1066800033D3F50093560801335ED3021316080185
:10669000B395D5014182B357F500CD8F13D70701CC
:1066A000B318D5013373D302B305C603420333676E
:1066B0006700637BB70042971305FEFF636C071703
:1066C000637AB716791E42970D8F3355D702C207EA
:1066D000C1833377D7023303A6024207D98F63FB06
:1066E0006700C2971307F5FF63E2071563F06714AD
:1066F0007915C29793150E01B3876740C98DD5BD33
:1067000093B7061093C717008E0733D8F600170704
:1067100000001307676442971823930800023E970E
:106720003388E840E380E8E8335EE600B39606018C
:10673000336EDE00B3D8E500935E0E01B3D7D80305
:1067400013130E01B3950501135303013357E500ED
:106750004D8F9356070133160601B3F8D803B305DE
:10676000F302C208B3E6160163FBB600F296938803
:10677000F7FF63E3C60D63F1B60CF917F2968D8E41
:10678000B3D5D60342074183B3F6D603B308B302A9
:10679000C206558F637B170172979386F5FF636975
:1067A000C70963771709F9157297C207C16ECD8FB4
:1067B0009386FEFFB3F5D70013D30701F18E418214
:1067C000338ED50233071741B306D30293580E0117
:1067D000B385C502B695C6953303C30263F3D500EE
:1067E000769393D605019A966363D7026305D70023
:1067F0003E8581458280C166FD1633F7D50042078C
:10680000337EDE00331505017297E373E5FE1385D1
:10681000F7FF81458280B70700016377F602935640
:10682000060141475DB38145054582803A85D9B56A
:10683000B685A5BF2A8E49BDC68791B77915C2977F
:10684000E9BB7915C297E5B1935686016147B5BB9F
:106850003288AA882E832E87D5E663F1C510C167DA
:106860006363F618B7070001B337F600B307F040CB
:10687000E19BE1073353F600970600009386C64D6F
:106880009A96942213030002B697B306F340630B63
:10689000F3003397D500B357F5003318D6005D8F5A
:1068A000B318D500935508013356B70213130801E6
:1068B0001353030193D708013377B70233066602F7
:1068C0004207D98F63F7C700C29763E4070163E308
:1068D000C730918F33D7B702139508014181B3F7C1
:1068E000B70233076702C2075D8D6378E500429502
:1068F000636505016373E5004295198D3355D50035
:106900008145828063F3D5008280C16763EAF61611
:10691000B7070001B3B7F600B307F040E19BE1070A
:1069200033D8F600170700001307074342971823D0
:10693000130E00023E973308EE406317EE1663E431
:10694000B600636AC500B308C540B386D54033338B
:1069500015013383664046859A85828059CAC1678E
:10696000637EF62413370610134717000E07B3563D
:10697000E600970700009387273EB6979C231303F2
:106980000002BA97B306F3406314F3083387C54097
:106990001353060142064182B355670293D708019B
:1069A00033776702B385C5024207D98F63F8B70012
:1069B000C29763E5070163F3B700C2978D8F33D7A2
:1069C0006702C20893D80801B3F767023307C7020A
:1069D0001395070133E5A800E36BE5F0198D3355F6
:1069E000D500814582809337061093C717008E0724
:1069F00051B581469707000093870736B6979C23C9
:106A0000014713030002BA97B306F340E300F3F81B
:106A10003318D60033DEF50013530801B35E6E025F
:106A200013160801B395D5003357F50041824D8FF9
:106A300093570701B318D500337E6E02B385CE029B
:106A4000420EB3E7C70163F8B700C29763E50701D9
:106A500063F3B700C2978D8FB3D5670242074183B6
:106A6000B3F76702B385C502C2075D8F6378B700CD
:106A70004297636507016373B70042970D8F29BF83
:106A800093B7061093C717008E0733D8F600170781
:106A900000001307672C42971823130E00023E973D
:106AA0003308EE40E30DEEE8B3960601B358E60076
:106AB000B3E8D80033DEE50013DF0801B357EE0377
:106AC000939E080193DE0E01B356E50033130501D2
:106AD000B3950501D58D93D6050133160601337E96
:106AE000EE033385FE02420EB3E6C60163FBA60049
:106AF000C696138EF7FF63ED160D63FBA60CF91710
:106B0000C696898E33D5E603C205C181B3F6E60386
:106B1000B38EAE02C206D58D63FBD501C695930632
:106B2000F5FF63E5150B63F3D50B7915C6959396C1
:106B30000701C162C98E1385F2FF33FEA600935F81
:106B40000601C182718D330FAE02B385D541338505
:106B5000A60293570F01330EFE032A9EF297B386C7
:106B6000F60363F3A7009696C16EFD1E33F5D701B9
:106B700013DE07014205337FDF01B307DE007A959C
:106B800063E5F5026381F5023305A3403333A300C7
:106B90009D8DB38565403397E50033550501598DCB
:106BA000B3D505018280E371A3FE3306C5403335BA
:106BB000C500AA98B38717413285F9B7B707000116
:106BC000637CF60093560601414765B3368585B769
:106BD000F28705BFC297F5B993568601614751BB4D
:106BE0005A1000204E0E0020AC0E0020080F00208E
:106BF000AC0E0020160E0020380C0020AC0E002039
:106C0000240E00203A0E002054100020E40C002036
:106C10005A0C00206A0C0020460D00206E0D00204A
:106C20006E0D0020940D00209E0D00204A756D70A1
:106C3000204150500D00000053797374656D436C12
:106C40006B3A25640D0A00004368697049443A258F
:106C50003038780D0A0000004941500D0000000056
:106C60000A060002FFFFFF4001000000160330008B
:106C70003100320033003400350036003700380070
:106C8000390000002603570043004800200055004B
:106C90005300420032002E00300020004400450026
:106CA0005600490043004500200000000E03770015
:106CB000630068002E0063006E00000009022000DF
:106CC00001010080320904000002FF805500070521
:106CD0008202400000070502024000000902200075
:106CE00001010080320904000002FF805500070501
:106CF000820240000007050202400000120110015C
:106D0000FF8055404843E0550001000000010000AD
:106D10007A1900209E190020C2190020EE190020C7
:106D2000D81900202E1A0020521A0020761A0020AE
:106D3000A21A00208C1A0020E21A0020061B002054
:106D40002A1B0020561B0020401B0020286E756C5B
:106D50006C2900000001020203030303040404047D
:106D600004040404050505050505050505050505D7
:106D700005050505060606060606060606060606B7
:106D800006060606060606060606060606060606A3
:106D90000606060607070707070707070707070787
:106DA0000707070707070707070707070707070773
:106DB0000707070707070707070707070707070763
:106DC0000707070707070707070707070707070753
:106DD0000707070708080808080808080808080837
:106DE0000808080808080808080808080808080823
:106DF0000808080808080808080808080808080813
:106E00000808080808080808080808080808080802
:106E100008080808080808080808080808080808F2
:106E200008080808080808080808080808080808E2
:106E300008080808080808080808080808080808D2
:106E400008080808080808080808080808080808C2
:106E500008080808000000000000000000AAAAAA14
:106E6000AAAAAAAAAAEEEEEEEEEEEEEEEEFEFFFF64
:106E7000FFFFFFFFFFFFFFFFFF7FBFDFEFF7FBFD20
:106E8000FC7EBFDFEFF7FBFD7E000000090700007E
:106E900000000000000000000000000000000000F2
:106EA00000000000000000000000000009070000D2
:106EB00000000000000000000000000000000000D2
:106EC00000000000000000000000000000100000B2
:106ED00000100000000E2707000000000403090452
:00000001FF

View File

@@ -0,0 +1,899 @@
:020000040000FA
:100000006F00300B00000000010001000100010042
:1000100001000100010001000100010001000100D8
:100020000100010001000100010001008280EF02D7
:10003000B003B70740404111238D070037B90300D3
:1000400002C61309F997370440409D49154AB24743
:100050006376F900054541016F005004230D34011A
:100060006537230C44014D371C2C793F1C2C93F42D
:10007000F70F593F93F71400230D040089C7B247C7
:1000800085073EC6E9B70145F9B7EF02E07D2A844E
:10009000AE84713F85472A896305F50413DA0401AC
:1000A00093D98400AD47937AF40F137AFA0F93F93A
:1000B000F90F93F4F40F6306F400930780046315BB
:1000C000F402370440409D473CAC3D3F230C5401B3
:1000D000253F230C44010D3F230C3401353704AC7C
:1000E00025374A856F00807B370440400D4B230D38
:1000F0006401193F99471CAC013F230D04002937C7
:10010000230D6401D9B7EF02C0770547AA87638D35
:10011000E5000947638EE500014589E5BE851305C5
:100120000002A5376F002078AA8513052005D5BFEA
:10013000AA851305800DF5B7EF022072937BF50FAA
:1001400013090010330979412A8A2E84328BAA853B
:1001500009456361C902153FAA8A229BB704404042
:1001600063158B0056856F00C0721C2005049CAC83
:10017000613DFDB7193FAA8A2299B70440401C206F
:1001800005049CAC5135E31C24FF93090BF0DE9968
:1001900013040A103304744193D989008144B70BC6
:1001A000404063E9340333046A01937504F0094560
:1001B000E93DB3EAAA0081441374F40FB709404043
:1001C000E3F284FAB30799009C238504238CF90099
:1001D000253DFDB793958400A29509457D35B3EA89
:1001E000AA00130C0910834709000509238CFB00A2
:1001F000213DE31A89FFE3970AF68504C204C18012
:100200004DB7EF026066AE84AA852D453284B709EA
:100210004040A53D83C789012A89FD3383C78901F1
:10022000A294DD33631594004A856F00206783C76D
:1002300089010504A30FF4FEC13BEDB7EF02C062D4
:10024000AE84AA85130580043284B7094040353D49
:1002500083C789012A894D3B83C78901A2946D33E5
:1002600083C789010504A30FF4FE793BE31A94FECA
:100270004A852DA5EF02605E4111856713141500B4
:100280003EC2A167330AB4003EC4C167AA8A1354B0
:100290001A003EC6540001493306AA409C42335717
:1002A000F4023307F70263655701BA976374F606E1
:1002B000630509007D191379F90F2285CA85A135D7
:1002C00093172900C1078A9783A947FFE177AA847A
:1002D00033543403A16B33043403A2993E94330B9B
:1002E0007401631E090263EA6A05216BB30A5A416D
:1002F0004E9B568A630B0904216963E86A058545AC
:100300004E851135C98CB3072B018DE4DA89D28A69
:100310003E8BE5B7050991061379F90F41B7E36400
:100320007BFDE36254FD22858545F13BC98C330496
:100330007441D5D426854101A9ABFD773E9BDA8572
:10034000130500029933C98C79BF0569E3F459FF9D
:10035000CE8513050002338A2901053BC98CD28959
:10036000F5B7B70700201307A0052380E7008280B8
:10037000B7070020238007008280EF0280504111E0
:100380002A840D653000A1451305C50C453D1C8729
:10039000AA841CA09C871CB01C843CA09C843CB0FC
:1003A0001C855CA09C855CB05931458D4101E5A957
:1003B000EF02204D41112A840D653000A14513053F
:1003C000C50CAD3D1C87AA841CA09C871CB01C8456
:1003D0003CA09C843CB01C855CA09C855CB01C86C9
:1003E0007CA09C867CB0A131458D41016DA9EF02B6
:1003F00040492A842A860D659145130545093D3DEE
:100400001C203830AA843CB018A01C3038203CA0F6
:1004100018B03139458D41A9EF02A0464111AA8497
:100420000D651306F10085451D05093D9C872A844D
:100430001307000A93F7070281C71307100A8547BD
:10044000B70600209CA0A380E600D536418D41016F
:1004500099A9B707002003C707009307A0056316F3
:10046000F706EF02604041118564700091451385E5
:100470004400E9331C861307500F2A846393E70472
:1004800098866310F7041C87639DE7029887631AB8
:10049000F702B7B75AA5938757A59385440013056C
:1004A00020043EC6DD362A848144B7094040114904
:1004B0007C00A6979C238504238CF900B136E39930
:1004C00024FFB536418D4101D1AE11458280EF0246
:1004D000403B370440408D473CAC3D36930790FB92
:1004E0001CAC1D36230D04007DAEEF0280393704AD
:1004F00040408D473CAC093E9307B0FA1CAC29360E
:10050000230D04004DA6EF02C037370900208347B2
:100510001900AE8401112A84B2859DCB834719004E
:100520001307100A639EE702B707F9FFB306F4004A
:1005300021670D4563F4E602FD17AE97A29763FFAE
:10054000E7002686228575392A84D534418D39A065
:100550001305F10132C6C935B24569D10561A1A6BD
:100560001307000AE39FE7FCB707FDFFC1B7EF02DF
:100570004031B704002083C7140001112A84B9C791
:1005800083C714001307100A639AE704B367B40023
:10059000D2070D45B1E3B707F9FFB306F4002167B1
:1005A00063FCE602FD17AE97A29763F7E702B70771
:1005B000002003C707009307A0051145631EF7003D
:1005C00022854D392A84A534418D39A01305F101C6
:1005D0002EC69935B2454DD50561F1A41307000A21
:1005E000E397E7FCB367B400D2070D45F5F7B7070B
:1005F000FDFF65B7EF02E028B704002083C71400B1
:1006000001112A84A1C783C714001307100A639934
:10061000E704B707F9FFB306F40021670D4563FF50
:10062000E602FD17B297A29763FAE702B707002028
:1006300003C707009307A00511456311F702228540
:10064000E53C2A84EFF0BF9E418D09A81305F10116
:1006500032C62EC4D133A245324655D50561A1A478
:100660001307000AE394E7FCB707FDFF6DB7EF023D
:100670004021B704002083C7140001112A84A9C7B0
:1006800083C714001307100A6398E704B367B40024
:10069000D2070D453707070095EF637DE402938786
:1006A000F5FFA29763F8E702B707002003C707002A
:1006B0009307A0051145631FF7002285653E2A8434
:1006C000EFF0FF96418D39A01305F1012EC6A93335
:1006D000B2455DD50561C1AA1307000AE396E7FCA0
:1006E000B367B400D2070D45F5F73707030075B7B8
:1006F000EF022019B704002083C7140001112A84D7
:10070000B1C383C714001307100A6397E7043707C0
:1007100007000D456370E4049307F6FFA29763FB9F
:10072000E702B707002003C707009307A00511459C
:100730006312F7022285EFF03FA02A84EFF03F8F8B
:10074000418D09A81305F10132C62EC4F131A2452D
:10075000324645D9056181AA1307000AE393E7FCF5
:10076000370703007DB7EF022010B709002083C7C9
:10077000190041112A89AE84328485CF83C71900BC
:100780001307100A639DE702370707000D456376DC
:10079000E9029307F4FFCA9763F1E702B389840083
:1007A00033099940014463939902EFF05F88418DCA
:1007B00029A01305E1008D3171D14101C5A01307B6
:1007C000000AE39DE7FC37070300C9B71306F100F1
:1007D000854533852401EFF0DFA298209C872A8489
:1007E0006305F70013652500C9BF85046DBFEF02DF
:1007F000A007B709002083C7190041112A842E8958
:10080000B2849DCB83C719001307100A639CE702CB
:10081000370707000D456375E4029387F4FFA2973D
:1008200063F0E7024A86A6852285EFF09F9D2A8421
:10083000EFF0EFFF418D29A01305F100F13E79D1D2
:100840004101A9A81307000AE39EE7FC370703004C
:10085000D1B7397101436EC619A0397141536AC8C5
:1008600066CA62CC5ECE19A0397101535AD056D2F5
:1008700052D44ED64AD826DA22DC06DE3301614055
:10088000828241114AC026C222C406C68282B24D6B
:100890004101024D924C224CB24B4101024B924A13
:1008A000224AB2494101024992442244B2404101E4
:1008B0008280970100209381E1F417F10020130159
:1008C000617437850200B70500203756002063FAAF
:1008D000C5008322050023A0550011059105E3EA18
:1008E000C5FEFD42739002BC37050020670005007D
:020000040002F8
:108000006F10300B00000000000000200000000096
:10801000A2090020A409002000000060B018002080
:108020000000000000000000B0180020B018002080
:108030000000000000000000B01800200000000058
:10804000B609002000000000B0180020B018002081
:10805000B0180020B0180020B0180020B018002080
:10806000B0180020B0180020B0180020B018002070
:10807000B0180020B0180020B0180020B018002060
:10808000B0180020B0180020B0180020B018002050
:10809000680B0020B0180020B0180020B018002095
:1080A000B0180020B0180020130580087310058058
:1080B00037F500E0130535D1930500080F00F00FE8
:1080C0002300B5002300B5002300B5002300B50050
:1080D0002300B5002300B5002300B5002300B50040
:1080E0002300B5002300B5002300B5002300B50030
:1080F0002300B5002300B5002300B5002300B50020
:108100002300B5002300B5002300B5002300B5000F
:108110002300B5002300B5002300B5002300B500FF
:108120000100010001000100010001000100010047
:108130000100010001000100010001000100010037
:10814000010001008280EF02C07FB707404041116B
:10815000238D070037B9030002C61309F9973704C6
:1081600040409D49154AB2476376F90005454101F3
:108170006F007000230D34016537230C44014D3727
:108180001C2C793F1C2C93F4F70F593F93F71400E4
:10819000230D040089C7B24785073EC6E9B70145EC
:1081A000F9B7EF02007A2A84AE84713F85472A89A5
:1081B0006305F50413DA040193D98400AD47937A7B
:1081C000F40F137AFA0F93F9F90F93F4F40F63068F
:1081D000F400930780046315F402370440409D4780
:1081E0003CAC3D3F230C5401253F230C44010D3F83
:1081F000230C3401353704AC25374A856F00A0774E
:10820000370440400D4B230D6401193F99471CACC6
:10821000013F230D04002937230D6401D9B7EF0274
:10822000E0730547AA87638DE5000947638EE50083
:10823000014589E5BE8513050002A5376F0040742E
:10824000AA8513052005D5BFAA851305800DF5B7AE
:10825000EF02406E937BF50F13090010330979414B
:108260002A8A2E84328BAA8509456361C902153F8B
:10827000AA8A229BB704404063158B0056856F0085
:10828000E06E1C2005049CAC613DFDB7193FAA8A35
:108290002299B70440401C2005049CAC5135E31CD6
:1082A00024FF93090BF0DE9913040A103304744180
:1082B00093D989008144B70B404063E93403330408
:1082C0006A01937504F00945E93DB3EAAA008144C7
:1082D0001374F40FB7094040E3F284FAB30799002E
:1082E0009C238504238CF900253DFDB793958400DC
:1082F000A29509457D35B3EAAA00130C09108347FE
:1083000009000509238CFB00213DE31A89FFE3974F
:108310000AF68504C204C1804DB7EF028062AE84C4
:10832000AA852D453284B7094040A53D83C7890100
:108330002A89FD3383C78901A294DD336315940034
:108340004A856F00406383C789010504A30FF4FECB
:10835000C13BEDB7EF02E05EAE84AA851305800451
:108360003284B7094040353D83C789012A894D3B96
:1083700083C78901A2946D3383C789010504A30FC4
:10838000F4FE793BE31A94FE4A85F5A3EF02805A86
:1083900041118567131415003EC2A167330AB4006A
:1083A0003EC4C167AA8A13541A003EC6540001494C
:1083B0003306AA409C423357F4023307F702636541
:1083C0005701BA976374F606630509007D1913799E
:1083D000F90F2285CA85A13593172900C1078A970D
:1083E00083A947FFE177AA8433543403A16B330494
:1083F0003403A2993E94330B7401631E090263EAAD
:108400006A05216BB30A5A414E9B568A630B0904D5
:10841000216963E86A0585454E851135C98CB30726
:108420002B018DE4DA89D28A3E8BE5B705099106E6
:108430001379F90F41B7E3647BFDE36254FD2285B4
:108440008545F13BC98C33047441D5D4268541015F
:1084500031ABFD773E9BDA85130500029933C98C59
:1084600079BF0569E3F459FFCE8513050002338A0D
:108470002901053BC98CD289F5B71307A005A38C48
:10848000E1828280A38C01828280EF02204D411123
:108490002A840D653000A1451305C50C653D1C8778
:1084A000AA841CA09C871CB01C843CA09C843CB06B
:1084B0001C855CA09C855CB07931458D4101C9A1CA
:1084C000EF02C04941112A840D653000A145130512
:1084D000C50C49351C87AA841CA09C871CB01C8431
:1084E0003CA09C843CB01C855CA09C855CB01C8638
:1084F0007CA09C867CB08139458D410151A1EF0261
:10850000E0452A842A860D6591451305450999356C
:108510001C203830AA843CB018A01C3038203CA065
:1085200018B01531458DA9A9EF0240434111AA8425
:108530000D651306F10085451D05293D9C872A849C
:108540001307000A93F7070281C71307100A85472C
:108550009CA0238DE182C53E418D410115A103C739
:1085600091839307A0056316F706EF02803D411142
:1085700085647000914513854400E93B1C86130710
:10858000500F2A846393E70498866310F7041C87CE
:10859000639DE7029887631AF702B7B75AA59387D6
:1085A00057A593854400130520043EC6DD3E2A846A
:1085B0008144B709404011497C00A6979C2385045B
:1085C000238CF900B13EE39924FFB53E418D410172
:1085D0005DA611458280EF026038370440408D4728
:1085E0003CAC3D3E930790FB1CAC1D3E230D0400AC
:1085F00041AEEF02A036370440408D473CAC0D360B
:108600009307B0FA1CAC293E230D040095AEEF028F
:10861000E03483C7A183AE8401112A84B2859DCB47
:1086200083C7A1831307100A639EE702B707F9FF08
:10863000B306F40021670D4563F4E602FD17AE971B
:10864000A29763FFE70026862285C1392A84E53C8C
:10865000418D39A01305F10132C6F935B24569D112
:10866000056139AE1307000AE39FE7FCB707FDFF7A
:10867000C1B7EF02A02E83C7A18301112A84A9C725
:1086800083C7A1831307100A6398E704B367B40094
:10869000D2070D45A1E3B707F9FFB306F400216740
:1086A00063FAE602FD17AE97A29763F5E70203C7E8
:1086B00091839307A0051145631EF7002285F931C8
:1086C0002A845134418D39A01305F1012EC6A93DEC
:1086D000B2455DD505616DA41307000AE399E7FC77
:1086E000B367B400D2070D45F5F7B707FDFF75B7BF
:1086F000EF02C02683C7A18301112A84A9C383C7BF
:10870000A1831307100A6396E704B707F9FFB306BE
:10871000F40021670D4563FCE602FD17B297A297AE
:1087200063F7E70203C791839307A0051145631020
:10873000F7022285313E2A843934418D09A8130578
:10874000F10132C62EC4CD33A24532464DD9056162
:1087500005AC1307000AE397E7FCB707FDFF45BF29
:10876000EF02C01F83C7A18301112A84B9C383C745
:10877000A1831307100A6396E704B367B400D20716
:108780000D453707070085EF637BE4029387F5FF0C
:10879000A29763F6E70203C791839307A0051145EB
:1087A000631FF7002285DD362A84EFF0DF99418DC3
:1087B00039A01305F1012EC6853BB2454DD905619F
:1087C000C1A21307000AE398E7FCB367B400D2071D
:1087D0000D45F5F73707030045BFEF02201883C7A3
:1087E000A18301112A84A1C383C7A1831307100A9F
:1087F0006395E704370707000D45637EE40293079E
:10880000F6FFA29763F9E70203C791839307A005D8
:1088100011456312F7022285EFF09FA32A84EFF03F
:108820009F92418D09A81305F10132C62EC4ED397E
:10883000A245324655D90561A1A21307000AE39566
:10884000E7FC370703004DBFEF02A00F83C7A183EA
:1088500041112A89AE84328485CF83C7A18313074F
:10886000100A639DE702370707000D456376E902AA
:108870009307F4FFCA9763F1E702B38984003309D1
:108880009940014463939902EFF0FF8B418D29A039
:108890001305E100513971D14101F1A81307000A14
:1088A000E39DE7FC37070300C9B71306F1008545D0
:1088B00033852401EFF07FA698209C872A846305E6
:1088C000F70013652500C9BF85046DBFEF0260077F
:1088D00083C7A18341112A842E89B2849DCB83C78B
:1088E000A1831307100A639CE702370707000D45B1
:1088F0006375E4029387F4FFA29763F0E7024A8668
:10890000A6852285EFF07FA12A84EFF0DF83418DD9
:1089100029A01305F100093979D14101A9A813074C
:10892000000AE39EE7FC37070300D1B73971014322
:108930006EC619A0397141536AC866CA62CC5ECE50
:1089400019A0397101535AD056D252D44ED64AD8B2
:1089500026DA22DC06DE33016140828241114AC000
:1089600026C222C406C68282B24D4101024D924CFB
:10897000224CB24B4101024B924A224AB249410178
:10898000024992442244B240410182802A8309CAAA
:1089900083830500230073007D16050385056DFAAA
:1089A000828001A03706404089661307860A1C436F
:1089B000B58F1CC3DDBFB707404093878708984336
:1089C0008566358F98C315680288370640401307BF
:1089D00086081C43B58F1CC3DDBF83C7D18293F7C4
:1089E000F707A386F18283D6E18113070010639312
:1089F000E602B7474040D8331377070FD8B3D833D0
:108A000013671700D8B3374740405C3393E7070834
:108A10005CB3828083D6E18113070020639CE6006B
:108A2000B7474040D8331377070FD8B3D83313670D
:108A30002700C9BF83D6E18113070030639CE6009D
:108A4000B7474040D8331377070FD8B3D8331367ED
:108A500087004DBF03D7E18193070040E315F7FA84
:108A6000B7474040D8331377070FD8B337570020A4
:108A700013070700F8C7130750032396E70A0947AF
:108A80002387E70AD83313674700ADBFB747404095
:108A90007D479AABBAAB13070004F8CFB8D3F8D32D
:108AA000B8D7F8D713070020B8DBF8DBB8DF138797
:108AB000C19B98D31387C193D8D31387C197B8C3E9
:108AC0001387C18B98D71387C18FF8C337570020FE
:108AD0001307470BD8D71387C187B8C7239E07084A
:108AE000238F07080947A38FE7082390070A2381EC
:108AF000070AA381E70A2392070A2383070AA383AD
:108B0000E70A2394070A2385070AA385E70A239621
:108B1000070A2387070AA387E70A8280374740406E
:108B20002312A70A8347670A93F7C70F93E7270023
:108B30002303F70A8280EFF27FE22A861384C18B37
:108B40001385C19F9385C18B9135EF0090038947B1
:108B5000630BF5007D1513351500A300A40409452A
:108B600023000404653F29BD011126CC22CE4ACA48
:108B70004EC852C656C45AC2B744404098249C348A
:108B80009376F70F418B630A0778983493F7F70FC2
:108B90009D8B418B631307640947638BE75E6361B9
:108BA000F7066393075C83C7F409A18B638C0758AE
:108BB0009387C19B9823B6232381E1829833A381B5
:108BC000E182FA23DE23239EE1802390D182239F3A
:108BD000F18003CA21829386C19B137A0A06631827
:108BE0000A2A83C531822D4593F7F50F6361B52AB3
:108BF000B73500208A07938505C0AE979C438287CE
:108C000015476385E75C7244E2445249C249324ADF
:108C1000A24A124B05617300203083D70182994626
:108C2000A183FD1793F7F70F63E4F612B736002020
:108C30008A07938606C3B6979C438287B73700207E
:108C4000938707D2842323A2F18235A8B7474040F7
:108C50009433854513F6F60F639EB60A238BC180C5
:108C600093060020239CD18003C761818547631848
:108C7000F70AB7370020938707D0A433B82323A27D
:108C8000F182A204D98C83D7C18163F4F400239EBE
:108C9000918003D7C1819307F0039304000463E636
:108CA000E70083D4C181C204C18003AB4182268620
:108CB0001385C19BDA85D939269B23A2618393074B
:108CC000F00F6306FA1C83C72182E207E18763DCA9
:108CD000074403D7C1819307000463E6E70083D705
:108CE000C181C207C18303D7C1811D8F4207418360
:108CF000239EE18037474040231EF7089947230F02
:108D0000F708374740408347F70993F7F707A30F62
:108D1000F708D5BD238B018093060004A1B7B737B0
:108D20000020938707CE91BF83D70182094793F72D
:108D3000F70F6388E702636AF70099EF9387018171
:108D4000842323A2F182014A3DBF0D476380E702DD
:108D50008144130AF00F05BFB7370020938707CD72
:108D6000D5B5B7370020938787CAE9BDB73700204C
:108D7000938707C9C1BDB7370020938747C8D9B5C6
:108D800083C661810547639CE602B737002093875D
:108D900007CEA433B823B7350020A204D98C3755A9
:108DA00000201386E4FF938525CE1305A503F93E25
:108DB000B75700209387870323A2F182E9B583C7C1
:108DC000618113FAF70FC9F7B7370020938707D0EF
:108DD000A433B823B7350020A204D98C375500201E
:108DE0001386E4FF938525D01305A5054536B757AF
:108DF000002093878705C9B783D7018293F7F70FC0
:108E0000238DF180C9B583C7B1819CA203D7C181ED
:108E10008547E3FAE7EA239EF18075B583D701829F
:108E200093F7F70FA38DF1800547238AE18061BD99
:108E300083C72182FD8B99EF83D70182054793F782
:108E4000F70F6396E70483C7518193F7E70FA38A6F
:108E5000F18095BD83C621828947FD8A6399F60218
:108E600083D7018293F7F70F9DE383D7E18113073F
:108E7000200893F7F70F6386E7046362F7020D4754
:108E80006386E7041547638DE7046387D702B74716
:108E900040401547238FE708A38FE7089DB51307C8
:108EA0004008638AE70213076008E392E7FEB747CA
:108EB0004040238B070A01BD37474040A303F70A10
:108EC00019B5B74740402383070AF5BBB747404071
:108ED000A385D70ACDBBB74740402387070AE5B330
:108EE000B7474040A389D70AF9BB83C72182FD8BCE
:108EF000B5EB83D70182854693F7F70F639ED700C2
:108F0000B737002083C777CE93F70702C9D383C74B
:108F1000518193E7170025BF83D70182094793F753
:108F2000F70FE396E7F603D7E18193070010630498
:108F3000F70203D7E18193070020630EF70003D700
:108F4000E181930700306308F70003D7E1819307BD
:108F50000040E31AF7D683C7D18293E70708A386B8
:108F6000F18295B383C721828946FD8BE39DD7D4D7
:108F700083D7018293F7F70FE39707D483D7E18173
:108F80001307100893F7F70F638BE7046366F70284
:108F90000D476381E70615476384E7080547E398B3
:108FA000E7EE374740408347370A93F7C70F93E709
:108FB0001700A301F70A01BB130740086387E70402
:108FC00013076008E395E7EC374740408347670B9A
:108FD00093F7C70F93E71700230BF70AEDB1374755
:108FE00040408347270A93F7C70F93E717002301F1
:108FF000F70AD1B9374740408347B70A93F7C70FFD
:1090000093E71700A305F70A7DB937474040834728
:10901000E70A93F7C70F93E717002307F70A65B12D
:10902000374740408347370B93F7C70F93E7170045
:10903000A309F70A49B923800600C9BB83C7218267
:10904000239E019A0947FD8B639EE70A03D7E181BE
:10905000130610081377F70F6305C7066363E6026C
:109060000D46630DC70615466304C70885476302AE
:10907000F70403D7C1818947E3FBE7E0239EF18032
:1090800039B5130640086300C70613066008630677
:10909000C70613062008E31EC7FC374740400347B6
:1090A000670A0D8B05466313C70098A203D7C181D9
:1090B0008DB3B747404083C7370A8D8B6393E70072
:1090C0009CA2B747404083C7270A05478D8B63930F
:1090D000E7009CA203D7C181894725BB37474040A1
:1090E0000347B70A7DBF374740400347E70A55BFEC
:1090F000374740400347370B6DB73747404003477A
:10910000670B45B783C72182FD8B81CB83D7C18194
:10911000E37BF7BA239EE1807DB683C75181858BBF
:10912000F5D798A2E5B783D7C18189EBB74740400F
:10913000239E07081947238FE708E1B6B747404049
:10914000194799BBA38F040883D7C40783C721821B
:1091500093F7070689C7239E018083C7318283D78F
:10916000C181E39007BAD9B703D70408A384E18289
:109170000547A385E18283C7340A93F7C70FA3810C
:10918000F40A83C7340A93F7F707A381F40AA5BC4E
:1091900083C7740A054793C74700A383F40A03D51E
:1091A00044081375F50F2384A1822385E182EFF033
:1091B0009F9883C7740A93F7F707A383F40A83C7BA
:1091C000740A93E72700A383F40A35BC83C7340BE2
:1091D00093F7F707A389F40A3DB40947638AE710B8
:1091E000636AF70A639F070C83D7C18181E79947B8
:1091F000A38FF40883C7218293F70706BDEB83C7CB
:109200003182954613F7F70F6380D70A99476315A4
:10921000F70A03D7C1819307F0031304000463E640
:10922000E70003D4C1814204418083A441822286A5
:10923000A6851385C19BEFF06FF583D7C181A294FA
:1092400023A29182818FC207C183239EF180B747F9
:109250004040239E870803C7E70913474700238F31
:10926000E70803C7E7091377C70F13672700238FA2
:10927000E70883C7D182E207E18763D40700EFF0F4
:10928000CFF5374740408347E70993F7F707230FA8
:10929000F70895BA0D47E398E79683C7A40A93F7B2
:1092A000F7072385F40A85B283C7A1813747404079
:1092B00093F7F70F3CB375BFB7474040239E0708AD
:1092C0004DBF2390040A83C7240A93C74700238114
:1092D000F40A2386018283C7240A93F7C70F2381E8
:1092E000F40A83C7240A93F7F7072381F40A21BA03
:1092F00083D7440A83C7640A93C747002383F40AC9
:1093000083C7640A93F7C70F2383F40A83C7640AE9
:1093100093F7F7072383F40AFDB09C2493F707041F
:1093200089C7930700049CA4F9B893F7260095C752
:1093300089479CA4B824098B11CB03C751811367BB
:109340002700A38AE18083C7518175B803C7518183
:109350001377D70FA38AE1807DB093F7160099CFDA
:10936000A38D0180238D0180A38A0180238A01803F
:10937000A3810400EFF08FF1854775B794A46FF0D7
:109380009F88EFF2AFDD9387C19F80339C23130743
:1093900020086383E708636DF70013070008638AFA
:1093A000E702130710086382E70205456FF04FDDFF
:1093B00013073008E39BE7FEA38701820547238755
:1093C000E182EFF02F8C0945D5B7EFF00F8B014507
:1093D000F1BFEFF08F8AB754002083A7C40733078B
:1093E000F4001356C70093D6C7006315D6009566E0
:1093F0006397D7007D758565798DEFF06FB603A50E
:10940000C4072286938501A0EFF02FBD83A7C40770
:10941000A29723AEF40665BFB754002003A58407C6
:109420002286938501A0EFF02FC283A784071375CE
:10943000F50FA29723ACF40695BFEFF22FD22A8442
:109440003705820085450505EF00E0748D45370539
:109450000800F12B814537050400D12BEF00901552
:109460002285EF00F00D6FF0AFD137A74040834762
:109470005780858BEDDF034507808280EFF26FCC4C
:10948000ED37930770056313F508C5379307B00AE6
:10949000631EF506D93F938AC19F2A892380AA00BB
:1094A000E9373304A9001374F40F2A8AA380AA00B1
:1094B0006D3FB307850093F4F70F2381AA0075373A
:1094C00033049500A381AA001379D90F93070008EC
:1094D0001374F40F6318F9009389C19F014985093A
:1094E00063182A03593763138502613D8947630F67
:1094F000F500B7A7404003C7578023800780054782
:109500006312E50203C757802380A7806FF0AFC6C0
:10951000A93F2A940509A381A9001374F40F1379B4
:10952000F90F75BF03C7578023800780C5B7EFF2D7
:10953000EFC2373500201305C5C4EF00507437045F
:109540004040130784081C438566B7E400E0D58FCC
:109550001CC3116923A024115145EF00300F93075C
:1095600044159843B706F8FFFD161367070498C320
:10957000984313067005758F98C310A0930680FA60
:1095800014A001009307441498431367070898C375
:109590002300040010A014A001009843B706E0FFC8
:1095A000FD16758F98C32300040023A024216FF0BB
:1095B0002FBDEFF2AFBA4111D928EF00B0028D45AF
:1095C0000565652E8D4509659D218545370510008A
:1095D000092B370440401307C4081C438566130554
:1095E000800CD58F1CC31307C40A1C438966D58F12
:1095F0001CC39306840C9C423707F0FF7D17F98F3C
:109600009CC2EF00B004716513050520EF007007E0
:1096100083A58180373500201305C5C5EF00F063B1
:109620006800EFE0DFEDB245373500201305C5C611
:10963000EF00B062373500201305C5C7EF00306476
:1096400078309307A00A6314F700D53501A01304FE
:10965000440C1C4037071000F98F99E3C93D01A065
:10966000396513050510D13BB7A4404083C754802A
:10967000858B91C3213583C7E182EDDBB70740407D
:109680001307A0FAF8B385450545F92301A0B707EC
:1096900040409386471498421377070819CF938761
:1096A00047159C4337070800F98FBDCBB7877D016D
:1096B0009387078423A4F18082809C4213070002D1
:1096C00093F70706638DE702B7373101938707D019
:1096D0003707404003274714B1662166758F630F33
:1096E000C7026363E6020DC791666307D7023707B7
:1096F0004040183711830507B3D7E70265BFB78726
:109700007D0193870784E9B7E313D7FE3D4711A096
:109710006147B387E702E1BF5147E5BF9207C1BF89
:10972000B7373101938707D071B7EFF28FA103A745
:109730008180B78793039387F76F63F9E714B707BF
:1097400040401307700598A3130780FA98A30100FF
:1097500093864714984237062000518F98C23704E9
:10976000404023800700253793044415A52D9C40D5
:1097700081451305000893E707049CC039231305AE
:109780003002512DB7674040938707089843B706CA
:1097900000803145558F98C39843B70600C0FD1629
:1097A000758F98C39843B706004093097005558F8D
:1097B00098C39525854513050008C1299C403707A6
:1097C000F8FF7D17F98F9CC023003401130980FA3C
:1097D000230024010100930444149C4093E70708EC
:1097E0009CC0230004002300340123002401010055
:1097F0009C403707C0FF7D17F98F9CC023000400F1
:109800007935CD23E526230034012300240101000E
:10981000930740031CB423000400230034012300F9
:10982000240101009C4051777D17F98F9CC09C401A
:109830009CC0230004002300340123002401010004
:109840009C4093F7F7F99CC09C4093E707069CC0A7
:1098500023000400230034012300240101009C4064
:109860003707400013053002D98F9CC02300040045
:109870005D23230034012300240101009C4093F761
:10988000F7F79CC0230004006FF0EF8EB70740404D
:109890001307700598A3130780FA98A30100138695
:1098A00047141842B706E0FFFD16758F18C245BD74
:1098B00001A097410000938161FC17E100001301B2
:1098C0006174171500001305655B973500009385DB
:1098D00065731386418163FAC5008322050023A0C6
:1098E000550011059105E3EAC5FE13854181938575
:1098F000C1A36377B500232005001105E36DB5FE14
:10990000FD42739002BC8D427390428089629382C3
:1099100082887390023097E2FFFF9382226F93E276
:10992000320073905230972201E09382A26D93D25D
:1099300022007390023B972201E09382A26C93D2A3
:1099400022007390123BC142739032BCAD6293828D
:1099500002D07390023A9142739002BDB7020003A5
:10996000890273B022BCEFF05FDC970200009382A3
:1099700082C47390123473002030914763EFB702B2
:10998000B7370020938747D38A05BE959841B7071C
:10999000404093874709028794431345F5FF3707F3
:1099A0004040E98E94C3930607099C42E98F9CC20C
:1099B000930707089843798D88C382809043934624
:1099C000F5FF37074040758E90C3130607091C4208
:1099D000C98F1CC2930707089843F98E94C38280ED
:1099E000944337074040C98E94C3930607099C42AD
:1099F0001345F5FF65BF9843498F98C3B7074040AB
:109A0000938707089843498F98C38280B7074040DF
:109A1000938607089842498F98C29386070998420F
:109A20001345F5FF93874709698F98C261B791473E
:109A300063EFB702B7370020938787D48A05BE95B6
:109A40009841B70740409387470B028794431345DB
:109A5000F5FF37074040E98E94C39306070B9C42FD
:109A6000E98F9CC29307070A9843798D88C3828047
:109A700090439346F5FF37074040758E90C3130619
:109A8000070B1C42C98F1CC29307070A9843F98E23
:109A900094C38280944337074040C98E94C3930691
:109AA000070B9C421345F5FF65BF9843498F98C348
:109AB000B70740409387070A9843498F98C382802D
:109AC000B70740409386070A9842498F98C2938609
:109AD000070B98421345F5FF9387470B698F98C290
:109AE00061B7914763EFB702B73700209387C7D5B7
:109AF0008A05BE959841B70740409387470D028776
:109B000094431345F5FF37074040E98E94C393060D
:109B1000070D9C42E98F9CC29307070C9843798DEF
:109B200088C3828090439346F5FF37074040758E87
:109B300090C31306070D1C42C98F1CC29307070C64
:109B40009843F98E94C38280944337074040C98E6E
:109B500094C39306070D9C421345F5FF65BF9843D8
:109B6000498F98C3B70740409387070C9843498FA4
:109B700098C38280B70740409386070C9842498F6C
:109B800098C29386070D98421345F5FF9387470DBA
:109B9000698F98C261B7B707404013870714104315
:109BA00063550500938707169043135705013D8BB6
:109BB000FD57B397E7009356450193C7F7FFFD8A1A
:109BC0003397D7001347F7FF718F05466396C5009B
:109BD000E98FB397D7005D8FB70740406355050005
:109BE00023A0E716828023A0E7148280EFE21FD72C
:109BF00041116800EFE0BF90B247370741561307A5
:109C0000875093F7F7F0638BE70037074356130746
:109C100087506383E70241016FE09FD689457D55F8
:109C2000C935894537054000193537C5F1FF8945E4
:109C30001305F5679933C5B73705F0FF89457D15DD
:109C40004D353705F1FF89451305F50BCD33797592
:109C500089451305F577F9BFB7074040FC238547D1
:109C60006391F502B70740401307700598A31307E7
:109C700080FA1365050498A30100E8A32380070078
:109C800082801345F5FF3D89F1BFB70740401307B8
:109C9000700598A3130780FA98A301000547639AFB
:109CA000E500F827498FF8A7B70740402380070051
:109CB0008280F8271345F5FF698FF5B7EFE29FC75C
:109CC00083A48180A5ED86049180939714002A8453
:109CD00063E6A706135C15002A8B814A2685054991
:109CE000014A8549930BF007228681468145EF00A2
:109CF0001038AA8799E16374AC00B307F44013D716
:109D0000F741636657016397EA0063F56701CA8903
:109D10003E8BBA8A9307190063147901630C0A0019
:109D200033D5F40233B727013E893A9A93171500C9
:109D3000E3FC87FA238831836FE05FC38549DDBF89
:109D4000EFE2DFC181452A84953F83C7018303A5E4
:109D5000818025473355F502A9473305F50285472C
:109D60000D813355850215056378A7002946814684
:109D70008145EF006075AA8737A74040834637804A
:109D800093E60608A301D78083C60183A303D78087
:109D900093D6870093F6F60FA300D78093F7F70FBB
:109DA0002300F7808347378093F7F707A301F780F5
:109DB0006FE01FBDEFE29FBA7165130505204937BB
:109DC000B7A74040130770FC2381E7800D47A381AC
:109DD000E78013070004A380E78011472382E78010
:109DE0006FE01FBA37F700E01C4393E747001CC33E
:109DF00083A7818037470F0013070724B3D7E702F3
:109E0000238CF1821307803E93F7F70FB387E702A5
:109E100023AAF1828280B7F700E0D8438146799B7C
:109E2000D8C303C781833306A702014790CBD4CBA5
:109E3000814694C7D8C798431367170298C3D8437D
:109E4000058B75DF9843799B98C38280B7F700E054
:109E5000D8438146799BD8C303A741833306E502E3
:109E6000014790CBD4CB814694C7D8C7984313679A
:109E7000170298C3D843058B75DF9843799B98C325
:109E80008280EFE2BFAD83A781805144294633042D
:109E9000F4028146814511803354A40222852D2588
:109EA0002A89AA842946814622858145EF00301CF3
:109EB00081E5914763F4A70093041900B7D74040A8
:109EC000130700F8B8B30547F8B313D78400137726
:109ED000F70F98B393F4F40F84A30D47B8B31307A7
:109EE00070FCB8A31307000498B3B70740409386EB
:109EF000470B98429387070A1377F7EF98C2984366
:109F00001367072098C36FE0BFA732858147B7D694
:109F1000404063C3A7008280D832137707026DDF09
:109F20003387F5001823850798A2E5B7011106CEFF
:109F30002EC60DCD1841AA8705C358417D5511CBBA
:109F40008546631BD70098472300070023A207001C
:109F50000545F240056182809847B24614A39847B0
:109F6000050798C7D8437D17D8C3DDB705466C00F1
:109F7000693FF9BF797122D426D24ECE52CC56CA4F
:109F800006D64AD05AC82A8AAE8A328481449309B6
:109F9000000263440602B3879A00838707009DE3AB
:109FA00063D6840263D2E402198C93F726009309E6
:109FB000000281C719E393090003858A01499DE6E0
:109FC000228929A88504C1BF058CC5B70144F1BF0A
:109FD000CE8552853AC6993F32477D19E34A20FF24
:109FE00022896353040001493304244163CBE40212
:109FF000CA84B3872441D697838507009DED2289C3
:10A000006341200563530400014433059400B250BA
:10A01000225492540259F249624AD24A424B456153
:10A020008280B3049740268B9305000352857D1BE5
:10A03000F53DE31B0BFE269965BF5285C53D8504A2
:10A040004DBFCE855285DD357D195DBF5D71A6C2E0
:10A0500052DC86C6A2C4CAC04EDE56DABA843E8A34
:10A0600095E1930700030147D28626862C08FC84DD
:10A070001137B640264496440649F259625AD25ADC
:10A08000616182802A893684C68A91CAA9470144BF
:10A090006317F60063D50500B305B0400544A30778
:10A0A00001029307F102A546130568FC33F7C502C8
:10A0B00063D3E6002A9713070703A38FE7FE93896C
:10A0C000F7FF33D7C50263F7C50401CCB9C41377D2
:10A0D0002A0021C79305D0024A8542C6813D3248F5
:10A0E000FD1493774A0099CF930710069305000358
:10A0F0004A85631CF8021D3D930580074A853D355E
:10A100000904F9145687D2862686CE854A859D3560
:10A11000229585B7BA85CE8751BF1307D002A38F8A
:10A12000E9FE01449389E7FF6DBF0935930580057A
:10A13000F1B7014582800145828039715AD0373BA1
:10A14000002022DC26DA4AD84ED652D456D25ECE31
:10A1500062CC06DE66CAAA892E893284014A81440D
:10A16000930B5002930AB002294C130B0BD78305B3
:10A1700009008DE56386090081454E85EFF01FDB00
:10A18000F250625426854259D254B259225A925AF8
:10A19000025BF24B624CD24C216182806388750174
:10A1A0004E85EFF0BFD885040509D1B783071900A4
:10A1B000930C1900639A7701930550024E85EFF0D6
:10A1C000FFD685046689CDB7D5D76387570563C8A1
:10A1D000FA00130730026384E704814705A01307E0
:10A1E000D002638AE70013070003E398E7FE930CAD
:10A1F0002900894721A0930C2900854703870C007B
:10A200006303570563C1EA0293063002630BD7026A
:10A2100066890146A54535A8930C29007DBF930C9E
:10A2200029009147E1BF9306D0026309D700930646
:10A230000003E31FD7FC93E7270031A0850C854777
:10A24000C1BF93E74700850CE1B7330686030509D4
:10A25000369603070900930607FD13F5F60FE3F69C
:10A26000A5FE9305E0029946631EB70005098146E5
:10A27000A54503070900130707FD1375F70F63F5DD
:10A28000A502368A030709009305A0066301B70AF1
:10A2900063C1E5029305C004630BB708930580060C
:10A2A0006300B70881452DA0B38686030509BA96D9
:10A2B000C9B793054007630CB7069305A007630869
:10A2C000B7061305C00681456314A700050991452B
:10A2D0000307090013050006130810066344E50090
:10A2E00013081004130570066340E50613055006B5
:10A2F0006355A71413057004634DE50293055004DC
:10A30000635DB71293063004E310D7EA1840930C4C
:10A310004400A30601005886BE8601476C0041A098
:10A32000030519008145E315E5FA090955B7050943
:10A3300095BF93063006E30BD7FC63C6E60693068B
:10A3400080056303D7028DB5930630076301D704F8
:10A3500063C8E6029306F006630ED70A9306000769
:10A3600093E74700E312D7E4D9CD1D04937584FF2A
:10A37000C288138485003E880147B287C1463DA844
:10A38000930650076300D706930680075DBF184009
:10A39000930C4400DA8511C3BA855287BE864E8578
:10A3A000EFF05FBD2DA895C11D04937584FFC28891
:10A3B000138485003E880547B287A946D0418C4169
:10A3C0004E85EFF01FD7AA94C5B3930C4400D288F2
:10A3D0003287854629460C404E85EFF03FC7AA9448
:10A3E0006684D9B399C91D04937584FFC288138408
:10A3F00085003E880147B287C9B7930C4400D288D4
:10A4000032878146C1BF3287930C4400D28881468F
:10A410004146D1B781CD1D04937584FFC288138452
:10A4200085003E880147B287A14649BF3287930C19
:10A430004400D2888146214679BF1D04937584FF6C
:10A44000138485003287D0418C41C2884E853E8876
:10A45000B687A946EFF03FCEBDB739712ED232D4C0
:10A46000AA855010014506CE36D63AD83EDA42DCEF
:10A4700046DE32C6EFF07FCCF240216182800111CE
:10A4800022CC26CA06CE1C21AA840144DC8783077D
:10A49000F100050499EFA9479305F1000546014530
:10A4A000DC87EFF09FA62285F2406244D24405612A
:10A4B000828005469305F1000145EFF01FA5B387A3
:10A4C00084009C23DC87E1B73288AA882E87DDEAE6
:10A4D00063F1C510C167636DF618B7070001B337A4
:10A4E000F600B307F040E19BE1073353F6009716FF
:10A4F00000009386A6889A96942213030002B697CA
:10A50000B306F340630BF3003397D500B357F50060
:10A510003318D6005D8FB318D50013560801335594
:10A52000C70293160801C18293D708013377C70287
:10A53000B385A6024207D98F63FAB700C297130703
:10A54000F5FF63E4070163EDB7303A858D8F33D7AC
:10A55000C702C20893D80801B3F7C702B386E60260
:10A56000C207B3E8F80063FBD800C2989307F7FF6F
:10A5700063E50801791763E3D8003E874205598DEA
:10A580008145828063F5D500814501458280C167A0
:10A5900063E7F618B7070001B3B7F600B307F0405A
:10A5A000E19BE10733D8F600170700001307077D8A
:10A5B00042971823930800023E973388E84063943B
:10A5C000E81863E1B6283335C50013451500814509
:10A5D00082804DC6C167637FF62413370610134788
:10A5E00017000E07B356E600970700009387077918
:10A5F000B6979C2393060002BA97B38EF640639EEB
:10A60000F608B387C5409356060142064182854548
:10A6100033D5D70213D70801B3F7D7023303C502E6
:10A62000C207D98F63FA6700C2971307F5FF63E487
:10A63000070163E467223A85B387674033D7D702BF
:10A64000C20893D80801B3F7D7023306C702C2077E
:10A65000B3E8F80063FBC800C2989307F7FF63E50F
:10A660000801791763E3C8003E874205598D82804F
:10A670009337061093C717008E0785BD814697074D
:10A6800000009387A76FB6979C23014793060002AB
:10A69000BA97B38EF640E386F6F63318D60133D375
:10A6A000F50093560801335ED30213160801B395E3
:10A6B000D5014182B357F500CD8F13D70701B318E9
:10A6C000D5013373D302B305C60342033367670072
:10A6D000637BB70042971305FEFF636C0717637A2D
:10A6E000B716791E42970D8F3355D702C207C18323
:10A6F0003377D7023303A6024207D98F63FB670083
:10A70000C2971307F5FF63E2071563F06714791525
:10A71000C29793150E01B3876740C98DD5BD93B716
:10A72000061093C717008E0733D8F60017070000EE
:10A730001307C76442971823930800023E97338893
:10A74000E840E380E8E8335EE600B3960601336E46
:10A75000DE00B3D8E500935E0E01B3D7D803131320
:10A760000E01B3950501135303013357E5004D8FD7
:10A770009356070133160601B3F8D803B305F30265
:10A78000C208B3E6160163FBB600F2969388F7FFA2
:10A7900063E3C60D63F1B60CF917F2968D8EB3D54F
:10A7A000D60342074183B3F6D603B308B302C20609
:10A7B000558F637B170172979386F5FF6369C7090D
:10A7C00063771709F9157297C207C16ECD8F93860B
:10A7D000FEFFB3F5D70013D30701F18E4182338E0C
:10A7E000D50233071741B306D30293580E01B38540
:10A7F000C502B695C6953303C30263F3D5007693BD
:10A8000093D605019A966363D7026305D7003E8508
:10A8100081458280C166FD1633F7D5004207337E3D
:10A82000DE00331505017297E373E5FE1385F7FF2C
:10A8300081458280B70700016377F60293560601CF
:10A8400041475DB38145054582803A85D9B5B685D6
:10A85000A5BF2A8E49BDC68791B77915C297E9BBB6
:10A860007915C297E5B1935686016147B5BB328829
:10A87000AA882E832E87D5E663F1C510C16763636E
:10A88000F618B7070001B337F600B307F040E19BB5
:10A89000E1073353F600970600009386264E9A96FA
:10A8A000942213030002B697B306F340630BF30040
:10A8B0003397D500B357F5003318D6005D8FB31822
:10A8C000D500935508013356B702131308011353EB
:10A8D000030193D708013377B702330666024207B4
:10A8E000D98F63F7C700C29763E4070163E3C730FA
:10A8F000918F33D7B702139508014181B3F7B7029F
:10A9000033076702C2075D8D6378E5004295636592
:10A9100005016373E5004295198D3355D5008145D6
:10A92000828063F3D5008280C16763EAF616B707B9
:10A930000001B3B7F600B307F040E19BE10733D85D
:10A94000F600170700001307674342971823130EFA
:10A9500000023E973308EE406317EE1663E4B6003C
:10A96000636AC500B308C540B386D54033331501CB
:10A970003383664046859A85828059CAC167637E63
:10A98000F62413370610134717000E07B356E600D8
:10A99000970700009387873EB6979C231303000216
:10A9A000BA97B306F3406314F3083387C5401353D3
:10A9B000060142064182B355670293D708013377F7
:10A9C0006702B385C5024207D98F63F8B700C29703
:10A9D00063E5070163F3B700C2978D8F33D7670232
:10A9E000C20893D80801B3F767023307C70213956B
:10A9F000070133E5A800E36BE5F0198D3355D50069
:10AA0000814582809337061093C717008E0751B592
:10AA100081469707000093876736B6979C230147C6
:10AA200013030002BA97B306F340E300F3F83318B8
:10AA3000D60033DEF50013530801B35E6E02131621
:10AA40000801B395D5003357F50041824D8F9357D8
:10AA50000701B318D500337E6E02B385CE02420ED5
:10AA6000B3E7C70163F8B700C29763E5070163F373
:10AA7000B700C2978D8FB3D5670242074183B3F702
:10AA80006702B385C502C2075D8F6378B70042973E
:10AA9000636507016373B70042970D8F29BF93B7B2
:10AAA000061093C717008E0733D8F600170700006B
:10AAB0001307C72C42971823130E00023E97330842
:10AAC000EE40E30DEEE8B3960601B358E600B3E8B6
:10AAD000D80033DEE50013DF0801B357EE03939E81
:10AAE000080193DE0E01B356E50033130501B3955B
:10AAF0000501D58D93D6050133160601337EEE038D
:10AB00003385FE02420EB3E6C60163FBA600C6967D
:10AB1000138EF7FF63ED160D63FBA60CF917C696AF
:10AB2000898E33D5E603C205C181B3F6E603B38E41
:10AB3000AE02C206D58D63FBD501C6959306F5FF1F
:10AB400063E5150B63F3D50B7915C695939607014D
:10AB5000C162C98E1385F2FF33FEA600935F060122
:10AB6000C182718D330FAE02B385D5413385A60204
:10AB700093570F01330EFE032A9EF297B386F60316
:10AB800063F3A7009696C16EFD1E33F5D70113DE61
:10AB900007014205337FDF01B307DE007A9563E5E5
:10ABA000F5026381F5023305A3403333A3009D8D85
:10ABB000B38565403397E50033550501598DB3D50D
:10ABC00005018280E371A3FE3306C5403335C5001D
:10ABD000AA98B38717413285F9B7B7070001637C9C
:10ABE000F60093560601414765B3368585B7F2876F
:10ABF00005BFC297F5B993568601614751BB000066
:10AC00003C100020300E00208E0E0020EA0E0020A6
:10AC10008E0E0020F80D00201A0C00208E0E002051
:10AC2000060E00201C0E002036100020C60C00204E
:10AC30003C0C00204C0C0020280D0020500D002062
:10AC4000500D0020760D0020800D00204A756D709B
:10AC50002041505020313131310D0000537973744F
:10AC6000656D436C6B3A25640D0A0000436869709A
:10AC700049443A253038780D0A0000004941500D0A
:10AC8000000000000A060002FFFFFF400100000074
:10AC90001603300031003200330034003500360036
:10ACA00037003800390000002603570043004800F1
:10ACB000200055005300420032002E0030002000DA
:10ACC00044004500560049004300450020000000B4
:10ACD0000E037700630068002E0063006E00000022
:10ACE0000902200001010080320904000002FF80F7
:10ACF00055000705820240000007050202400000DF
:10AD00000902200001010080320904000002FF80D6
:10AD100055000705820240000007050202400000BE
:10AD200012011001FF8055404843E055000100002A
:10AD30000001000098190020BC190020E019002033
:10AD40000C1A0020F61900204C1A0020701A00205E
:10AD5000941A0020C01A0020AA1A0020001B00200C
:10AD6000241B0020481B0020741B00205E1B0020B9
:10AD7000286E756C6C2900000001020203030303B6
:10AD8000040404040404040405050505050505057B
:10AD9000050505050505050506060606060606065B
:10ADA0000606060606060606060606060606060643
:10ADB000060606060606060607070707070707072B
:10ADC0000707070707070707070707070707070713
:10ADD0000707070707070707070707070707070703
:10ADE00007070707070707070707070707070707F3
:10ADF00007070707070707070808080808080808DB
:10AE000008080808080808080808080808080808C2
:10AE100008080808080808080808080808080808B2
:10AE200008080808080808080808080808080808A2
:10AE30000808080808080808080808080808080892
:10AE40000808080808080808080808080808080882
:10AE50000808080808080808080808080808080872
:10AE60000808080808080808080808080808080862
:10AE70000808080808080808000000000000000092
:10AE800000AAAAAAAAAAAAAAAAEEEEEEEEEEEEEEF0
:10AE9000EEFEFFFFFFFFFFFFFFFFFFFFFF7FBFDFB4
:10AEA000EFF7FBFDFC7EBFDFEFF7FBFD7E00000050
:10AEB0000907000000000000000000000000000082
:10AEC0000000000000000000000000000000000082
:10AED0000907000000000000000000000000000062
:10AEE0000000000000000000000000000000000062
:10AEF0000050000000500000000E27070000000076
:04AF00000403090439
:00000001FF

View File

@@ -0,0 +1,901 @@
:020000040000FA
:100000006F00300B00000000010001000100010042
:1000100001000100010001000100010001000100D8
:100020000100010001000100010001008280EF02D7
:10003000B003B70740404111238D070037B90300D3
:1000400002C61309F997370440409D49154AB24743
:100050006376F900054541016F005004230D34011A
:100060006537230C44014D371C2C793F1C2C93F42D
:10007000F70F593F93F71400230D040089C7B247C7
:1000800085073EC6E9B70145F9B7EF02E07D2A844E
:10009000AE84713F85472A896305F50413DA0401AC
:1000A00093D98400AD47937AF40F137AFA0F93F93A
:1000B000F90F93F4F40F6306F400930780046315BB
:1000C000F402370440409D473CAC3D3F230C5401B3
:1000D000253F230C44010D3F230C3401353704AC7C
:1000E00025374A856F00807B370440400D4B230D38
:1000F0006401193F99471CAC013F230D04002937C7
:10010000230D6401D9B7EF02C0770547AA87638D35
:10011000E5000947638EE500014589E5BE851305C5
:100120000002A5376F002078AA8513052005D5BFEA
:10013000AA851305800DF5B7EF022072937BF50FAA
:1001400013090010330979412A8A2E84328BAA853B
:1001500009456361C902153FAA8A229BB704404042
:1001600063158B0056856F00C0721C2005049CAC83
:10017000613DFDB7193FAA8A2299B70440401C206F
:1001800005049CAC5135E31C24FF93090BF0DE9968
:1001900013040A103304744193D989008144B70BC6
:1001A000404063E9340333046A01937504F0094560
:1001B000E93DB3EAAA0081441374F40FB709404043
:1001C000E3F284FAB30799009C238504238CF90099
:1001D000253DFDB793958400A29509457D35B3EA89
:1001E000AA00130C0910834709000509238CFB00A2
:1001F000213DE31A89FFE3970AF68504C204C18012
:100200004DB7EF026066AE84AA852D453284B709EA
:100210004040A53D83C789012A89FD3383C78901F1
:10022000A294DD33631594004A856F00206783C76D
:1002300089010504A30FF4FEC13BEDB7EF02C062D4
:10024000AE84AA85130580043284B7094040353D49
:1002500083C789012A894D3B83C78901A2946D33E5
:1002600083C789010504A30FF4FE793BE31A94FECA
:100270004A852DA5EF02605E4111856713141500B4
:100280003EC2A167330AB4003EC4C167AA8A1354B0
:100290001A003EC6540001493306AA409C42335717
:1002A000F4023307F70263655701BA976374F606E1
:1002B000630509007D191379F90F2285CA85A135D7
:1002C00093172900C1078A9783A947FFE177AA847A
:1002D00033543403A16B33043403A2993E94330B9B
:1002E0007401631E090263EA6A05216BB30A5A416D
:1002F0004E9B568A630B0904216963E86A058545AC
:100300004E851135C98CB3072B018DE4DA89D28A69
:100310003E8BE5B7050991061379F90F41B7E36400
:100320007BFDE36254FD22858545F13BC98C330496
:100330007441D5D426854101A9ABFD773E9BDA8572
:10034000130500029933C98C79BF0569E3F459FF9D
:10035000CE8513050002338A2901053BC98CD28959
:10036000F5B7B70700201307A0052380E7008280B8
:10037000B7070020238007008280EF0280504111E0
:100380002A840D653000A1451305C50C453D1C8729
:10039000AA841CA09C871CB01C843CA09C843CB0FC
:1003A0001C855CA09C855CB05931458D4101E5A957
:1003B000EF02204D41112A840D653000A14513053F
:1003C000C50CAD3D1C87AA841CA09C871CB01C8456
:1003D0003CA09C843CB01C855CA09C855CB01C86C9
:1003E0007CA09C867CB0A131458D41016DA9EF02B6
:1003F00040492A842A860D659145130545093D3DEE
:100400001C203830AA843CB018A01C3038203CA0F6
:1004100018B03139458D41A9EF02A0464111AA8497
:100420000D651306F10085451D05093D9C872A844D
:100430001307000A93F7070281C71307100A8547BD
:10044000B70600209CA0A380E600D536418D41016F
:1004500099A9B707002003C707009307A0056316F3
:10046000F706EF02604041118564700091451385E5
:100470004400E9331C861307500F2A846393E70472
:1004800098866310F7041C87639DE7029887631AB8
:10049000F702B7B75AA5938757A59385440013056C
:1004A00020043EC6DD362A848144B7094040114904
:1004B0007C00A6979C238504238CF900B136E39930
:1004C00024FFB536418D4101D1AE11458280EF0246
:1004D000403B370440408D473CAC3D36930790FB92
:1004E0001CAC1D36230D04007DAEEF0280393704AD
:1004F00040408D473CAC093E9307B0FA1CAC29360E
:10050000230D04004DA6EF02C037370900208347B2
:100510001900AE8401112A84B2859DCB834719004E
:100520001307100A639EE702B707F9FFB306F4004A
:1005300021670D4563F4E602FD17AE97A29763FFAE
:10054000E7002686228575392A84D534418D39A065
:100550001305F10132C6C935B24569D10561A1A6BD
:100560001307000AE39FE7FCB707FDFFC1B7EF02DF
:100570004031B704002083C7140001112A84B9C791
:1005800083C714001307100A639AE704B367B40023
:10059000D2070D45B1E3B707F9FFB306F4002167B1
:1005A00063FCE602FD17AE97A29763F7E702B70771
:1005B000002003C707009307A0051145631EF7003D
:1005C00022854D392A84A534418D39A01305F101C6
:1005D0002EC69935B2454DD50561F1A41307000A21
:1005E000E397E7FCB367B400D2070D45F5F7B7070B
:1005F000FDFF65B7EF02E028B704002083C71400B1
:1006000001112A84A1C783C714001307100A639934
:10061000E704B707F9FFB306F40021670D4563FF50
:10062000E602FD17B297A29763FAE702B707002028
:1006300003C707009307A00511456311F702228540
:10064000E53C2A84EFF0BF9E418D09A81305F10116
:1006500032C62EC4D133A245324655D50561A1A478
:100660001307000AE394E7FCB707FDFF6DB7EF023D
:100670004021B704002083C7140001112A84A9C7B0
:1006800083C714001307100A6398E704B367B40024
:10069000D2070D453707070095EF637DE402938786
:1006A000F5FFA29763F8E702B707002003C707002A
:1006B0009307A0051145631FF7002285653E2A8434
:1006C000EFF0FF96418D39A01305F1012EC6A93335
:1006D000B2455DD50561C1AA1307000AE396E7FCA0
:1006E000B367B400D2070D45F5F73707030075B7B8
:1006F000EF022019B704002083C7140001112A84D7
:10070000B1C383C714001307100A6397E7043707C0
:1007100007000D456370E4049307F6FFA29763FB9F
:10072000E702B707002003C707009307A00511459C
:100730006312F7022285EFF03FA02A84EFF03F8F8B
:10074000418D09A81305F10132C62EC4F131A2452D
:10075000324645D9056181AA1307000AE393E7FCF5
:10076000370703007DB7EF022010B709002083C7C9
:10077000190041112A89AE84328485CF83C71900BC
:100780001307100A639DE702370707000D456376DC
:10079000E9029307F4FFCA9763F1E702B389840083
:1007A00033099940014463939902EFF05F88418DCA
:1007B00029A01305E1008D3171D14101C5A01307B6
:1007C000000AE39DE7FC37070300C9B71306F100F1
:1007D000854533852401EFF0DFA298209C872A8489
:1007E0006305F70013652500C9BF85046DBFEF02DF
:1007F000A007B709002083C7190041112A842E8958
:10080000B2849DCB83C719001307100A639CE702CB
:10081000370707000D456375E4029387F4FFA2973D
:1008200063F0E7024A86A6852285EFF09F9D2A8421
:10083000EFF0EFFF418D29A01305F100F13E79D1D2
:100840004101A9A81307000AE39EE7FC370703004C
:10085000D1B7397101436EC619A0397141536AC8C5
:1008600066CA62CC5ECE19A0397101535AD056D2F5
:1008700052D44ED64AD826DA22DC06DE3301614055
:10088000828241114AC026C222C406C68282B24D6B
:100890004101024D924C224CB24B4101024B924A13
:1008A000224AB2494101024992442244B2404101E4
:1008B0008280970100209381E1F417F10020130159
:1008C000617437850600B70500203786002063FA7B
:1008D000C5008322050023A0550011059105E3EA18
:1008E000C5FEFD42739002BC37050020670005007D
:020000040006F4
:108000006F10100A000000000000002000000000B7
:10801000A2090020A4090020000000609E18002092
:1080200000000000000000009E1800209E180020A4
:1080300000000000000000009E180020000000006A
:10804000E8090020000000009E1800209E18002073
:108050009E1800209E1800209E1800209E180020C8
:108060009E1800209E1800209E1800209E180020B8
:108070009E1800209E1800209E1800209E180020A8
:108080009E1800209E1800209E1800209E18002098
:10809000880B00209E1800209E1800209E180020AB
:1080A0009E1800209E18002013058008731005807C
:1080B00037F500E0130535D1930500080F00F00FE8
:1080C0002300B5002300B5002300B5002300B50050
:1080D0002300B5002300B5002300B5002300B50040
:1080E0002300B5002300B5002300B5002300B50030
:1080F0002300B5002300B5002300B5002300B50020
:108100002300B5002300B5002300B5002300B5000F
:108110002300B5002300B5002300B5002300B500FF
:108120000100010001000100010001000100010047
:108130000100010001000100010001000100010037
:10814000010001008280EF02C07FB707404041116B
:10815000238D070037B9030002C61309F9973704C6
:1081600040409D49154AB2476376F90005454101F3
:108170006F007000230D34016537230C44014D3727
:108180001C2C793F1C2C93F4F70F593F93F71400E4
:10819000230D040089C7B24785073EC6E9B70145EC
:1081A000F9B7EF02007A2A84AE84713F85472A89A5
:1081B0006305F50413DA040193D98400AD47937A7B
:1081C000F40F137AFA0F93F9F90F93F4F40F63068F
:1081D000F400930780046315F402370440409D4780
:1081E0003CAC3D3F230C5401253F230C44010D3F83
:1081F000230C3401353704AC25374A856F00A0774E
:10820000370440400D4B230D6401193F99471CACC6
:10821000013F230D04002937230D6401D9B7EF0274
:10822000E0730547AA87638DE5000947638EE50083
:10823000014589E5BE8513050002A5376F0040742E
:10824000AA8513052005D5BFAA851305800DF5B7AE
:10825000EF02406E937BF50F13090010330979414B
:108260002A8A2E84328BAA8509456361C902153F8B
:10827000AA8A229BB704404063158B0056856F0085
:10828000E06E1C2005049CAC613DFDB7193FAA8A35
:108290002299B70440401C2005049CAC5135E31CD6
:1082A00024FF93090BF0DE9913040A103304744180
:1082B00093D989008144B70B404063E93403330408
:1082C0006A01937504F00945E93DB3EAAA008144C7
:1082D0001374F40FB7094040E3F284FAB30799002E
:1082E0009C238504238CF900253DFDB793958400DC
:1082F000A29509457D35B3EAAA00130C09108347FE
:1083000009000509238CFB00213DE31A89FFE3974F
:108310000AF68504C204C1804DB7EF028062AE84C4
:10832000AA852D453284B7094040A53D83C7890100
:108330002A89FD3383C78901A294DD336315940034
:108340004A856F00406383C789010504A30FF4FECB
:10835000C13BEDB7EF02E05EAE84AA851305800451
:108360003284B7094040353D83C789012A894D3B96
:1083700083C78901A2946D3383C789010504A30FC4
:10838000F4FE793BE31A94FE4A85F5A3EF02805A86
:1083900041118567131415003EC2A167330AB4006A
:1083A0003EC4C167AA8A13541A003EC6540001494C
:1083B0003306AA409C423357F4023307F702636541
:1083C0005701BA976374F606630509007D1913799E
:1083D000F90F2285CA85A13593172900C1078A970D
:1083E00083A947FFE177AA8433543403A16B330494
:1083F0003403A2993E94330B7401631E090263EAAD
:108400006A05216BB30A5A414E9B568A630B0904D5
:10841000216963E86A0585454E851135C98CB30726
:108420002B018DE4DA89D28A3E8BE5B705099106E6
:108430001379F90F41B7E3647BFDE36254FD2285B4
:108440008545F13BC98C33047441D5D4268541015F
:1084500031ABFD773E9BDA85130500029933C98C59
:1084600079BF0569E3F459FFCE8513050002338A0D
:108470002901053BC98CD289F5B71307A005A38C48
:10848000E1828280A38C01828280EF02204D411123
:108490002A840D653000A1451305C50C653D1C8778
:1084A000AA841CA09C871CB01C843CA09C843CB06B
:1084B0001C855CA09C855CB07931458D4101C9A1CA
:1084C000EF02C04941112A840D653000A145130512
:1084D000C50C49351C87AA841CA09C871CB01C8431
:1084E0003CA09C843CB01C855CA09C855CB01C8638
:1084F0007CA09C867CB08139458D410151A1EF0261
:10850000E0452A842A860D6591451305450999356C
:108510001C203830AA843CB018A01C3038203CA065
:1085200018B01531458DA9A9EF0240434111AA8425
:108530000D651306F10085451D05293D9C872A849C
:108540001307000A93F7070281C71307100A85472C
:108550009CA0238DE182C53E418D410115A103C739
:1085600091839307A0056316F706EF02803D411142
:1085700085647000914513854400E93B1C86130710
:10858000500F2A846393E70498866310F7041C87CE
:10859000639DE7029887631AF702B7B75AA59387D6
:1085A00057A593854400130520043EC6DD3E2A846A
:1085B0008144B709404011497C00A6979C2385045B
:1085C000238CF900B13EE39924FFB53E418D410172
:1085D0005DA611458280EF026038370440408D4728
:1085E0003CAC3D3E930790FB1CAC1D3E230D0400AC
:1085F00041AEEF02A036370440408D473CAC0D360B
:108600009307B0FA1CAC293E230D040095AEEF028F
:10861000E03483C7A183AE8401112A84B2859DCB47
:1086200083C7A1831307100A639EE702B707F9FF08
:10863000B306F40021670D4563F4E602FD17AE971B
:10864000A29763FFE70026862285C1392A84E53C8C
:10865000418D39A01305F10132C6F935B24569D112
:10866000056139AE1307000AE39FE7FCB707FDFF7A
:10867000C1B7EF02A02E83C7A18301112A84A9C725
:1086800083C7A1831307100A6398E704B367B40094
:10869000D2070D45A1E3B707F9FFB306F400216740
:1086A00063FAE602FD17AE97A29763F5E70203C7E8
:1086B00091839307A0051145631EF7002285F931C8
:1086C0002A845134418D39A01305F1012EC6A93DEC
:1086D000B2455DD505616DA41307000AE399E7FC77
:1086E000B367B400D2070D45F5F7B707FDFF75B7BF
:1086F000EF02C02683C7A18301112A84A9C383C7BF
:10870000A1831307100A6396E704B707F9FFB306BE
:10871000F40021670D4563FCE602FD17B297A297AE
:1087200063F7E70203C791839307A0051145631020
:10873000F7022285313E2A843934418D09A8130578
:10874000F10132C62EC4CD33A24532464DD9056162
:1087500005AC1307000AE397E7FCB707FDFF45BF29
:10876000EF02C01F83C7A18301112A84B9C383C745
:10877000A1831307100A6396E704B367B400D20716
:108780000D453707070085EF637BE4029387F5FF0C
:10879000A29763F6E70203C791839307A0051145EB
:1087A000631FF7002285DD362A84EFF0DF99418DC3
:1087B00039A01305F1012EC6853BB2454DD905619F
:1087C000C1A21307000AE398E7FCB367B400D2071D
:1087D0000D45F5F73707030045BFEF02201883C7A3
:1087E000A18301112A84A1C383C7A1831307100A9F
:1087F0006395E704370707000D45637EE40293079E
:10880000F6FFA29763F9E70203C791839307A005D8
:1088100011456312F7022285EFF09FA32A84EFF03F
:108820009F92418D09A81305F10132C62EC4ED397E
:10883000A245324655D90561A1A21307000AE39566
:10884000E7FC370703004DBFEF02A00F83C7A183EA
:1088500041112A89AE84328485CF83C7A18313074F
:10886000100A639DE702370707000D456376E902AA
:108870009307F4FFCA9763F1E702B38984003309D1
:108880009940014463939902EFF0FF8B418D29A039
:108890001305E100513971D14101F1A81307000A14
:1088A000E39DE7FC37070300C9B71306F1008545D0
:1088B00033852401EFF07FA698209C872A846305E6
:1088C000F70013652500C9BF85046DBFEF0260077F
:1088D00083C7A18341112A842E89B2849DCB83C78B
:1088E000A1831307100A639CE702370707000D45B1
:1088F0006375E4029387F4FFA29763F0E7024A8668
:10890000A6852285EFF07FA12A84EFF0DF83418DD9
:1089100029A01305F100093979D14101A9A813074C
:10892000000AE39EE7FC37070300D1B73971014322
:108930006EC619A0397141536AC866CA62CC5ECE50
:1089400019A0397101535AD056D252D44ED64AD8B2
:1089500026DA22DC06DE33016140828241114AC000
:1089600026C222C406C68282B24D4101024D924CFB
:10897000224CB24B4101024B924A224AB249410178
:10898000024992442244B240410182802A8309CAAA
:1089900083830500230073007D16050385056DFAAA
:1089A000828001A0011122CE26CCEF1000572AC6EA
:1089B000EF100057AA84EF100057B2452A843735CC
:1089C0000020130505C0EF10502937350020A6857B
:1089D000130505C1EF10702837350020A285130557
:1089E00005C2EF10902701A09307800873B007809D
:1089F0000F1000000568028801A083C7D18293F799
:108A0000F707A386F18283D6E181130700106393F1
:108A1000E602B7474040D8331377070FD8B3D833AF
:108A200013671700D8B3374740405C3393E7070814
:108A30005CB3828083D6E18113070020639CE6004B
:108A4000B7474040D8331377070FD8B3D8331367ED
:108A50002700C9BF83D6E18113070030639CE6007D
:108A6000B7474040D8331377070FD8B3D8331367CD
:108A700087004DBF03D7E18193070040E315F7FA64
:108A8000B7474040D8331377070FD8B33787002054
:108A900013070700F8C7130750032396E70A09478F
:108AA0002387E70AD83313674700ADBFB747404075
:108AB0007D479AABBAAB13070004F8CFB8D3F8D30D
:108AC000B8D7F8D713070020B8DBF8DBB8DF138777
:108AD000C19B98D31387C193D8D31387C197B8C3C9
:108AE0001387C18B98D71387C18FF8C337870020AE
:108AF0001307470BD8D71387C187B8C7239E07082A
:108B0000238F07080947A38FE7082390070A2381CB
:108B1000070AA381E70A2392070A2383070AA3838C
:108B2000E70A2394070A2385070AA385E70A239601
:108B3000070A2387070AA387E70A8280374740404E
:108B40002312A70A8347670A93F7C70F93E7270003
:108B50002303F70A8280EFF27FE02A861384C18B19
:108B60001385C19F9385C18B1535EF00900389470D
:108B7000630BF5007D1513351500A300A40409450A
:108B800023000404653FEDBB011126CC22CE4ACA66
:108B90004EC852C656C45AC2B744404098249C346A
:108BA0009376F70F418B630A0778983493F7F70FA2
:108BB0009D8B418B631307640947638BE75E636199
:108BC000F7066393075C83C7F409A18B638C07588E
:108BD0009387C19B9823B6232381E1829833A38195
:108BE000E182FA23DE23239EE1802390D182239F1A
:108BF000F18003CA21829386C19B137A0A06631807
:108C00000A2A83C531822D4593F7F50F6361B52A92
:108C1000B73500208A07938505C3AE979C438287AA
:108C200015476385E75C7244E2445249C249324ABF
:108C3000A24A124B05617300203083D70182994606
:108C4000A183FD1793F7F70F63E4F612B736002000
:108C50008A07938606C6B6979C438287B73700205B
:108C60009387C7D4842323A2F18235A8B747404015
:108C70009433854513F6F60F639EB60A238BC180A5
:108C800093060020239CD18003C761818547631828
:108C9000F70AB73700209387C7D2A433B82323A29B
:108CA000F182A204D98C83D7C18163F4F400239E9E
:108CB000918003D7C1819307F0039304000463E616
:108CC000E70083D4C181C204C18003AB4182268600
:108CD0001385C19BDA855D39269B23A261839307A7
:108CE000F00F6306FA1C83C72182E207E18763DC89
:108CF000074403D7C1819307000463E6E70083D7E5
:108D0000C181C207C18303D7C1811D8F420741833F
:108D1000239EE18037474040231EF7089947230FE1
:108D2000F708374740408347F70993F7F707A30F42
:108D3000F708D5BD238B018093060004A1B7B73790
:108D400000209387C7D091BF83D70182094793F74B
:108D5000F70F6388E702636AF70099EF9387018151
:108D6000842323A2F182014A3DBF0D476380E702BD
:108D70008144130AF00F05BFB73700209387C7CF90
:108D8000D5B5B7370020938747CDE9BDB737002069
:108D90009387C7CBC1BDB7370020938707CBD9B521
:108DA00083C661810547639CE602B737002093873D
:108DB000C7D0A433B823B7350020A204D98C378597
:108DC00000201386E4FF9385E5D01305A5037D3EBF
:108DD000B78700209387870323A2F182E9B583C771
:108DE000618113FAF70FC9F7B73700209387C7D20D
:108DF000A433B823B7350020A204D98C37850020CE
:108E00001386E4FF9385E5D21305A5054136B787A0
:108E1000002093878705C9B783D7018293F7F70F9F
:108E2000238DF180C9B583C7B1819CA203D7C181CD
:108E30008547E3FAE7EA239EF18075B583D701827F
:108E400093F7F70FA38DF1800547238AE18061BD79
:108E500083C72182FD8B99EF83D70182054793F762
:108E6000F70F6396E70483C7518193F7E70FA38A4F
:108E7000F18095BD83C621828947FD8A6399F602F8
:108E800083D7018293F7F70F9DE383D7E18113071F
:108E9000200893F7F70F6386E7046362F7020D4734
:108EA0006386E7041547638DE7046387D702B747F6
:108EB00040401547238FE708A38FE7089DB51307A8
:108EC0004008638AE70213076008E392E7FEB747AA
:108ED0004040238B070A01BD37474040A303F70AF0
:108EE00019B5B74740402383070AF5BBB747404051
:108EF000A385D70ACDBBB74740402387070AE5B310
:108F0000B7474040A389D70AF9BB83C72182FD8BAD
:108F1000B5EB83D70182854693F7F70F639ED700A1
:108F2000B737002083C737D193F70702C9D383C768
:108F3000518193E7170025BF83D70182094793F733
:108F4000F70FE396E7F603D7E18193070010630478
:108F5000F70203D7E18193070020630EF70003D7E0
:108F6000E181930700306308F70003D7E18193079D
:108F70000040E31AF7D683C7D18293E70708A38698
:108F8000F18295B383C721828946FD8BE39DD7D4B7
:108F900083D7018293F7F70FE39707D483D7E18153
:108FA0001307100893F7F70F638BE7046366F70264
:108FB0000D476381E70615476384E7080547E39893
:108FC000E7EE374740408347370A93F7C70F93E7E9
:108FD0001700A301F70A01BB130740086387E704E2
:108FE00013076008E395E7EC374740408347670B7A
:108FF00093F7C70F93E71700230BF70AEDB1374735
:1090000040408347270A93F7C70F93E717002301D0
:10901000F70AD1B9374740408347B70A93F7C70FDC
:1090200093E71700A305F70A7DB937474040834708
:10903000E70A93F7C70F93E717002307F70A65B10D
:10904000374740408347370B93F7C70F93E7170025
:10905000A309F70A49B923800600C9BB83C7218247
:10906000239E019A0947FD8B639EE70A03D7E1819E
:10907000130610081377F70F6305C7066363E6024C
:109080000D46630DC70615466304C708854763028E
:10909000F70403D7C1818947E3FBE7E0239EF18012
:1090A00039B5130640086300C70613066008630657
:1090B000C70613062008E31EC7FC37474040034796
:1090C000670A0D8B05466313C70098A203D7C181B9
:1090D0008DB3B747404083C7370A8D8B6393E70052
:1090E0009CA2B747404083C7270A05478D8B6393EF
:1090F000E7009CA203D7C181894725BB3747404081
:109100000347B70A7DBF374740400347E70A55BFCB
:10911000374740400347370B6DB737474040034759
:10912000670B45B783C72182FD8B81CB83D7C18174
:10913000E37BF7BA239EE1807DB683C75181858B9F
:10914000F5D798A2E5B783D7C18189EBB7474040EF
:10915000239E07081947238FE708E1B6B747404029
:10916000194799BBA38F040883D7C40783C72182FB
:1091700093F7070689C7239E018083C7318283D76F
:10918000C181E39007BAD9B703D70408A384E18269
:109190000547A385E18283C7340A93F7C70FA381EC
:1091A000F40A83C7340A93F7F707A381F40AA5BC2E
:1091B00083C7740A054793C74700A383F40A03D5FE
:1091C00044081375F50F2384A1822385E182EFF013
:1091D0009F9883C7740A93F7F707A383F40A83C79A
:1091E000740A93E72700A383F40A35BC83C7340BC2
:1091F00093F7F707A389F40A3DB40947638AE71098
:10920000636AF70A639F070C83D7C18181E7994797
:10921000A38FF40883C7218293F70706BDEB83C7AA
:109220003182954613F7F70F6380D70A9947631584
:10923000F70A03D7C1819307F0031304000463E620
:10924000E70003D4C1814204418083A44182228685
:10925000A6851385C19BEFF06FF383D7C181A294DC
:1092600023A29182818FC207C183239EF180B747D9
:109270004040239E870803C7E70913474700238F11
:10928000E70803C7E7091377C70F13672700238F82
:10929000E70883C7D182E207E18763D40700EFF0D4
:1092A000CFF5374740408347E70993F7F707230F88
:1092B000F70895BA0D47E398E79683C7A40A93F792
:1092C000F7072385F40A85B283C7A1813747404059
:1092D00093F7F70F3CB375BFB7474040239E07088D
:1092E0004DBF2390040A83C7240A93C747002381F4
:1092F000F40A2386018283C7240A93F7C70F2381C8
:10930000F40A83C7240A93F7F7072381F40A21BAE2
:1093100083D7440A83C7640A93C747002383F40AA8
:1093200083C7640A93F7C70F2383F40A83C7640AC9
:1093300093F7F7072383F40AFDB09C2493F70704FF
:1093400089C7930700049CA4F9B893F7260095C732
:1093500089479CA4B824098B11CB03C7518113679B
:109360002700A38AE18083C7518175B803C7518163
:109370001377D70FA38AE1807DB093F7160099CFBA
:10938000A38D0180238D0180A38A0180238A01801F
:10939000A3810400EFF08FF1854775B794A46FF0B7
:1093A0009F88EFF2AFDB9387C19F80339C23130725
:1093B00020086383E708636DF70013070008638ADA
:1093C000E702130710086382E70205456FF04FDBE1
:1093D00013073008E39BE7FEA38701820547238735
:1093E000E182EFF02F8A0945D5B7EFF00F890145EB
:1093F000F1BFEFF08F88B784002083A7C40733073D
:10940000F4001356C70093D6C7006315D6008566CF
:109410006397D7007D758565798DEFF06FB403A5EF
:10942000C4072286938501A0EFF02FBB83A7C40752
:10943000A29723AEF40665BFB784002003A5840776
:109440002286938501A0EFF02FC083A784071375B0
:10945000F50FA29723ACF40695BFEFF22FD02A8424
:109460003705820085450505EF00C0718D4537053C
:1094700008006D238145370504004D23EF0070126D
:109480002285EF00D00A6FF0AFCF37A74040834767
:109490005780858BEDDF034507808280EFF26FCA2E
:1094A000ED37930770056313F508C5379307B00AC6
:1094B000631EF506D93F938AC19F2A892380AA009B
:1094C000E9373304A9001374F40F2A8AA380AA0091
:1094D0006D3FB307850093F4F70F2381AA0075371A
:1094E00033049500A381AA001379D90F93070008CC
:1094F0001374F40F6318F9009389C19F014985091A
:1095000063182A03593763138502613D8947630F46
:10951000F500B7A7404003C7578023800780054761
:109520006312E50203C757802380A7806FF0AFC4A2
:10953000A93F2A940509A381A9001374F40F137994
:10954000F90F75BF03C7578023800780C5B7EFF2B7
:10955000EFC0373500201305C5C7EF00507237E460
:1095600000E09164232094105145EF00100DB707DF
:1095700040401387471514433706F8FF7D1693E6DE
:10958000060414C3144393057005F18E14C38CA311
:10959000130680FA90A3010013874714144393E63F
:1095A000060814C3238007008CA390A30100144372
:1095B0003706E0FF7D16F18E14C3238007002320B9
:1095C00094206FF0EFBBEFF2CFB741114528EF00C9
:1095D00050001305800CEF00500637D50700EF0050
:1095E000300983A5818037350020130585C8EF0039
:1095F000D0666800EFE0BFF0B245373500201305B4
:1096000085C9EF00906537350020130585CAEF0046
:1096100010673704404078309307A00A6314F700BE
:109620003D3701A085450965D52E1304440A1C4029
:109630000967F98F99E3213F01A0716513050520A2
:10964000293D37A94040B704404009648347598009
:10965000858B91C3A13583C7E18291CBB707404089
:109660001307A0FAF8B385450545F12B01A09387B0
:10967000440A9C43E18FF9FBD93D01A0B707404064
:109680009386471498421377070819CF9387471595
:109690009C4337070800F98FBDCBB7877D019387BF
:1096A000078423A4F18082809C421307000293F771
:1096B0000706638DE702B7373101938707D0370775
:1096C000404003274714B1662166758F630FC702B8
:1096D0006363E6020DC791666307D7023707404010
:1096E000183711830507B3D7E70265BFB7877D0138
:1096F00093870784E9B7E313D7FE3D4711A061477D
:10970000B387E702E1BF5147E5BF9207C1BFB73753
:109710003101938707D071B7EFF2AFA203A7818021
:10972000B78793039387F76F63F9E714B707404050
:109730001307700598A3130780FA98A30100938676
:109740004714984237062000518F98C23704404092
:1097500023800700253793044415A52D9C4081459F
:109760001305000893E707049CC039231305300252
:10977000512DB7674040938707089843B70600808C
:109780003145558F98C39843B70600C0FD16758FB5
:1097900098C39843B706004093097005558F98C346
:1097A0009525854513050008C1299C403707F8FF1A
:1097B0007D17F98F9CC023003401130980FA230020
:1097C00024010100930444149C4093E707089CC0C3
:1097D00023000400230034012300240101009C40E5
:1097E0003707C0FF7D17F98F9CC02300040079352F
:1097F000CD23E52623003401230024010100930733
:1098000040031CB42300040023003401230024017E
:1098100001009C4051777D17F98F9CC09C409CC0F3
:1098200023000400230034012300240101009C4094
:1098300093F7F7F99CC09C4093E707069CC0230070
:109840000400230034012300240101009C40370759
:10985000400013053002D98F9CC0230004005D2313
:10986000230034012300240101009C4093F7F7F703
:109870009CC0230004006FF00F90B707404013070F
:10988000700598A3130780FA98A301001386471464
:109890001842B706E0FFFD16758F18C245BD01A03E
:1098A00097710000938181FD17E10000130181751C
:1098B000171500001305455F9765000093858574B3
:1098C0001386418163FAC5008322050023A0550059
:1098D00011059105E3EAC5FE138541819385C1A376
:1098E0006377B500232005001105E36DB5FEFD4249
:1098F000739002BC8D427390428089629382828809
:109900007390023097E2FFFF9382427093E232003D
:1099100073905230972201E09382C26E93D222005C
:109920007390023B972201E09382C26D93D2220092
:109930007390123BC142739032BCAD62938202D0ED
:109940007390023A9142739002BDB70200038902FC
:1099500073B022BCEFF05FDC970200009382E2C696
:109960007390123473002030914763EFB702B7371A
:109970000020938707D68A05BE959841B7074040D7
:1099800093874709028794431345F5FF3707404003
:10999000E98E94C3930607099C42E98F9CC2930702
:1099A00007089843798D88C3828090439346F5FFDA
:1099B00037074040758E90C3130607091C42C98FB4
:1099C0001CC2930707089843F98E94C3828094437E
:1099D00037074040C98E94C3930607099C4213453C
:1099E000F5FF65BF9843498F98C3B70740409387F9
:1099F00007089843498F98C38280B70740409386F1
:109A000007089842498F98C29386070998421345E0
:109A1000F5FF93874709698F98C261B7914763EF54
:109A2000B702B7370020938747D78A05BE9598417C
:109A3000B70740409387470B028794431345F5FFD0
:109A400037074040E98E94C39306070B9C42E98F89
:109A50009CC29307070A9843798D88C382809043FC
:109A60009346F5FF37074040758E90C31306070BEA
:109A70001C42C98F1CC29307070A9843F98E94C3EE
:109A80008280944337074040C98E94C39306070BE6
:109A90009C421345F5FF65BF9843498F98C3B707AC
:109AA00040409387070A9843498F98C38280B7073D
:109AB00040409386070A9842498F98C29386070BC5
:109AC00098421345F5FF9387470B698F98C261B79A
:109AD000914763EFB702B7370020938787D88A058D
:109AE000BE959841B70740409387470D028794433E
:109AF0001345F5FF37074040E98E94C39306070DE1
:109B00009C42E98F9CC29307070C9843798D88C3C8
:109B1000828090439346F5FF37074040758E90C38F
:109B20001306070D1C42C98F1CC29307070C9843EC
:109B3000F98E94C38280944337074040C98E94C302
:109B40009306070D9C421345F5FF65BF9843498F67
:109B500098C3B70740409387070C9843498F98C331
:109B60008280B70740409386070C9842498F98C27D
:109B70009386070D98421345F5FF9387470D698F2C
:109B800098C261B7B7074040138707141043635565
:109B90000500938707169043135705013D8BFD572A
:109BA000B397E7009356450193C7F7FFFD8A3397B4
:109BB000D7001347F7FF718F05466396C500E98FFD
:109BC000B397D7005D8FB70740406355050023A0CA
:109BD000E716828023A0E7148280EFE23FD841118C
:109BE0006800EFE0DF91B24737074156130787500F
:109BF00093F7F7F0638BE700370743561307875057
:109C00006383E70241016FE0BFD789457D55C935C0
:109C1000894537054000193537C5F1FF89451305DA
:109C2000F5679933C5B73705F0FF89457D154D3583
:109C30003705F1FF89451305F50BCD337975894556
:109C40001305F577F9BFB7074040FC2385476391BB
:109C5000F502B70740401307700598A3130780FA71
:109C60001365050498A30100E8A323800700828000
:109C70001345F5FF3D89F1BFB70740401307700555
:109C800098A3130780FA98A301000547639AE5009B
:109C9000F827498FF8A7B707404023800700828044
:109CA000F8271345F5FF698FF5B7EFE2BFC883A426
:109CB0008180A5ED86049180939714002A8463E641
:109CC000A706135C15002A8B814A26850549014A9F
:109CD0008549930BF007228681468145EF00303994
:109CE000AA8799E16374AC00B307F44013D7F74136
:109CF000636657016397EA0063F56701CA893E8B83
:109D0000BA8A9307190063147901630C0A0033D5EA
:109D1000F40233B727013E893A9A93171500E3FC02
:109D200087FA238831836FE07FC48549DDBFEFE286
:109D3000FFC281452A84953F83C7018303A58180A3
:109D400025473355F502A9473305F50285470D81AF
:109D50003355850215056378A7002946814681455C
:109D6000EF008076AA8737A740408346378093E686
:109D70000608A301D78083C60183A303D78093D6A7
:109D8000870093F6F60FA300D78093F7F70F230011
:109D9000F7808347378093F7F707A301F7806FE0D9
:109DA0003FBEEFE2BFBB7165130505204937B7A77A
:109DB0004040130770FC2381E7800D47A381E780B3
:109DC00013070004A380E78011472382E7806FE038
:109DD0003FBB37F700E01C4393E747001CC383A752
:109DE000818037470F0013070724B3D7E702238C7E
:109DF000F1821307803E93F7F70FB387E70223AA98
:109E0000F1828280B7F700E0D8438146799BD8C3BE
:109E100003C781833306A702014790CBD4CB814689
:109E200094C7D8C798431367170298C3D843058BC4
:109E300075DF9843799B98C38280B7F700E0D843D9
:109E40008146799BD8C303A741833306E5020147C6
:109E500090CBD4CB814694C7D8C7984313671702D9
:109E600098C3D843058B75DF9843799B98C382804C
:109E7000EFE2DFAE83A78180514429463304F40228
:109E80008146814511803354A4022285352D2A89CB
:109E9000AA842946814622858145EF00501D81E52F
:109EA000914763F4A70093041900B7D74040130704
:109EB00000F8B8B30547F8B313D784001377F70F4A
:109EC00098B393F4F40F84A30D47B8B3130770FC51
:109ED000B8A31307000498B3B70740409386470B15
:109EE00098429387070A1377F7EF98C2984313674E
:109EF000072098C36FE0DFA832858147B7D640407E
:109F000063C3A7008280D832137707026DDF3387DF
:109F1000F5001823850798A2E5B7732510348280D1
:109F2000732520348280732530348280011106CE5F
:109F30002EC60DCD1841AA8705C358417D5511CBBA
:109F40008546631BD70098472300070023A207001C
:109F50000545F240056182809847B24614A39847B0
:109F6000050798C7D8437D17D8C3DDB705466C00F1
:109F70006137F9BF797122D426D24ECE52CC56CA5F
:109F800006D64AD05AC82A8AAE8A328481449309B6
:109F9000000263440602B3879A00838707009DE3AB
:109FA00063D6840263D2E402198C93F726009309E6
:109FB000000281C719E393090003858A01499DE6E0
:109FC000228929A88504C1BF058CC5B70144F1BF0A
:109FD000CE8552853AC6993F32477D19E34A20FF24
:109FE00022896353040001493304244163CBE40212
:109FF000CA84B3872441D697838507009DED2289C3
:10A000006341200563530400014433059400B250BA
:10A01000225492540259F249624AD24A424B456153
:10A020008280B3049740268B9305000352857D1BE5
:10A03000F53DE31B0BFE269965BF5285C53D8504A2
:10A040004DBFCE855285DD357D195DBF5D71A6C2E0
:10A0500052DC86C6A2C4CAC04EDE56DABA843E8A34
:10A0600095E1930700030147D28626862C08FC84DD
:10A070001137B640264496440649F259625AD25ADC
:10A08000616182802A893684C68A91CAA9470144BF
:10A090006317F60063D50500B305B0400544A30778
:10A0A00001029307F102A546130568FC33F7C502C8
:10A0B00063D3E6002A9713070703A38FE7FE93896C
:10A0C000F7FF33D7C50263F7C50401CCB9C41377D2
:10A0D0002A0021C79305D0024A8542C6813D3248F5
:10A0E000FD1493774A0099CF930710069305000358
:10A0F0004A85631CF8021D3D930580074A853D355E
:10A100000904F9145687D2862686CE854A859D3560
:10A11000229585B7BA85CE8751BF1307D002A38F8A
:10A12000E9FE01449389E7FF6DBF0935930580057A
:10A13000F1B7014582800145828039715AD0373BA1
:10A14000002022DC26DA4AD84ED652D456D25ECE31
:10A1500062CC06DE66CAAA892E893284014A81440D
:10A16000930B5002930AB002294C130BCBD98305F1
:10A1700009008DE56386090081454E85EFF01FDB00
:10A18000F250625426854259D254B259225A925AF8
:10A19000025BF24B624CD24C216182806388750174
:10A1A0004E85EFF0BFD885040509D1B783071900A4
:10A1B000930C1900639A7701930550024E85EFF0D6
:10A1C000FFD685046689CDB7D5D76387570563C8A1
:10A1D000FA00130730026384E704814705A01307E0
:10A1E000D002638AE70013070003E398E7FE930CAD
:10A1F0002900894721A0930C2900854703870C007B
:10A200006303570563C1EA0293063002630BD7026A
:10A2100066890146A54535A8930C29007DBF930C9E
:10A2200029009147E1BF9306D0026309D700930646
:10A230000003E31FD7FC93E7270031A0850C854777
:10A24000C1BF93E74700850CE1B7330686030509D4
:10A25000369603070900930607FD13F5F60FE3F69C
:10A26000A5FE9305E0029946631EB70005098146E5
:10A27000A54503070900130707FD1375F70F63F5DD
:10A28000A502368A030709009305A0066301B70AF1
:10A2900063C1E5029305C004630BB708930580060C
:10A2A0006300B70881452DA0B38686030509BA96D9
:10A2B000C9B793054007630CB7069305A007630869
:10A2C000B7061305C00681456314A700050991452B
:10A2D0000307090013050006130810066344E50090
:10A2E00013081004130570066340E50613055006B5
:10A2F0006355A71413057004634DE50293055004DC
:10A30000635DB71293063004E310D7EA1840930C4C
:10A310004400A30601005886BE8601476C0041A098
:10A32000030519008145E315E5FA090955B7050943
:10A3300095BF93063006E30BD7FC63C6E60693068B
:10A3400080056303D7028DB5930630076301D704F8
:10A3500063C8E6029306F006630ED70A9306000769
:10A3600093E74700E312D7E4D9CD1D04937584FF2A
:10A37000C288138485003E880147B287C1463DA844
:10A38000930650076300D706930680075DBF184009
:10A39000930C4400DA8511C3BA855287BE864E8578
:10A3A000EFF05FBD2DA895C11D04937584FFC28891
:10A3B000138485003E880547B287A946D0418C4169
:10A3C0004E85EFF01FD7AA94C5B3930C4400D288F2
:10A3D0003287854629460C404E85EFF03FC7AA9448
:10A3E0006684D9B399C91D04937584FFC288138408
:10A3F00085003E880147B287C9B7930C4400D288D4
:10A4000032878146C1BF3287930C4400D28881468F
:10A410004146D1B781CD1D04937584FFC288138452
:10A4200085003E880147B287A14649BF3287930C19
:10A430004400D2888146214679BF1D04937584FF6C
:10A44000138485003287D0418C41C2884E853E8876
:10A45000B687A946EFF03FCEBDB739712ED232D4C0
:10A46000AA855010014506CE36D63AD83EDA42DCEF
:10A4700046DE32C6EFF07FCCF240216182800111CE
:10A4800022CC26CA06CE1C21AA840144DC8783077D
:10A49000F100050499EFA9479305F1000546014530
:10A4A000DC87EFF07FA52285F2406244D24405614B
:10A4B000828005469305F1000145EFF0FFA3B387C5
:10A4C00084009C23DC87E1B73288AA882E87DDEAE6
:10A4D00063F1C510C167636DF618B7070001B337A4
:10A4E000F600B307F040E19BE1073353F6009716FF
:10A4F00000009386668B9A96942213030002B69707
:10A50000B306F340630BF3003397D500B357F50060
:10A510003318D6005D8FB318D50013560801335594
:10A52000C70293160801C18293D708013377C70287
:10A53000B385A6024207D98F63FAB700C297130703
:10A54000F5FF63E4070163EDB7303A858D8F33D7AC
:10A55000C702C20893D80801B3F7C702B386E60260
:10A56000C207B3E8F80063FBD800C2989307F7FF6F
:10A5700063E50801791763E3D8003E874205598DEA
:10A580008145828063F5D500814501458280C167A0
:10A5900063E7F618B7070001B3B7F600B307F0405A
:10A5A000E19BE10733D8F600170700001307C77FC8
:10A5B00042971823930800023E973388E84063943B
:10A5C000E81863E1B6283335C50013451500814509
:10A5D00082804DC6C167637FF62413370610134788
:10A5E00017000E07B356E600970700009387C77B56
:10A5F000B6979C2393060002BA97B38EF640639EEB
:10A60000F608B387C5409356060142064182854548
:10A6100033D5D70213D70801B3F7D7023303C502E6
:10A62000C207D98F63FA6700C2971307F5FF63E487
:10A63000070163E467223A85B387674033D7D702BF
:10A64000C20893D80801B3F7D7023306C702C2077E
:10A65000B3E8F80063FBC800C2989307F7FF63E50F
:10A660000801791763E3C8003E874205598D82804F
:10A670009337061093C717008E0785BD814697074D
:10A68000000093876772B6979C23014793060002E8
:10A69000BA97B38EF640E386F6F63318D60133D375
:10A6A000F50093560801335ED30213160801B395E3
:10A6B000D5014182B357F500CD8F13D70701B318E9
:10A6C000D5013373D302B305C60342033367670072
:10A6D000637BB70042971305FEFF636C0717637A2D
:10A6E000B716791E42970D8F3355D702C207C18323
:10A6F0003377D7023303A6024207D98F63FB670083
:10A70000C2971307F5FF63E2071563F06714791525
:10A71000C29793150E01B3876740C98DD5BD93B716
:10A72000061093C717008E0733D8F60017070000EE
:10A730001307876742971823930800023E973388D0
:10A74000E840E380E8E8335EE600B3960601336E46
:10A75000DE00B3D8E500935E0E01B3D7D803131320
:10A760000E01B3950501135303013357E5004D8FD7
:10A770009356070133160601B3F8D803B305F30265
:10A78000C208B3E6160163FBB600F2969388F7FFA2
:10A7900063E3C60D63F1B60CF917F2968D8EB3D54F
:10A7A000D60342074183B3F6D603B308B302C20609
:10A7B000558F637B170172979386F5FF6369C7090D
:10A7C00063771709F9157297C207C16ECD8F93860B
:10A7D000FEFFB3F5D70013D30701F18E4182338E0C
:10A7E000D50233071741B306D30293580E01B38540
:10A7F000C502B695C6953303C30263F3D5007693BD
:10A8000093D605019A966363D7026305D7003E8508
:10A8100081458280C166FD1633F7D5004207337E3D
:10A82000DE00331505017297E373E5FE1385F7FF2C
:10A8300081458280B70700016377F60293560601CF
:10A8400041475DB38145054582803A85D9B5B685D6
:10A85000A5BF2A8E49BDC68791B77915C297E9BBB6
:10A860007915C297E5B1935686016147B5BB328829
:10A87000AA882E832E87D5E663F1C510C16763636E
:10A88000F618B7070001B337F600B307F040E19BB5
:10A89000E1073353F600970600009386E6509A9638
:10A8A000942213030002B697B306F340630BF30040
:10A8B0003397D500B357F5003318D6005D8FB31822
:10A8C000D500935508013356B702131308011353EB
:10A8D000030193D708013377B702330666024207B4
:10A8E000D98F63F7C700C29763E4070163E3C730FA
:10A8F000918F33D7B702139508014181B3F7B7029F
:10A9000033076702C2075D8D6378E5004295636592
:10A9100005016373E5004295198D3355D5008145D6
:10A92000828063F3D5008280C16763EAF616B707B9
:10A930000001B3B7F600B307F040E19BE10733D85D
:10A94000F600170700001307274642971823130E37
:10A9500000023E973308EE406317EE1663E4B6003C
:10A96000636AC500B308C540B386D54033331501CB
:10A970003383664046859A85828059CAC167637E63
:10A98000F62413370610134717000E07B356E600D8
:10A990009707000093874741B6979C231303000253
:10A9A000BA97B306F3406314F3083387C5401353D3
:10A9B000060142064182B355670293D708013377F7
:10A9C0006702B385C5024207D98F63F8B700C29703
:10A9D00063E5070163F3B700C2978D8F33D7670232
:10A9E000C20893D80801B3F767023307C70213956B
:10A9F000070133E5A800E36BE5F0198D3355D50069
:10AA0000814582809337061093C717008E0751B592
:10AA100081469707000093872739B6979C23014703
:10AA200013030002BA97B306F340E300F3F83318B8
:10AA3000D60033DEF50013530801B35E6E02131621
:10AA40000801B395D5003357F50041824D8F9357D8
:10AA50000701B318D500337E6E02B385CE02420ED5
:10AA6000B3E7C70163F8B700C29763E5070163F373
:10AA7000B700C2978D8FB3D5670242074183B3F702
:10AA80006702B385C502C2075D8F6378B70042973E
:10AA9000636507016373B70042970D8F29BF93B7B2
:10AAA000061093C717008E0733D8F600170700006B
:10AAB0001307872F42971823130E00023E9733087F
:10AAC000EE40E30DEEE8B3960601B358E600B3E8B6
:10AAD000D80033DEE50013DF0801B357EE03939E81
:10AAE000080193DE0E01B356E50033130501B3955B
:10AAF0000501D58D93D6050133160601337EEE038D
:10AB00003385FE02420EB3E6C60163FBA600C6967D
:10AB1000138EF7FF63ED160D63FBA60CF917C696AF
:10AB2000898E33D5E603C205C181B3F6E603B38E41
:10AB3000AE02C206D58D63FBD501C6959306F5FF1F
:10AB400063E5150B63F3D50B7915C695939607014D
:10AB5000C162C98E1385F2FF33FEA600935F060122
:10AB6000C182718D330FAE02B385D5413385A60204
:10AB700093570F01330EFE032A9EF297B386F60316
:10AB800063F3A7009696C16EFD1E33F5D70113DE61
:10AB900007014205337FDF01B307DE007A9563E5E5
:10ABA000F5026381F5023305A3403333A3009D8D85
:10ABB000B38565403397E50033550501598DB3D50D
:10ABC00005018280E371A3FE3306C5403335C5001D
:10ABD000AA98B38717413285F9B7B7070001637C9C
:10ABE000F60093560601414765B3368585B7F2876F
:10ABF00005BFC297F5B993568601614751BB000066
:10AC0000626F6F74206D6570633A25780A000000EA
:10AC1000626F6F74206D63617573653A25780A0001
:10AC2000626F6F74206D7476616C3A25780A00004B
:10AC30005C100020500E0020AE0E00200A0F0020F5
:10AC4000AE0E0020180E00203A0C0020AE0E0020A0
:10AC5000260E00203C0E002056100020E60C00209E
:10AC60005C0C00206C0C0020480D0020700D0020B2
:10AC7000700D0020960D0020A00D00204A756D700B
:10AC8000204150500D00000053797374656D436C82
:10AC90006B3A25640D0A00004368697049443A25FF
:10ACA0003038780D0A0000004941500D00000000C6
:10ACB0000A060002FFFFFF400100000016033000FB
:10ACC00031003200330034003500360037003800E0
:10ACD00039000000260357004300480020005500BB
:10ACE0005300420032002E00300020004400450096
:10ACF0005600490043004500200000000E03770085
:10AD0000630068002E0063006E000000090220004E
:10AD100001010080320904000002FF805500070590
:10AD200082024000000705020240000009022000E4
:10AD300001010080320904000002FF805500070570
:10AD400082024000000705020240000012011001CB
:10AD5000FF8055404843E05500010000000100001D
:10AD600086190020AA190020CE190020FA19002007
:10AD7000E41900203A1A00205E1A0020821A0020EE
:10AD8000AE1A0020981A0020EE1A0020121B002094
:10AD9000361B0020621B00204C1B0020286E756CA7
:10ADA0006C290000000102020303030304040404ED
:10ADB0000404040405050505050505050505050547
:10ADC0000505050506060606060606060606060627
:10ADD0000606060606060606060606060606060613
:10ADE00006060606070707070707070707070707F7
:10ADF00007070707070707070707070707070707E3
:10AE000007070707070707070707070707070707D2
:10AE100007070707070707070707070707070707C2
:10AE200007070707080808080808080808080808A6
:10AE30000808080808080808080808080808080892
:10AE40000808080808080808080808080808080882
:10AE50000808080808080808080808080808080872
:10AE60000808080808080808080808080808080862
:10AE70000808080808080808080808080808080852
:10AE80000808080808080808080808080808080842
:10AE90000808080808080808080808080808080832
:10AEA00008080808000000000000000000AAAAAA84
:10AEB000AAAAAAAAAAEEEEEEEEEEEEEEEEFEFFFFD4
:10AEC000FFFFFFFFFFFFFFFFFF7FBFDFEFF7FBFD90
:10AED000FC7EBFDFEFF7FBFD7E00000009070000EE
:10AEE0000000000000000000000000000000000062
:10AEF0000000000000000000000000000907000042
:10AF00000000000000000000000000000000000041
:10AF10000000000000000000000000000010000021
:10AF200000100000000E27070000000004030904C1
:00000001FF

View File

@@ -38,9 +38,9 @@ MEMORY
RAM (xrw) : ORIGIN = 0x20000000 , LENGTH = 64K RAM (xrw) : ORIGIN = 0x20000000 , LENGTH = 64K
*/ */
FLASH (rx) : ORIGIN = 0x00000000 , LENGTH = 80K FLASH (rx) : ORIGIN = 0x20000000 , LENGTH = 32K
FLASH1 (rx) : ORIGIN = 0x00014000 , LENGTH = 448K - 80K FLASH1 (rx) : ORIGIN = 0x00014000 , LENGTH = 448K - 80K
RAM (xrw) : ORIGIN = 0x20000000 , LENGTH = 64K RAM (xrw) : ORIGIN = 0x20008000 , LENGTH = 32K
} }
@@ -57,7 +57,7 @@ SECTIONS
.vector : .vector :
{ {
*(.vector); KEEP(*(.vector));
_endof_Vector = .; _endof_Vector = .;
ASSERT(_endof_Vector < ORIGIN(FLASH1), "The vector must maintain in 0-wait zone"); ASSERT(_endof_Vector < ORIGIN(FLASH1), "The vector must maintain in 0-wait zone");
. = ALIGN(4); . = ALIGN(4);
@@ -80,6 +80,7 @@ SECTIONS
*(.rodata) *(.rodata)
*(.rodata*) *(.rodata*)
*(.gnu.linkonce.t.*) *(.gnu.linkonce.t.*)
*(.project_info)
. = ALIGN(4); . = ALIGN(4);
} >FLASH AT>FLASH } >FLASH AT>FLASH

View File

@@ -1,9 +1,5 @@
/* /*
* launcher_fun.c * launcher_fun.c
* Code Flash<73>ܿռ<DCBF> 0x00000000 ~ 0x00070000 448KB
* Launcher<65><72><EFBFBD><EFBFBD> 0x00000000 ~ 0x00003FFF 16KB
* APP<50><50><EFBFBD><EFBFBD> 0x00004000 ~ 0x0006FFFF 432KB
* Data Flash<73>ܿռ<DCBF> 0x00070000 ~ 0x00077FFF 32KB
* *
* Created on: Jul 28, 2025 * Created on: Jul 28, 2025
* Author: cc * Author: cc
@@ -11,13 +7,15 @@
#include "includes.h" #include "includes.h"
#include <string.h> #include <string.h>
G_SYS_FEATURE_T g_app_feature; G_SYS_FEATURE_T g_app_feature; //SPI Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
G_SYS_FEATURE_T g_mcu_app_feature; G_SYS_FEATURE_T g_mcu_app_feature; //MCU Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE_RECORD_T g_update_recode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
uint8_t g_jump_flag = 0; //<2F><>ת<EFBFBD><EFBFBD>־λ G_SYS_FEATURE_T g_update_flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
UPDATE_RECORD_T g_update_recode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
uint8_t g_jump_flag = 0; //<2F><>ת<EFBFBD><D7AA>־λ
uint32_t g_Boot_Tick = 0; //Bootʱ<74><CAB1><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>ms uint32_t g_Boot_Tick = 0; //Bootʱ<74><CAB1><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>ms
uint32_t g_Boot_Time= 0; //Bootʱ<74><CAB1> <20><>λ<EFBFBD><CEBB>ms uint32_t g_Boot_Time= 30000; //Bootʱ<74><CAB1> <20><>λ<EFBFBD><CEBB>ms
/******************************************************************************* /*******************************************************************************
* Function Name : Boot_Time_Refresh * Function Name : Boot_Time_Refresh
@@ -40,21 +38,6 @@ void Boot_Timeout_Task(void)
} }
} }
/*********************************************************************
* @fn Jump_APP
* @brief <20><>ת<EFBFBD><D7AA>APP<50><50><EFBFBD><EFBFBD>
* @param addr - APP<50><50>ʼ<EFBFBD><CABC>ַ
* @return none
*/
void Jump_APP(uint32_t addr)
{
// __asm volatile("jr %0": :"r"(addr));
__asm("li a6, 0x0E000");
__asm("jr a6");
while(1);
}
/******************************************************************************* /*******************************************************************************
* Function Name : SPI_FLASH_APP_Data_Erase * Function Name : SPI_FLASH_APP_Data_Erase
* Description : <20>ⲿFlash APP<50>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD> * Description : <20>ⲿFlash APP<50>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
@@ -64,6 +47,8 @@ void SPI_FLASH_APP_Data_Erase(void)
{ {
for(uint8_t i = 0;i < 7;i++) for(uint8_t i = 0;i < 7;i++)
{ {
WDT_Feed();
Flash_Erase_Block(i); Flash_Erase_Block(i);
} }
} }
@@ -77,6 +62,8 @@ void SPI_FLASH_Logic_File_Erase(void)
{ {
for(uint8_t i = 7;i < 16;i++) for(uint8_t i = 7;i < 16;i++)
{ {
WDT_Feed();
Flash_Erase_Block(i); Flash_Erase_Block(i);
} }
} }
@@ -130,10 +117,9 @@ void Boot_Comm_FillReplyPack(UART_t *g_rev)
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"ACKBuff ",g_rev->ackBuffer,data_len); Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"ACKBuff ",g_rev->ackBuffer,data_len);
#endif #endif
g_rev->send_data_cf(g_rev->ackBuffer,data_len);
// memset(g_rev->ackBuffer,0,USART_BUFFER_SIZE); Uartx_Add_Data_To_SendBuff(g_rev,g_rev->ackBuffer,data_len,0x01,500,50);
// g_rev->ackLen = 0x00;
} }
uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev) uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
@@ -266,9 +252,9 @@ uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
if(g_rev->deal_buff[BCOMM_FMT_PARAM] == 0x02){ if(g_rev->deal_buff[BCOMM_FMT_PARAM] == 0x02){
/*<2A><>ת<EFBFBD><D7AA>APP<50><50><EFBFBD><EFBFBD>*/ /*<2A><>ת<EFBFBD><D7AA>APP<50><50><EFBFBD><EFBFBD>*/
g_Boot_Time = 200; //<2F><>Boot<6F><74>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ת g_Boot_Time = 200;
g_Boot_Tick = SysTick_1ms; g_Boot_Tick = SysTick_1ms;
g_jump_flag = 0x01; //ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ - ȫ<>ָ<EFBFBD>λ
g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC; g_rev->ackBuffer[BCOMM_FMT_PARAM] = BCOMM_CMD_ReplySUCC;
}else { }else {
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
@@ -649,6 +635,8 @@ uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
for(uint32_t crc_addr = g_app_feature.app_start_addr; crc_addr < g_app_feature.app_end_addr;crc_addr += g_app_feature.app_crc_size) for(uint32_t crc_addr = g_app_feature.app_start_addr; crc_addr < g_app_feature.app_end_addr;crc_addr += g_app_feature.app_crc_size)
{ {
WDT_Feed();
if( g_app_feature.app_end_addr - crc_addr >= g_app_feature.app_crc_size) { if( g_app_feature.app_end_addr - crc_addr >= g_app_feature.app_crc_size) {
crc_data_len = g_app_feature.app_crc_size; crc_data_len = g_app_feature.app_crc_size;
}else { }else {
@@ -682,6 +670,7 @@ uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
g_rev->ackBuffer[BCOMM_FMT_PARAM + 3 + crcResultFlag*4] = ((crc_addr >> 8) & 0xFF); g_rev->ackBuffer[BCOMM_FMT_PARAM + 3 + crcResultFlag*4] = ((crc_addr >> 8) & 0xFF);
g_rev->ackBuffer[BCOMM_FMT_PARAM + 2 + crcResultFlag*4] = (crc_addr & 0xFF); g_rev->ackBuffer[BCOMM_FMT_PARAM + 2 + crcResultFlag*4] = (crc_addr & 0xFF);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"Flash Data:",g_read_buff,crc_data_len);
DBG_SYS_Printf("App CRC Fail ADDR:%X %X-%X",crc_addr,temp_val,temp_val_2); DBG_SYS_Printf("App CRC Fail ADDR:%X %X-%X",crc_addr,temp_val,temp_val_2);
crcResultFlag++; crcResultFlag++;
@@ -717,7 +706,6 @@ uint8_t Launcher_Uart_Upgrade_Process(UART_t *g_rev)
g_rev->ackLen = 1; g_rev->ackLen = 1;
} }
break; break;
} }
/*<2A>ظ<EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>*/ /*<2A>ظ<EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>*/
@@ -745,6 +733,7 @@ uint8_t Read_APP_Feature(void)
uint16_t crcVal = 0; uint16_t crcVal = 0;
uint8_t crcValH = 0, crcValL = 0; uint8_t crcValH = 0, crcValL = 0;
uint32_t crc_data_len = 0; uint32_t crc_data_len = 0;
uint8_t update_flag = 0;
memset(&g_app_feature,0,sizeof(G_SYS_FEATURE_T)); memset(&g_app_feature,0,sizeof(G_SYS_FEATURE_T));
memset(&g_mcu_app_feature,0,sizeof(G_SYS_FEATURE_T)); memset(&g_mcu_app_feature,0,sizeof(G_SYS_FEATURE_T));
@@ -824,7 +813,69 @@ uint8_t Read_APP_Feature(void)
return 1; return 1;
} }
/*<2A>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡMCU Flash<EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͬʱ<EFBFBD><EFBFBD>֤APP<EFBFBD>ĺϷ<EFBFBD><EFBFBD><EFBFBD>*/ /*<2A>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>Flash <EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
rev = SPIFLASH_Read_APP_Update_Flag_Info(&g_update_flag);
if(rev == 0x00)
{
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD>±<EFBFBD>־λ<D6BE>ɹ<EFBFBD>*/
if( (g_update_flag.app_start_addr != g_app_feature.app_start_addr)
|| (g_update_flag.app_end_addr != g_app_feature.app_end_addr)
|| (g_update_flag.app_crc_size != g_app_feature.app_crc_size)
|| (g_update_flag.app_crc_len != g_app_feature.app_crc_len)
)
{
update_flag = 0x01;
}
for(uint32_t i = 0;i < APP_Feature_CRC_Size; i++)
{
if( g_update_flag.app_crc[i] != g_app_feature.app_crc[i] )
{
update_flag = 0x01;
break;
}
}
if( update_flag == 0x01 )
{
/*˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8>µ<EFBFBD>APP<50><50>
* <20><>app_flag <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD>Ϊ0x05<30><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>ΪAPP <20>̼<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ÿд<C3BF><D0B4>һ<EFBFBD>Σ<EFBFBD>app_flag <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE><CEBB>1<EFBFBD><31>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><E3B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* */
g_update_flag.app_flag = 0x05;
}else {
/**/
if( (g_update_flag.app_flag != 0x00) && (g_update_flag.app_flag <= 0x05) )
{
g_update_flag.app_flag--;
update_flag = 0x02;
}
}
}else {
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD>±<EFBFBD>־λʧ<CEBB><CAA7> - Ҳ<><D2B2>Ϊ<EFBFBD><CEAA><EFBFBD>µĹ̼<C4B9>*/
update_flag = 0x01;
g_update_flag.app_flag = 0x05;
}
if( update_flag == 0x01 )
{
g_update_flag.app_start_addr = g_app_feature.app_start_addr;
g_update_flag.app_end_addr = g_app_feature.app_end_addr;
g_update_flag.app_crc_size = g_app_feature.app_crc_size;
g_update_flag.app_crc_len = g_app_feature.app_crc_len;
for(uint32_t i = 0;i < APP_Feature_CRC_Size; i++)
{
g_update_flag.app_crc[i] = g_app_feature.app_crc[i];
}
DBG_SYS_Printf("--<2D><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>APP<50>̼<EFBFBD>--");
}else if( update_flag == 0x02 ){
DBG_SYS_Printf("--APP<50>̼<EFBFBD><CCBC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d --",g_update_flag.app_flag);
}else{
DBG_SYS_Printf("--APP<50>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%x--",g_update_flag.app_flag);
}
SPIFLASH_Write_APP_Upate_Flag_Info(&g_update_flag);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡMCU Flash<73><68>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ͬʱ<CDAC><CAB1>֤APP<50>ĺϷ<C4BA><CFB7><EFBFBD>*/
rev = Read_APP_Feature_Info(0x01,&g_mcu_app_feature); rev = Read_APP_Feature_Info(0x01,&g_mcu_app_feature);
if(rev == 0x00) if(rev == 0x00)
{ {
@@ -878,35 +929,71 @@ uint8_t Read_APP_Feature(void)
DBG_SYS_Printf("APP ERROR! \r\n"); DBG_SYS_Printf("APP ERROR! \r\n");
LOG_Launcher_APP_Check_Record(0x07); LOG_Launcher_APP_Check_Record(0x07);
return 2; //У<><D0A3>ʧ<EFBFBD><CAA7>
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
} }
}else{ }else{
LOG_Launcher_APP_Check_Record(0x08); LOG_Launcher_APP_Check_Record(0x08);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
} }
}else { }else {
DBG_SYS_Printf("MCU Feature ERROR! \r\n"); DBG_SYS_Printf("MCU Feature ERROR! \r\n");
LOG_Launcher_APP_Check_Record(0x09); LOG_Launcher_APP_Check_Record(0x09);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
} }
/*<2A>ж<EFBFBD>MCU Flash<73>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ⲿSPI Flash<73>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB>*/ /*<2A>ж<EFBFBD>MCU Flash<73>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ⲿSPI Flash<73>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB>*/
if(g_app_feature.app_crc_len != g_mcu_app_feature.app_crc_len) { if(g_app_feature.app_crc_len != g_mcu_app_feature.app_crc_len) {
DBG_SYS_Printf("app_crc_len different!\r\n"); DBG_SYS_Printf("app_crc_len different!\r\n");
LOG_Launcher_APP_Check_Record(0x02); LOG_Launcher_APP_Check_Record(0x02);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
} }
if(g_app_feature.app_start_addr != g_mcu_app_feature.app_start_addr) { if(g_app_feature.app_start_addr != g_mcu_app_feature.app_start_addr) {
DBG_SYS_Printf("app_start_addr different!\r\n"); DBG_SYS_Printf("app_start_addr different!\r\n");
LOG_Launcher_APP_Check_Record(0x02); LOG_Launcher_APP_Check_Record(0x02);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
} }
if(g_app_feature.app_end_addr != g_mcu_app_feature.app_end_addr) { if(g_app_feature.app_end_addr != g_mcu_app_feature.app_end_addr) {
DBG_SYS_Printf("app_end_addr different!\r\n"); DBG_SYS_Printf("app_end_addr different!\r\n");
LOG_Launcher_APP_Check_Record(0x02); LOG_Launcher_APP_Check_Record(0x02);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
} }
for(uint16_t j = 0;j<g_app_feature.app_crc_len;j++) for(uint16_t j = 0;j<g_app_feature.app_crc_len;j++)
@@ -914,10 +1001,26 @@ uint8_t Read_APP_Feature(void)
if(g_mcu_app_feature.app_crc[j] != g_app_feature.app_crc[j]) if(g_mcu_app_feature.app_crc[j] != g_app_feature.app_crc[j])
{ {
LOG_Launcher_APP_Check_Record(0x02); LOG_Launcher_APP_Check_Record(0x02);
return 2;
if(update_flag != 0x00)
{
return 2; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}else {
return 3; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
}
} }
} }
if(update_flag != 0x00)
{
/*<2A>ⲿ<EFBFBD><EFBFBD><E6B4A2>APP <20><><EFBFBD>µı<C2B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD>
* <20><>ʵMCU Flash<73><68><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>APP<50><50><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* */
DBG_SYS_Printf("<EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD>APP <20><><EFBFBD>µı<C2B5>־λ<D6BE><CEBB><EFBFBD><EFBFBD>!!!");
g_update_flag.app_flag = App_Procedure_Ready;
SPIFLASH_Write_APP_Upate_Flag_Info(&g_update_flag);
}
/*û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ׼<><D7BC> <20><>תAPP*/ /*û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ׼<><D7BC> <20><>תAPP*/
LOG_Launcher_APP_Check_Record(0x00); LOG_Launcher_APP_Check_Record(0x00);
return 0x00; return 0x00;
@@ -935,7 +1038,11 @@ uint8_t MCU_APP_Write(void)
uint16_t crcVal = 0,crcNumIndex = 0; uint16_t crcVal = 0,crcNumIndex = 0;
uint32_t crc_data_len = 0; uint32_t crc_data_len = 0;
SPIFLASH_Read_Update_Recode(&g_update_recode); //<2F><>ȡAPPд<50><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_update_recode.mcuflash_fw_count++;
DBG_SYS_Printf("MCU Flash <20><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>"); DBG_SYS_Printf("MCU Flash <20><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD>");
rev = MCU_APP_Flash_ALLErase(); //<2F>Ȳ<EFBFBD><C8B2><EFBFBD> ȫ<><C8AB>APP<50><50><EFBFBD><EFBFBD> rev = MCU_APP_Flash_ALLErase(); //<2F>Ȳ<EFBFBD><C8B2><EFBFBD> ȫ<><C8AB>APP<50><50><EFBFBD><EFBFBD>
if(rev != 0) { if(rev != 0) {
DBG_SYS_Printf("MCU Flash <20><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD> ʧ<><CAA7>"); DBG_SYS_Printf("MCU Flash <20><><EFBFBD><EFBFBD>APP<50><50><EFBFBD><EFBFBD> ʧ<><CAA7>");
@@ -1021,7 +1128,7 @@ uint8_t MCU_APP_Write(void)
memset(g_read_buff,0,sizeof(g_read_buff)); memset(g_read_buff,0,sizeof(g_read_buff));
rev = MCU_APP_Flash_Read(g_read_buff,crc_data_len,i); rev = MCU_APP_Flash_Read(g_read_buff,crc_data_len,i);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash:", g_read_buff, crc_data_len); //Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash:", g_read_buff, crc_data_len);
crcVal = CRC16_Check(g_read_buff, crc_data_len); crcVal = CRC16_Check(g_read_buff, crc_data_len);
crcValH = crcVal >> 8; crcValH = crcVal >> 8;
@@ -1032,7 +1139,7 @@ uint8_t MCU_APP_Write(void)
if( ( g_mcu_app_feature.app_crc[crcNumIndex + 1] != crcValH ) || ( g_mcu_app_feature.app_crc[crcNumIndex] != crcValL ) ) if( ( g_mcu_app_feature.app_crc[crcNumIndex + 1] != crcValH ) || ( g_mcu_app_feature.app_crc[crcNumIndex] != crcValL ) )
{ {
DBG_SYS_Printf("Addr:%x app_crc:%x%x crcVal:%x ",i,g_mcu_app_feature.app_crc[crcNumIndex],g_mcu_app_feature.app_crc[1 + crcNumIndex],crcVal); DBG_SYS_Printf("Addr:%x app_crc:%x%x crcVal:%x ",i,g_mcu_app_feature.app_crc[crcNumIndex],g_mcu_app_feature.app_crc[1 + crcNumIndex],crcVal);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash:", g_read_buff, crc_data_len); Dbg_Print_Buff(DBG_BIT_SYS_STATUS, "MCU Flash CRC Error:", g_read_buff, crc_data_len);
if(crc_data_len > 2048) if(crc_data_len > 2048)
{ {
@@ -1051,12 +1158,23 @@ uint8_t MCU_APP_Write(void)
} }
} }
/*д<><D0B4>ʧ<EFBFBD><CAA7> - ʧ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD>һ*/
g_update_recode.mcuflash_fw_fail++;
SPIFLASH_Write_Update_Recode(&g_update_recode);
return 0x01; return 0x01;
} }
crcNumIndex += 2; crcNumIndex += 2;
} }
/*д<><D0B4><EFBFBD>ɹ<EFBFBD> - <20>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ*/
g_update_recode.mcuflash_fw_succ++;
SPIFLASH_Write_Update_Recode(&g_update_recode);
/*APP<50><50><EFBFBD>±<EFBFBD>־λ - ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>*/
g_update_flag.app_flag = App_Procedure_Ready;
SPIFLASH_Write_APP_Upate_Flag_Info(&g_update_flag);
/*4<><34>У<EFBFBD><D0A3><EFBFBD>ɹ<EFBFBD>*/ /*4<><34>У<EFBFBD><D0A3><EFBFBD>ɹ<EFBFBD>*/
DBG_SYS_Printf("MCU APP Update Succ!!"); DBG_SYS_Printf("MCU APP Update Succ!!");
LOG_Launcher_Read_App_Record(0x00); LOG_Launcher_Read_App_Record(0x00);
@@ -1090,12 +1208,10 @@ uint8_t SPIFLASH_Read_Update_Recode(UPDATE_RECORD_T *info)
memcpy((uint8_t *)info,&g_flash_buff[EEPROM_Offset_Data],read_len); memcpy((uint8_t *)info,&g_flash_buff[EEPROM_Offset_Data],read_len);
DBG_SYS_Printf("spiflash_fw_count:%d",g_mcu_dev.dev_addr); DBG_SYS_Printf("mcu flash_fw_count:%d",info->mcuflash_fw_count);
DBG_SYS_Printf("spiflash_fw_succ:%d",g_mcu_dev.dev_type); DBG_SYS_Printf("mcu flash_fw_succ:%d",info->mcuflash_fw_succ);
DBG_SYS_Printf("spiflash_fw_fail:%d",g_mcu_dev.dev_boot_ver); DBG_SYS_Printf("mcu flash_fw_fail:%d",info->mcuflash_fw_fail);
DBG_SYS_Printf("EE DevAppVer:%d",g_mcu_dev.dev_app_ver);
DBG_SYS_Printf("EE DevNameLen:%d",g_mcu_dev.dev_name_len);
DBG_SYS_Printf("EE DevName:%s",g_mcu_dev.dev_name);
return 0x00; //<2F><>ȡ<EFBFBD>ɹ<EFBFBD> return 0x00; //<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
}else { }else {
DBG_SYS_Printf("%s Check Error !",__func__); DBG_SYS_Printf("%s Check Error !",__func__);
@@ -1107,9 +1223,19 @@ uint8_t SPIFLASH_Read_Update_Recode(UPDATE_RECORD_T *info)
DBG_SYS_Printf("%s Flag Error !",__func__); DBG_SYS_Printf("%s Flag Error !",__func__);
} }
/*<2A><>ȡʧ<C8A1><CAA7> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
info->mcuflash_fw_count = 0x00;
info->mcuflash_fw_succ = 0x00;
info->mcuflash_fw_fail = 0x00;
return 0x01; //<2F><>ȡʧ<C8A1><CAA7> return 0x01; //<2F><>ȡʧ<C8A1><CAA7>
} }
/*******************************************************************************
* Function Name : SPIFLASH_Write_Update_Recode
* Description : SPI Flash д<><D0B4>APP<50><50><EFBFBD>¼<EFBFBD>¼
* Input :
*******************************************************************************/
uint8_t SPIFLASH_Write_Update_Recode(UPDATE_RECORD_T *info) uint8_t SPIFLASH_Write_Update_Recode(UPDATE_RECORD_T *info)
{ {
uint16_t save_len = UPDATE_RECORD_INFO_Size; uint16_t save_len = UPDATE_RECORD_INFO_Size;
@@ -1129,7 +1255,150 @@ uint8_t SPIFLASH_Write_Update_Recode(UPDATE_RECORD_T *info)
return 0x00; return 0x00;
} }
/*******************************************************************************
* Function Name : Read_APP_Update_Flag_Info
* Description : <20><>ȡAPP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>FLash<73><68>SRAM<41>У<EFBFBD>
* 1<><31><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD>ⲿFlash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿFlash<73>ж<EFBFBD>ȡʧ<C8A1>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ⲿSRAM<41>ж<EFBFBD>ȡ<EFBFBD><C8A1>
* 2<><32><EFBFBD>ⲿSRAMҲ<4D><D2B2>ȡʧ<C8A1><CAA7><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD>Ϊ֮ǰû<C7B0><C3BB>APP<50><50><EFBFBD>¼<EFBFBD>¼
* Para :
* flag_info - APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return <20><>
* 0x00 - <20><>ȡ<EFBFBD>ɹ<EFBFBD>
* 0x01 - <20><>ȡʧ<C8A1><CAA7>
*******************************************************************************/
uint8_t SPIFLASH_Read_APP_Update_Flag_Info(G_SYS_FEATURE_T *feature_info)
{
uint16_t crc_val = 0,crc_val2 = 0;
uint32_t temp_val = 0;
memset(g_read_buff,0,sizeof(g_read_buff));
Flash_Read(g_read_buff,APP_FEATURE_SIZE,SPIFLASH_UPDATE_FLAG_Addr);
crc_val = g_read_buff[1];
crc_val <<= 0x08;
crc_val |= g_read_buff[0];
crc_val2 = CRC16_Check(&g_read_buff[2],510);
DBG_SYS_Printf("%s Flash CRC: %x - %x",__func__,crc_val,crc_val2);
if(crc_val != crc_val2)
{
//У<><D0A3>ʧ<EFBFBD><CAA7><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>Ϊ<EFBFBD><CEAA>ȡ<EFBFBD>ⲿSRAM
memset(g_read_buff,0,sizeof(g_read_buff));
SRAM_DMA_Read_Buff(g_read_buff, APP_FEATURE_SIZE, SRAM_APP_Write_Count_Addr);
crc_val = g_read_buff[1];
crc_val <<= 0x08;
crc_val |= g_read_buff[0];
crc_val2 = CRC16_Check(&g_read_buff[2],510);
DBG_SYS_Printf("%s SRAM CRC: %x - %x",__func__,crc_val,crc_val2);
if(crc_val != crc_val2)
{
return 0x01; //<2F><>ȡʧ<C8A1><CAA7>
}
}
/*<2A><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ͨ<EFBFBD><CDA8>*/
feature_info->app_flag = g_read_buff[Feature_AppFlag];
temp_val = g_read_buff[Feature_AppStart + 3];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppStart + 2];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppStart + 1];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppStart];
feature_info->app_start_addr = temp_val;
temp_val = g_read_buff[Feature_AppEnd + 3];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppEnd + 2];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppEnd + 1];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppEnd];
feature_info->app_end_addr = temp_val;
temp_val = g_read_buff[Feature_AppCrcSize + 1];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppCrcSize];
feature_info->app_crc_size = temp_val;
temp_val = g_read_buff[Feature_AppCrcLen + 1];
temp_val <<= 8;
temp_val |= g_read_buff[Feature_AppCrcLen];
feature_info->app_crc_len = temp_val;
memcpy(feature_info->app_crc,&g_read_buff[Feature_AppFlashCrc],APP_Feature_CRC_Size);
/*У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ*/
if( ( feature_info->app_start_addr < MCU_APP_Flash_Start_Addr ) || ( feature_info->app_start_addr > MCU_APP_Data_End_Addr ) ){
DBG_SYS_Printf("%s app_start_addr:0x%x Error",__func__, feature_info->app_start_addr);
return 0x02;
}
if( ( feature_info->app_end_addr > MCU_APP_Data_End_Addr ) || ( feature_info->app_start_addr > feature_info->app_end_addr ) ){
DBG_SYS_Printf("%s app_end_addr:0x%x - 0x%x Error",__func__,feature_info->app_start_addr,feature_info->app_end_addr);
return 0x02;
}
if( feature_info->app_crc_size != MCU_APP_Flash_PageSize ){
DBG_SYS_Printf("%s app_crc_size:%#x Error",__func__,feature_info->app_crc_size);
return 0x02;
}
return 0x00; //<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
}
/*******************************************************************************
* Function Name : SPIFLASH_Write_APP_Upate_Flag_Info
* Description : д<><D0B4>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF>FLash<73><68>SRAM<41><4D>
* Para :
* flag_info - APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return <20><>
* 0x00 - д<><D0B4><EFBFBD>ɹ<EFBFBD>
* 0x01 - д<><D0B4>ʧ<EFBFBD><CAA7>
*******************************************************************************/
uint8_t SPIFLASH_Write_APP_Upate_Flag_Info(G_SYS_FEATURE_T *flag_info)
{
memset(g_read_buff,0,sizeof(g_read_buff));
g_read_buff[Feature_AppFlag] = flag_info->app_flag;
g_read_buff[Feature_AppStart] = flag_info->app_start_addr & 0xFF;
g_read_buff[Feature_AppStart + 1] = ( flag_info->app_start_addr >> 8 ) & 0xFF;
g_read_buff[Feature_AppStart + 2] = ( flag_info->app_start_addr >> 16 ) & 0xFF;
g_read_buff[Feature_AppStart + 3] = ( flag_info->app_start_addr >> 24 ) & 0xFF;
g_read_buff[Feature_AppEnd] = flag_info->app_end_addr & 0xFF;
g_read_buff[Feature_AppEnd + 1] = ( flag_info->app_end_addr >> 8 ) & 0xFF;
g_read_buff[Feature_AppEnd + 2] = ( flag_info->app_end_addr >> 16 ) & 0xFF;
g_read_buff[Feature_AppEnd + 3] = ( flag_info->app_end_addr >> 24 ) & 0xFF;
g_read_buff[Feature_AppCrcSize] = flag_info->app_crc_size & 0xFF;
g_read_buff[Feature_AppCrcSize + 1] = ( flag_info->app_crc_size >> 8 ) & 0xFF;
g_read_buff[Feature_AppCrcLen] = flag_info->app_crc_len & 0xFF;
g_read_buff[Feature_AppCrcLen + 1] = ( flag_info->app_crc_len >> 8 ) & 0xFF;
memcpy(&g_read_buff[Feature_AppFlashCrc],flag_info->app_crc,APP_Feature_CRC_Size);
flag_info->crc_check = CRC16_Check(&g_read_buff[2], 510);
g_read_buff[Feature_Check] = flag_info->crc_check & 0xFF;
g_read_buff[Feature_Check + 1] = ( flag_info->crc_check >> 8 ) & 0xFF;
/* <20><>Flash<73><68>SRAM<41>ж<EFBFBD>д<EFBFBD><D0B4>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
Flash_Write(g_read_buff,APP_FEATURE_SIZE,SPIFLASH_UPDATE_FLAG_Addr);
SRAM_DMA_Write_Buff(g_read_buff, APP_FEATURE_SIZE, SRAM_APP_Write_Count_Addr);
return 0;
}

View File

@@ -8,6 +8,7 @@
#include <stddef.h> #include <stddef.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include "watchdog.h"
volatile uint32_t SysTick_100us = 0; volatile uint32_t SysTick_100us = 0;
volatile uint32_t SysTick_1ms = 0; volatile uint32_t SysTick_1ms = 0;
@@ -65,6 +66,7 @@ void Delay_Us(uint32_t n)
for(uint32_t i=0;i<n;i++){ for(uint32_t i=0;i<n;i++){
for(uint32_t j=0;j<30;j++){ for(uint32_t j=0;j<30;j++){
__NOP(); __NOP();
WDT_Feed();
} }
} }
} }
@@ -293,6 +295,8 @@ void Dbg_Println(int DbgOptBit ,const char *fmt, ...)
va_start(ap, fmt); va_start(ap, fmt);
while (*fmt) { while (*fmt) {
WDT_Feed();
if (*fmt != '%') { if (*fmt != '%') {
__putchar__(*fmt++); __putchar__(*fmt++);
continue; continue;
@@ -354,9 +358,10 @@ void Dbg_Print_Buff(int DbgOptBit ,const char *cmd ,uint8_t *buff,uint32_t len)
printf("%8d [%6d]: %s",SysTick_Now,SysTick_Diff,cmd); printf("%8d [%6d]: %s",SysTick_Now,SysTick_Diff,cmd);
for(uint32_t i=0;i<len;i++) for(uint32_t i=0;i<len;i++)
{ {
WDT_Feed();
printf("%02X ",buff[i]); printf("%02X ",buff[i]);
} }
printf("\n\r"); printf("\r\n");
} }
#endif #endif
} }

View File

@@ -48,24 +48,25 @@ typedef enum
typedef struct { typedef struct {
uint32_t spiflash_fw_count; //<2F>ⲿflash <20>̼<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD> /* - Ŀǰ<C4BF><C7B0>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD>һ<EFBFBD>£<EFBFBD><C2A3>ⲿ<EFBFBD><E2B2BF>Flashд<68><D0B4><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>¼<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t spiflash_fw_succ; //<EFBFBD>ⲿflash <20>̼<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD> * - Launcher<65>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD>MCU Flash д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ⲿFlash<EFBFBD>а<EFBFBD><EFBFBD>˵ĵ<EFBFBD>MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>Launcher<EFBFBD>н<EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD>
uint32_t spiflash_fw_fail; //<EFBFBD>ⲿflash <20>̼<EFBFBD>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7><EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD> * - <20><><EFBFBD><EFBFBD><EFBFBD>ⲿFlash<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD> APP<50><50>Ҳ<EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>
* - <20>ݲ<EFBFBD><DDB2><EFBFBD>Ҫ<EFBFBD>ⲿFlash <20>̼<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ͳ<EFBFBD><CDB3>
uint32_t spiflash_logic_count; //<2F>ⲿflash <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD> *
uint32_t spiflash_logic_succ; //<2F>ⲿflash <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ɹ<EFBFBD><C9B9>ܴ<EFBFBD><DCB4><EFBFBD> *
uint32_t spiflash_logic_fail; //<2F>ⲿflash <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD> * */
uint32_t mcuflash_fw_count; //MCU flash <20>̼<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD> uint32_t mcuflash_fw_count; //MCU flash <20>̼<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
uint32_t mcuflash_fw_succ; //MCU flash <20>̼<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ɹ<EFBFBD><C9B9>ܴ<EFBFBD><DCB4><EFBFBD> uint32_t mcuflash_fw_succ; //MCU flash <20>̼<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ɹ<EFBFBD><C9B9>ܴ<EFBFBD><DCB4><EFBFBD>
uint32_t mcuflash_fw_fail; //MCU flash <20>̼<EFBFBD>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD> uint32_t mcuflash_fw_fail; //MCU flash <20>̼<EFBFBD>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
uint32_t mcuflash_fw_failcount; //MCU flash <20>̼<EFBFBD><CCBC><EFBFBD>ǰд<C7B0><D0B4>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>θ<EFBFBD><CEB8>¹̼<C2B9><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
}UPDATE_RECORD_T; }UPDATE_RECORD_T;
extern G_SYS_FEATURE_T g_app_feature; extern G_SYS_FEATURE_T g_app_feature; //SPI Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern G_SYS_FEATURE_T g_mcu_app_feature; extern G_SYS_FEATURE_T g_mcu_app_feature; //MCU Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern UPDATE_RECORD_T g_update_recode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ extern G_SYS_FEATURE_T g_update_flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
extern UPDATE_RECORD_T g_update_recode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
extern uint8_t g_jump_flag; //<2F><>ת<EFBFBD><D7AA>־λ extern uint8_t g_jump_flag; //<2F><>ת<EFBFBD><D7AA>־λ
extern uint32_t g_Boot_Tick; //Bootʱ<74><CAB1><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>ms extern uint32_t g_Boot_Tick; //Bootʱ<74><CAB1><EFBFBD><EFBFBD> <20><>λ<EFBFBD><CEBB>ms
@@ -78,7 +79,8 @@ uint8_t Read_APP_Feature(void);
uint8_t MCU_APP_Write(void); uint8_t MCU_APP_Write(void);
uint8_t SPIFLASH_Read_Update_Recode(UPDATE_RECORD_T *info); uint8_t SPIFLASH_Read_Update_Recode(UPDATE_RECORD_T *info);
uint8_t SPIFLASH_Write_Update_Recode(UPDATE_RECORD_T *info); uint8_t SPIFLASH_Write_Update_Recode(UPDATE_RECORD_T *info);
uint8_t SPIFLASH_Read_APP_Update_Flag_Info(G_SYS_FEATURE_T *feature_info);
uint8_t SPIFLASH_Write_APP_Upate_Flag_Info(G_SYS_FEATURE_T *flag_info);
void Jump_APP(uint32_t addr);
#endif /* MCU_DRIVER_INC_LAUNCHER_FUN_H_ */ #endif /* MCU_DRIVER_INC_LAUNCHER_FUN_H_ */

View File

@@ -9,16 +9,18 @@
#ifndef _FLASH_MEM_ADDR_H_ #ifndef _FLASH_MEM_ADDR_H_
#define _FLASH_MEM_ADDR_H_ #define _FLASH_MEM_ADDR_H_
/*APP<50><50><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ /* - APP<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* - APP Data<74><61><EFBFBD>ݴ<EFBFBD>СΪ412KByte
* */
#define SPIFLASH_APP_Start_Addr 0x00000000 #define SPIFLASH_APP_Start_Addr 0x00000000
#define SPIFLASH_APP_FEATURE_Addr 0x00000000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 512Byte #define SPIFLASH_APP_FEATURE_Addr 0x00000000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 512Byte
#define SPIFLASH_UPDATE_FLAG_Addr 0x00000200 //APP<50><50><EFBFBD>±<EFBFBD>־λ - 512Byte
#define SPIFLASH_UPDATE_RECORD_Addr 0x00000400 //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD>ַ
#define SPIFLASH_UPDATE_RECORD_Addr 0x00000200 //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD>ַ - 512Byte #define SPIFLASH_APP_Data_Start_Addr 0x00001000
#define SPIFLASH_APP_Data_End_Addr 0x0006FFFF //ʵ<><CAB5><EFBFBD><EFBFBD>SPI Flash д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַΪ0x00067FFF
#define SPIFLASH_APP_Data_Start_Addr 0x00004000
#define SPIFLASH_APP_Data_End_Addr 0x0006FFFF
#define SPIFLASH_APP_End_Addr 0x0006FFFF #define SPIFLASH_APP_End_Addr 0x0006FFFF

View File

@@ -16,16 +16,16 @@
#define APP_Flash_WriteNum 0x05 //APPд<50><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #define APP_Flash_WriteNum 0x05 //APPд<50><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define App_Procedure_Ready 0x66 //APP׼<50><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ #define App_Procedure_Ready 0x66 //APP׼<50><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
#define App_Procedure_Not_Ready 0x44 //Appδ׼<CEB4><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
//MCU Flash Address range(0x0 -- 0x6FFFF) Size(448K) //MCU Flash Address range(0x0 -- 0x6FFFF) Size(448K)
#define MCU_APP_Flash_Start_Addr 0x00007000 //MCU Flash<73><68>APP<50><50><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ #define MCU_APP_Flash_Start_Addr 0x00001000 //MCU Flash<73><68>APP<50><50><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define MCU_APP_Data_Start_Addr 0x00007000 //MCU Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ #define MCU_APP_Data_Start_Addr 0x00001000 //MCU Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define MCU_APP_Data_End_Addr 0x00027DFF //MCU Flash APP<50><50><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>ַ #define MCU_APP_Data_End_Addr 0x00067DFF //MCU Flash APP<50><50><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>ַ
#define MCU_APP_Feature_Addr 0x00027E00 //MCU Flash <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>ַ #define MCU_APP_Feature_Addr 0x00067E00 //MCU Flash <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>ַ
#define MCU_APP_Flash_End_Addr 0x00027FFF //MCU Flash<73><68>APP<50>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>ַ #define MCU_APP_Flash_End_Addr 0x00067FFF //MCU Flash<73><68>APP<50>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>ַ
#define MCU_APP_Feature_PageAddr 0x00027000 //MCU APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ҳ<EFBFBD>ĵ<EFBFBD>ַ #define MCU_APP_Feature_PageAddr 0x00067000 //MCU APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ҳ<EFBFBD>ĵ<EFBFBD>ַ
#define MCU_APP_Feature_PageOffset 0x00000E00 //MCU APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> #define MCU_APP_Feature_PageOffset 0x00000E00 //MCU APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
#define APP_FEATURE_SIZE 0x0200 //512Byte #define APP_FEATURE_SIZE 0x0200 //512Byte
@@ -91,7 +91,7 @@ typedef struct{
uint8_t dev_app_ver; //<2F>豸APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE> uint8_t dev_app_ver; //<2F>豸APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
uint8_t dev_name_len; //<2F><EFBFBD><E8B1B8><EFBFBD>Ƶij<C6B5><C4B3><EFBFBD> uint8_t dev_name_len; //<2F><EFBFBD><E8B1B8><EFBFBD>Ƶij<C6B5><C4B3><EFBFBD>
uint8_t dev_name[EEPROM_DEV_NAME_Size]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD> uint8_t dev_name[EEPROM_DEV_NAME_Size]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t dev_retain[24]; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>24Byte
}E_MCU_DEV_INFO; }E_MCU_DEV_INFO;

View File

@@ -9,6 +9,244 @@
#ifndef _SRAM_MEM_ADDR_H_ #ifndef _SRAM_MEM_ADDR_H_
#define _SRAM_MEM_ADDR_H_ #define _SRAM_MEM_ADDR_H_
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><>ʼ
***********************************************************
//SRAM<41><EFBFBD><E8B1B8>Ϣ<EFBFBD><EFBFBD><E6B4A2>ַ -
<20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ṹ -
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַΪ0x000100
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ洢<C8B4><E6B4A2><EFBFBD><EFBFBD>BUS<55><EFBFBD><E8B1B8>ϢN<CFA2><4E> <20><>ַƫ<D6B7><C6AB>0x000200*N -> SRAM_BUS_Device_List_Addr
<20>ڴ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>Ǵ洢<C7B4><E6B4A2><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><E8B1B8>ϢN<CFA2><4E> <20><>ַƫ<D6B7><C6AB>0x000200*N -> SRAM_POLL_Device_List_Addr
Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ϢN<CFA2><4E> <20><>ַƫ<D6B7><C6AB>0x000200*N -> SRAM_ACTIVE_Device_List_Addr
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><E8B1B8>ϢN<CFA2><4E>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>豸˳<E8B1B8><CBB3><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*****************************************************************************************
| | <20><>ʼ<EFBFBD><CABC>ַ | <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ |
| BUS<55><EFBFBD><E8B1B8>Ϣ | SRAM_Device_List_Start_Addr | SRAM_BUS_Device_List_Addr |
| <20><>ѯ<EFBFBD><EFBFBD><E8B1B8>Ϣ | SRAM_BUS_Device_List_Addr | SRAM_POLL_Device_List_Addr |
| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ | SRAM_POLL_Device_List_Addr | SRAM_ACTIVE_Device_List_Addr |
| <20><>ͨ<EFBFBD><EFBFBD><E8B1B8>Ϣ | SRAM_ACTIVE_Device_List_Addr| SRAM_Device_List_End_Addr |
*****************************************************************************************
* */
#define SRAM_Device_List_Size 0x00000200 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>С - <20><EFBFBD><E8B1B8>Ϣ<EFBFBD>ܴ<EFBFBD>С
#define SRAM_BUS_Device_List_Addr 0x00000000 //BUS<55><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ - 4Byte
#define SRAM_POLL_Device_List_Addr 0x00000004 //<2F><>ѯ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
#define SRAM_ACTIVE_Device_List_Addr 0x00000008 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
#define SRAM_NORMAL_Device_List_Addr 0x0000000C //<2F><>ͨ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
#define SRAM_Device_List_Start_Addr 0x00000100 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define SRAM_Device_List_End_Addr 0x00009FFF //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><><EFBFBD><EFBFBD>*/
/*<2A><EFBFBD><E8B1B8>Ϣ - LOGȫ<47><C8AB>
<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>0x00B000 - 0x00BFFF*/
#define SRAM_LOG_Device_C5IO_Relay_Status 0x0000B000 //<2F>̵<EFBFBD><CCB5><EFBFBD>״̬ - 3Byte
#define SRAM_LOG_Device_C5IO_DO_Status 0x0000B003 //DO״̬ - 1byte
#define SRAM_LOG_Device_C5IO_DI_Status 0x0000B004 //DI״̬ - 2Byte
#define SRAM_LOG_Device_C5MUSIC_Playback_Status 0x0000B006 //<2F><>Ƶ - <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬ - 1Byte
#define SRAM_LOG_Device_C5MUSIC_Volume_Status 0x0000B007 //<2F><>Ƶ - <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 1Bye
#define SRAM_LOG_Device_C5MUSIC_idx_Status 0x0000B008 //<2F><>Ƶ - <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 2Byte
#define SRAM_LOG_Device_Card_Status 0x0000B00A //<2F>忨ȡ<E5BFA8><C8A1> - 1Byte 2025-09-03 <20><>ûʹ<C3BB><CAB9>
#define SRAM_LOG_Device_Temp_Status 0x0000B00B //<2F>¿<EFBFBD><C2BF><EFBFBD> - 2Byte
/**/
#define SRAM_LOG_Device_Switch_Type 0x0000B00D //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 1Byte
#define SRAM_LOG_Device_Switch_Num 0x0000B00E //<2F><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD> - 1Byte
#define SRAM_LOG_Device_Switch1_Status 0x0000B00F //<2F><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD> 2Byte һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>2Byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_LOG_Device_Switch2_Status 0x0000B011 //<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD> 2Byte һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>2Byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_LOG_Device_Switch3_Status 0x0000B013 //<2F><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD> 2Byte һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>2Byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_LOG_RCU_Reboot_Reason 0x0000B015 //RCU<43><55><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> 2025-09-27
/*<2A><EFBFBD><E8B1B8>Ϣ - UDPȫ<50><C8AB>
<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>0x00C000 - 0x00CFFF*/
#define SRAM_UDP_Device_C5IO_Relay_Status 0x0000C000 //<2F>̵<EFBFBD><CCB5><EFBFBD>״̬ - 3Byte
#define SRAM_UDP_Device_C5IO_DO_Status 0x0000C003 //DO״̬ - 1byte
#define SRAM_UDP_Device_C5IO_DI_Status 0x0000C004 //DI״̬ - 2Byte
#define SRAM_UDP_Device_C5MUSIC_Playback_Status 0x0000C006 //<2F><>Ƶ - <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬ - 1Byte
#define SRAM_UDP_Device_C5MUSIC_Volume_Status 0x0000C007 //<2F><>Ƶ - <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 1Bye
#define SRAM_UDP_Device_C5MUSIC_idx_Status 0x0000C008 //<2F><>Ƶ - <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 2Byte
#define SRAM_UDP_Device_Card_Status 0x0000C00A //<2F>忨ȡ<E5BFA8><C8A1> - 1Byte
#define SRAM_UDP_Device_Temp_Status 0x0000C00B //<2F>¿<EFBFBD><C2BF><EFBFBD> - 2Byte
/**/
#define SRAM_UDP_Device_Switch_Type 0x0000C00D //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 1Byte
#define SRAM_UDP_Device_Switch_Num 0x0000C00E //<2F><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD> - 1Byte
#define SRAM_UDP_Device_Switch1_Status 0x0000C00F //<2F><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD> 2Byte һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>2Byte<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_UDP_ELEReport_Action 0x0000C011 //UDP ȡ<><C8A1><EFBFBD>ϱ<EFBFBD><CFB1>У<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#define SRAM_UDP_ELEReport_EleState 0x0000C012 //UDP ȡ<><C8A1><EFBFBD>ϱ<EFBFBD><CFB1>У<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>ж<EFBFBD><D0B6><EFBFBD><E8B2BB>Ҫ<EFBFBD>ϱ<EFBFBD>
#define SRAM_UDP_ELEReport_EleState_Last 0x0000C013
#define SRAM_UDP_ELEReport_CardState 0x0000C014 //UDP ȡ<><C8A1><EFBFBD>ϱ<EFBFBD><CFB1>У<EFBFBD><D0A3>忨ȡ<E5BFA8><C8A1>״̬<D7B4>ж<EFBFBD><D0B6><EFBFBD><E8B2BB>Ҫ<EFBFBD>ϱ<EFBFBD>
#define SRAM_UDP_ELEReport_CardState_Last 0x0000C015
#define SRAM_UDP_ELEReport_CardType 0x0000C016 //UDP ȡ<><C8A1><EFBFBD>ϱ<EFBFBD><CFB1>У<EFBFBD><D0A3>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><E8B2BB>Ҫ<EFBFBD>ϱ<EFBFBD>
#define SRAM_UDP_ELEReport_CardType_Last 0x0000C017
#define SRAM_UDP_ELEReport_VirtualCard 0x0000C018 //UDP ȡ<><C8A1><EFBFBD>ϱ<EFBFBD><CFB1>У<EFBFBD><D0A3>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>¼<EFBFBD><C2BC>ж<EFBFBD><D0B6><EFBFBD><E8B2BB>Ҫ<EFBFBD>ϱ<EFBFBD>
#define SRAM_UDP_ELEReport_VirtualCard_Last 0x0000C019
#define SRAM_UDP_Report_CarbonSatet 0x0000C01A //UDP <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1>У<EFBFBD>̼<EFBFBD><CCBC><EFBFBD>˵<EFBFBD>״̬
/*SRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><E4BBAF><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>0x00D000 - 0x00DFFF*/
#define SRAM_UDP_SendData_Writeaddr 0x0000D000 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ַ
#define SRAM_UDP_SendData_Readaddr 0x0000D004 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1>ַ
#define SRAM_UDP_SendData_Tempaddr 0x0000D008 //
#define SRAM_UDP_SendData_Startaddr 0x0000D010 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define SRAM_UDP_SendData_Endaddr 0x0000D7EA //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
#define SRAM_UDP_SendData_Size 0x9C //һ<>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_UDP_RecvData_Writeaddr 0x0000D800 //<2F><><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ַ
#define SRAM_UDP_RecvData_Readaddr 0x0000D804 //<2F><><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD><C8A1>ַ
#define SRAM_UDP_RecvData_Tempaddr 0x0000D808 //<2F><><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ַ
#define SRAM_UDP_RecvData_ControlNum 0x0000D80C //<2F><><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>
#define SRAM_UDP_RecvData_Startaddr 0x0000D810 //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define SRAM_UDP_RecvData_Endaddr 0x0000DFEA //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>ַ
/*<2A>ϵ<EFBFBD><CFB5>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <20><>ַ<EFBFBD><D6B7>Χ:0x0x00E100 ~ 0x00E1FF */
#define SRAM_PowerOn_Restore_StartAddr 0x0000E100
#define SRAM_PowerOn_Restore_Flag 0x0000E100
#define SRAM_PowerOn_Restore_Len 0x0000E101
#define SRAM_PowerOn_Restore_Check 0x0000E102
#define SRAM_PowerOn_Restore_Param 0x0000E103
#define SRAM_PowerOn_Restore_EndAddr 0x0000E1FF
/*Launcherʹ<72><CAB9> <20><><EFBFBD>ڼ<EFBFBD>¼Boot<6F><74><EFBFBD><EFBFBD> дMCU Flash<73><68><EFBFBD><EFBFBD> <20><>С<EFBFBD><D0A1>0x200 2025-04-28*/
#define SRAM_APP_FEATURE_2_CHECK_Addr 0x0000E600
/*<2A><>¼Launcher<65><EFBFBD><E6B1BE>Ϣ <20><>С<EFBFBD><D0A1>0x20 2025-07-07*/
#define SRAM_Launcher_SoftwareVer_Addr 0x0000E800
/*Launcherʹ<72><CAB9> <20><><EFBFBD>ڼ<EFBFBD>¼APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3> <20><>С:0x10 2026-01-14*/
#define SRAM_APP_Write_Count_Addr 0x0000E900
/**********SRAM Uart<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><>ʼ**********/
#define SRAM_Uart_Buffer_Size 0x0400 //<2F><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
#define SRAM_UART0_RecvBuffer_Start_Addr 0x00010000
#define SRAM_UART0_RecvBuffer_End_Addr 0x00010FFF
#define SRAM_UART0_SendBuffer_Start_Addr 0x00011000
#define SRAM_UART0_SendBuffer_End_Addr 0x00011FFF
#define SRAM_UART1_RecvBuffer_Start_Addr 0x00012000
#define SRAM_UART1_RecvBuffer_End_Addr 0x00012FFF
#define SRAM_UART1_SendBuffer_Start_Addr 0x00013000
#define SRAM_UART1_SendBuffer_End_Addr 0x00013FFF
#define SRAM_UART2_RecvBuffer_Start_Addr 0x00014000
#define SRAM_UART2_RecvBuffer_End_Addr 0x00014FFF
#define SRAM_UART2_SendBuffer_Start_Addr 0x00015000
#define SRAM_UART2_SendBuffer_End_Addr 0x00015FFF
#define SRAM_UART3_RecvBuffer_Start_Addr 0x00016000
#define SRAM_UART3_RecvBuffer_End_Addr 0x00016FFF
#define SRAM_UART3_SendBuffer_Start_Addr 0x00017000
#define SRAM_UART3_SendBuffer_End_Addr 0x00017FFF
/**********SRAM Uart<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><><EFBFBD><EFBFBD>**********/
/*2022.12.26 <20>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD>޸Ŀ<DEB8>ʼ -- <20><>Ҫ<EFBFBD>޸<EFBFBD> */
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>¼ 0x031400~0x031FFF 3K<33><4B>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>6<EFBFBD>ֽڣ<D6BD>һ<EFBFBD><D2BB><EFBFBD>ܹ<EFBFBD><DCB9>ܴ<EFBFBD>509<30><39><EFBFBD><EFBFBD><E8B1B8>*/
#define SRAM_DEVICE_ONLINE_STATE_WRITE_ADDR 0x00031400 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬д<CCAC><D0B4><EFBFBD><EFBFBD>ַ
#define SRAM_DEVICE_ONLINE_STATE_READ_ADDR 0x00031404 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1>ַ
#define SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR 0x00031408 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ĵ<EFBFBD>ַ<EFBFBD><D6B7>
#define SRAM_DEVICE_ONLINE_STATE_START_ADDR 0x00031410 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7>ʵ<EFBFBD>ʿ<EFBFBD>ʼд<CABC><D0B4><EFBFBD>ݵ<EFBFBD>ַ<EFBFBD><D6B7>
//#define SRAM_DEVICE_ONLINE_STATE_END_ADDR 0x00031500 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʵ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݵ<EFBFBD>ַ<EFBFBD><D6B7> - <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
#define SRAM_DEVICE_ONLINE_STATE_END_ADDR 0x00031FFE //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʵ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݵ<EFBFBD>ַ<EFBFBD><D6B7>
/*2022.12.26 <20>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD>޸Ľ<DEB8><C4BD><EFBFBD>*/
#define SRAM_CheckMap_List_Start_Addr 0x0003A800 //Ѳ<><D1B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ <20><><EFBFBD><EFBFBD> һ<><D2BB>10K
#define SRAM_CheckMap_List_End_Addr 0x0003CFFF //Ѳ<><D1B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_VCard_PortInf_Start_Addr 0x0003D000 //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> ӳ<><D3B3><EFBFBD>˿<EFBFBD><CBBF><EFBFBD>Ϣ <20><>ʼ<EFBFBD><CABC>ַ <20><><EFBFBD><EFBFBD> һ<><D2BB>2K
#define SRAM_VCard_PortInf_End_Addr 0x0003D7FF //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> ӳ<><D3B3><EFBFBD>˿<EFBFBD><CBBF><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD>
#define SRAM_VCard_ConNToS_Start_Addr 0x0003D800 //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><>ʼ<EFBFBD><CABC>ַ <20><><EFBFBD><EFBFBD> һ<><D2BB>1K
#define SRAM_VCard_ConNToS_End_Addr 0x0003DBFF //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD>
#define SRAM_VCard_ConSToN_Start_Addr 0x0003DC00 //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><>ʼ<EFBFBD><CABC>ַ <20><><EFBFBD><EFBFBD> һ<><D2BB>1K
#define SRAM_VCard_Con_End_Addr 0x0003DFFF //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD>
#define SRAM_VCard_DetectWin_Start_Addr 0x0003E000 //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><E2B4B0>״̬ <20><>ʼ<EFBFBD><CABC>ַ <20><><EFBFBD><EFBFBD> һ<><D2BB>60K
#define SRAM_VCard_DetectWin_End_Addr 0x0004CFFF //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><E2B4B0>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD>
#define SRAM_VCard_Property_Start_Addr 0x0004D000 //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD><CABC>ַ <20><><EFBFBD><EFBFBD> һ<><D2BB>1K
#define SRAM_VCard_Property_End_Addr 0x0004D3FF //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD>
/**********SRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>ַ <20><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><>ʼ**********/
#define SRAM_IAP_APP_FILE_ADDRESS 0x00050000 //SRAM<41>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<50>ļ<EFBFBD><C4BC>ĵ<EFBFBD>ַ - 218K
#define SRAM_IAP_IP_ADDRESS 0x0008E600 //SRAM<41>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>IP - 4Byte <20><>ʱ<EFBFBD><CAB1>UDP<44><50>ַ<EFBFBD><D6B7><EFBFBD>ſռ<D5BC><E4A3AC><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>UDP<44><50>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
#define SRAM_IAP_PORT_ADDRESS 0x0008E604 //SRAM<41>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>port - 2Byte <20><>ʱ<EFBFBD><CAB1>UDP<44><50>ַ<EFBFBD><D6B7><EFBFBD>ſռ<D5BC><E4A3AC><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>UDP<44><50>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
#define SRAM_IAP_NET_UPGRADE_Flag_ADDRESS 0x0008E606 //SRAM<41>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ - 1Byte
#define SRAM_IAP_UPGRADE_Reply_NUM_ADDRESS 0x0008E607 //SRAM<41>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>APP<50><50>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD> - 1Byte
/**********SRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>ַ <20><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><><EFBFBD><EFBFBD>**********/
/**********<2A><>Ŀӳ<C4BF><D3B3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><>ʼ**********/
#define SRAM_Register_Start_ADDRESS 0x0008E900
#define SRAM_Register_End_ADDRESS 0x0008EFFF
#define Register_OFFSET_LEN 0x0400 //<2F><>ǰ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ռ<D5BC><E4B3A4> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><E2B3A4>ҲӦ<D2B2>ñ仯
//<2F><>Ŀ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
#define Register_NetIP_OFFSET 0x0000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ - DHCP<43><50><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>֮<EFBFBD>󣬻<EFBFBD>DHCPʧ<50><CAA7>֮<EFBFBD><D6AE> ʹ<>õ<EFBFBD>IP<49><50>ַ - PC<50><43><EFBFBD><EFBFBD>MCUĬ<55><C4AC>IP
#define Register_NetPort_OFFSET 0x0004 //<2F><><EFBFBD><EFBFBD>ͨѶ<CDA8>˿<EFBFBD> - PC<50><43><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
#define Register_NetMask_OFFSET 0x0008 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - PC<50><43><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
#define Register_NetGateway_OFFSET 0x000C //<2F><><EFBFBD><EFBFBD> - PC<50><43><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
#define Register_DNSServerIP_OFFSET 0x0010 //DNS<4E><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ - PC<50><43><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
#define Register_NETMACKADDR_OFFSET 0x0014 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MACK<43><4B>ַ
#define Register_WebServerIP_OFFSET 0x0018 //<2F>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ - PC<50><43><EFBFBD>õ<EFBFBD><C3B5>ƶ<EFBFBD>IP<49><50>ַ
#define Register_WebServerPort_OFFSET 0x001C //<2F>ƶ˷<C6B6><CBB7><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8>˿<EFBFBD> - 2025-10-11 <20><><EFBFBD><EFBFBD>
#define Register_MandateExpiresTime_OFFSET 0x0020 //MCU<43><55>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> - <20><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
#define Register_CurrentUsageTime_OFFSET 0x0024 //MCU<43><55>ǰʱ<C7B0><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Register_MandateUTC_OFFSET 0x0028 //<2F><>Ȩʱ<C8A8><CAB1> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩʱ<C8A8>ĵ<EFBFBD>ǰUTCʱ<43><CAB1>
#define Register_MandateLock_OFFSET 0x002C //<2F><>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD>
#define Register_NetInfo_EN_OFFSET 0x0030 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܣ<EFBFBD>DHCPʹ<50><CAB9> - 1Byte<74><65><EFBFBD><EFBFBD>ʾDHCPʹ<50><CAB9> 1Byte<74>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ΪĬ<CEAA><C4AC>IP<49><50>ַ - PC<50><43><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
#define Register_NetOfflineTime_OFFSET 0x0034 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1> - 4Byte <20><>λ<EFBFBD><CEBB>ms
#define Register_ProjectCode_OFFSET 0x0038 //<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
#define Register_SoftwareVersion_OFFSET 0x003C //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE> - <20>̼<EFBFBD><CCBC><EFBFBD><E6B1BE>
#define Register_ConfigVersion_OFFSET 0x0040 //<2F><><EFBFBD>ð汾<C3B0><E6B1BE>
#define Register_RoomNumber_OFFSET 0x0044 //<2F><><EFBFBD><EFBFBD>
#define Register_HouseType_OFFSET 0x0048 //<2F><><EFBFBD><EFBFBD>
#define Register_RoomRent_OFFSET 0x004C //<2F><>̬<EFBFBD><CCAC>Ϣ - <20><><EFBFBD><EFBFBD>״̬
#define Register_SeasonStatus_OFFSET 0x0050 //<2F><><EFBFBD><EFBFBD>״̬
#define Register_TFTPStatus_OFFSET 0x0054 //TFTP<54><50>־<EFBFBD><D6BE><EFBFBD><EFBFBD> 4Byte
#define Register_TFTPUploadTime_OFFSET 0x0058 //TFTP<54><50>־<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 4Byte
#define Register_BLVServerDmLen_OFFSET 0x005C //BLV<4C><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4Byte
#define Register_BLVServerDmName_OFFSET 0x0060 //BLV<4C><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 64Byte
#define Register_UDPPeriodicTime_OFFSET 0x00A0 //UDPͨѶ <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4Byte <20><>λ:ms
#define Register_RoomNumNote_OFFSET 0x0100 //<2F><><EFBFBD>ű<EFBFBD>ע<EFBFBD><D7A2>Ϣ<EFBFBD><CFA2><EFBFBD>ŵ<EFBFBD>ַ<EFBFBD>ռ<EFBFBD> - 16Byte
#define Register_RoomTypeNote_OFFSET 0x0110 //<2F><><EFBFBD>ͱ<EFBFBD>ע<EFBFBD><D7A2>Ϣ<EFBFBD><CFA2><EFBFBD>ŵ<EFBFBD>ַ<EFBFBD>ռ<EFBFBD> - 16Byte
#define Register_RoomNote_OFFSET 0x0120 //<2F><><EFBFBD>䱸ע<E4B1B8><D7A2>Ϣ<EFBFBD><CFA2><EFBFBD>ŵ<EFBFBD>ַ<EFBFBD>ռ<EFBFBD> - 96Byte
#define Register_TFTPLOGPort_OFFSET 0x0180 //TFTP<54><50>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD> - 2Byte
#define Register_TFTPLOGTime_OFFSET 0x0182 //TFTP<54><50>־<EFBFBD>ϴ<EFBFBD>ʱ<EFBFBD><CAB1> - 2Byte
#define Register_TFTPDmLens_OFFSET 0x0184 //TFTP<54><50>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 1Byte
#define Register_TFTPDmName_OFFSET 0x0185 //TFTP<54><50>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 64Byte
/**********<2A><>Ŀӳ<C4BF><D3B3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><><EFBFBD><EFBFBD>**********/
/**********SRAM<41><4D><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>·<EFBFBD> <20><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><>ʼ**********/
#define SRAM_IAP_LOGIC_FILE_ADDRESS 0x00090000 //SRAM<41><4D><EFBFBD>߼<EFBFBD><DFBC>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
#define SRAM_IAP_LOGIC_DataFlag_ADDRESS 0x00090000 //<2F>ļ<EFBFBD><C4BC><EFBFBD>־λ - 4Byte
#define SRAM_IAP_LOGIC_DataSize_ADDRESS 0x00090004 //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> - 4Byte
#define SRAM_IAP_LOGIC_DataMD5_ADDRESS 0x00090008 //<2F>ļ<EFBFBD>MD5У<35><D0A3>ֵ - 16Byte
#define SRAM_IAP_LOGIC_DataStart_ADDRESS 0x00090200
#define SRAM_IAP_LOGIC_DataEnd_ADDRESS 0x000FFFFF
/**********SRAM<41><4D><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>·<EFBFBD> <20><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD> - <20><><EFBFBD><EFBFBD>**********/
#define SRAM_DevAction_List_Size 0x0400 //ÿ<><C3BF><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>С - <20><>ǰ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
#define SRAM_DevAction_List_Num 950
#define SRAM_DevAction_List_Start_Addr 0x00100000 //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ <20><><EFBFBD><EFBFBD> һ<><D2BB>960K
#define SRAM_DevAction_List_End_Addr 0x001EFFFF //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_BlwMap_List_Start_Addr 0x001F0000 //ӳ<><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ <20><><EFBFBD><EFBFBD> һ<><D2BB>32K
#define SRAM_BlwMap_List_End_Addr 0x001F7FFF //ӳ<><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SRAM_DevDly_List_Start_Addr 0x001F8000 //<2F><>ʱ<EFBFBD><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ һ<><D2BB>32K
#define SRAM_DevDly_List_End_Addr 0x001FFFFF //<2F><>ʱ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
/* /*
* 2025-07-29 <20>޸<EFBFBD>SRAM<41><EFBFBD><E6B4A2>ַ 0x00400000 ~ 0x007FFFFF SIZE:4MByte * 2025-07-29 <20>޸<EFBFBD>SRAM<41><EFBFBD><E6B4A2>ַ 0x00400000 ~ 0x007FFFFF SIZE:4MByte

View File

@@ -28,7 +28,7 @@
#define USART_BUFFER_SIZE 512 #define USART_BUFFER_SIZE 512
typedef void (*Uart_prt)(uint8_t * ,uint16_t ); typedef uint8_t (*Uart_prt)(uint8_t * ,uint16_t );
typedef uint8_t (*Uart_set_prt)(uint32_t ); typedef uint8_t (*Uart_set_prt)(uint32_t );
typedef enum typedef enum
@@ -80,7 +80,8 @@ typedef struct{
Uart_set_prt set_baud_cf; Uart_set_prt set_baud_cf;
}UART_t; }UART_t;
extern UART_t g_uart[UART_MAX]; extern UART_t g_uart_0;
extern UART_t g_uart_2;
void UARTx_Init(UART_IDX uart_id, uint32_t buad); void UARTx_Init(UART_IDX uart_id, uint32_t buad);
void Set_Uart_recvTimeout(UART_t *set_uart,uint32_t baud); void Set_Uart_recvTimeout(UART_t *set_uart,uint32_t baud);
@@ -95,6 +96,14 @@ uint8_t UART1_ChangeBaud(uint32_t baudrate);
uint8_t UART2_ChangeBaud(uint32_t baudrate); uint8_t UART2_ChangeBaud(uint32_t baudrate);
uint8_t UART3_ChangeBaud(uint32_t baudrate); uint8_t UART3_ChangeBaud(uint32_t baudrate);
uint8_t MCU485_SendString_0(uint8_t *buff, uint16_t len);
uint8_t MCU485_SendString_2(uint8_t *buff, uint16_t len);
uint8_t Uartx_Add_Data_To_SendBuff(UART_t *uart_info,uint8_t *buff,uint16_t len,uint8_t sendCount,uint32_t ValidDuration,uint32_t sendInterval);
uint8_t Uartx_Clear_SendBuff(UART_t *uart_info);
uint8_t Uartx_Avoid_Conflict_Send_Task(UART_t *uart_info);
void Uart0_Task(void); void Uart0_Task(void);
void Uart2_Task(void);
#endif /* MCU_DRIVER_INC_UART_H_ */ #endif /* MCU_DRIVER_INC_UART_H_ */

18
MCU_Driver/inc/watchdog.h Normal file
View File

@@ -0,0 +1,18 @@
/*
* watchdog.h
*
* Created on: Jan 9, 2026
* Author: cc
*/
#ifndef MCU_DRIVER_INC_WATCHDOG_H_
#define MCU_DRIVER_INC_WATCHDOG_H_
#include <stdint.h>
#include "ch564.h"
void WDT_Init(void);
void WDT_Feed(void);
void WDT_Reinit(void);
#endif /* MCU_DRIVER_INC_WATCHDOG_H_ */

View File

@@ -29,7 +29,6 @@ void EEPROM_Init(void)
DBG_SYS_Printf("EE Use Defalut Para"); DBG_SYS_Printf("EE Use Defalut Para");
EEPROM_Default_MCUDevInfo(&g_mcu_dev); EEPROM_Default_MCUDevInfo(&g_mcu_dev);
//DBG_SYS_Printf("EE Use Defalut Para");
DBG_SYS_Printf("EE DevBootVer:%d",g_mcu_dev.dev_boot_ver); DBG_SYS_Printf("EE DevBootVer:%d",g_mcu_dev.dev_boot_ver);
DBG_SYS_Printf("EE DevNameLen:%d",g_mcu_dev.dev_name_len); DBG_SYS_Printf("EE DevNameLen:%d",g_mcu_dev.dev_name_len);
DBG_SYS_Printf("EE DevName:%s",g_mcu_dev.dev_name); DBG_SYS_Printf("EE DevName:%s",g_mcu_dev.dev_name);
@@ -60,13 +59,13 @@ uint8_t MCU_APP_Flash_Write(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t wr
sta = FLASH_ROMA_WRITE(writeAddr, pBuffer, NumByteToWrite); sta = FLASH_ROMA_WRITE(writeAddr, pBuffer, NumByteToWrite);
FLASH_Lock(); FLASH_Lock();
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_SYS_Printf("Operation FLASH_ROMA_WRITE failed %#x!! Err Code %x\r\n", writeAddr, sta); DBG_SYS_Printf("MCU FLASH_ROMA_WRITE failed %#x!! Err Code %x\r\n", writeAddr, sta);
return 0x01; return 0x01;
} }
sta = FLASH_ROMA_VERIFY(writeAddr, pBuffer, NumByteToWrite); sta = FLASH_ROMA_VERIFY(writeAddr, pBuffer, NumByteToWrite);
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_SYS_Printf("Operation FLASH_ROMA_VERIFY failed %#x!! Err Code %x\r\n", writeAddr, sta); DBG_SYS_Printf("MCU FLASH_ROMA_VERIFY failed %#x!! Err Code %x\r\n", writeAddr, sta);
return 0x01; return 0x01;
} }
@@ -94,7 +93,7 @@ uint8_t MCU_APP_Flash_Read(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t rea
sta = FLASH_ROMA_READ(readAddr, pBuffer, NumByteToWrite); sta = FLASH_ROMA_READ(readAddr, pBuffer, NumByteToWrite);
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_Printf("Operation FLASH_ROMA_READ failed %x!! Err Code %x\r\n", readAddr, sta); DBG_Printf("MCU FLASH_ROMA_READ failed %x!! Err Code %x\r\n", readAddr, sta);
return 0x01; return 0x01;
} }
@@ -126,7 +125,7 @@ uint8_t MCU_APP_Flash_Erase(uint32_t readAddr,uint16_t NumByteToWrite)
FLASH_Lock(); FLASH_Lock();
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_Printf("Operation FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", readAddr, sta); DBG_Printf("MCU FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", readAddr, sta);
return 0x01; return 0x01;
} }
@@ -143,13 +142,13 @@ uint8_t MCU_APP_Flash_ALLErase(void)
for(uint32_t i=MCU_APP_Flash_Start_Addr;i<MCU_APP_Flash_End_Addr;i+=MCU_APP_Flash_PageSize) for(uint32_t i=MCU_APP_Flash_Start_Addr;i<MCU_APP_Flash_End_Addr;i+=MCU_APP_Flash_PageSize)
{ {
DBG_Printf("Operation FLASH_ROMA_ERASE - %x!! \r\n", i); DBG_Printf("MCU FLASH_ROMA_ERASE - %x!! \r\n", i);
FLASH_Unlock(); FLASH_Unlock();
sta = FLASH_ROMA_ERASE(i, MCU_APP_Flash_PageSize); sta = FLASH_ROMA_ERASE(i, MCU_APP_Flash_PageSize);
FLASH_Lock(); FLASH_Lock();
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_Printf("Operation FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", i, sta); DBG_Printf("MCU FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", i, sta);
return 0x01; return 0x01;
} }
} }
@@ -180,7 +179,7 @@ uint8_t MCU_EEPROM_Write(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t write
FLASH_Lock(); FLASH_Lock();
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_SYS_Printf("Operation FLASH_ROMA_WRITE failed %x!! Err Code %x\r\n", writeAddr, sta); DBG_SYS_Printf("MCU FLASH_ROMA_WRITE failed %x!! Err Code %x\r\n", writeAddr, sta);
return 0x01; return 0x01;
} }
@@ -209,7 +208,7 @@ uint8_t MCU_EEPROM_Read(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t readAd
sta = EEPROM_READ(readAddr, pBuffer, NumByteToWrite); sta = EEPROM_READ(readAddr, pBuffer, NumByteToWrite);
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_Printf("Operation FLASH_ROMA_READ failed %x!! Err Code %x\r\n", readAddr, sta); DBG_Printf("MCU FLASH_ROMA_READ failed %x!! Err Code %x\r\n", readAddr, sta);
return 0x01; return 0x01;
} }
@@ -238,7 +237,7 @@ uint8_t MCU_EEPROM_Erase(uint32_t eraseAddr,uint16_t length)
FLASH_Lock(); FLASH_Lock();
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_Printf("Operation MCU_EEPROM_Erase failed %x!! Err Code %x\r\n", eraseAddr, sta); DBG_Printf("MCU MCU_EEPROM_Erase failed %x!! Err Code %x\r\n", eraseAddr, sta);
return 0x01; return 0x01;
} }
@@ -260,7 +259,7 @@ uint8_t MCU_EEPROM_ALLErase(void)
FLASH_Lock(); FLASH_Lock();
if (sta != FLASH_COMPLETE){ if (sta != FLASH_COMPLETE){
DBG_Printf("Operation FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", i, sta); DBG_Printf("MCU FLASH_ROMA_ERASE failed %x!! Err Code %x\r\n", i, sta);
return 0x01; return 0x01;
} }
} }
@@ -296,17 +295,9 @@ uint8_t EEPROM_ReadMCUDevInfo(E_MCU_DEV_INFO *info)
DBG_SYS_Printf("EEPROM_READ : %x ",read_addr); DBG_SYS_Printf("EEPROM_READ : %x ",read_addr);
DBG_Printf("EEPROM_READ 1\r\n");
FLASH_Unlock();
EEPROM_ERASE(read_addr , 0x1000);
FLASH_Lock();
DBG_Printf("EEPROM_READ 2\r\n");
EEPROM_READ(read_addr,g_read_buff,1024); EEPROM_READ(read_addr,g_read_buff,1024);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"Dev Info:",g_read_buff,4);
if(g_read_buff[0] == EEPROM_SVAE_FLAG){ if(g_read_buff[0] == EEPROM_SVAE_FLAG){
read_len = g_read_buff[2]; read_len = g_read_buff[2];
@@ -314,6 +305,7 @@ uint8_t EEPROM_ReadMCUDevInfo(E_MCU_DEV_INFO *info)
read_len |= g_read_buff[1]; read_len |= g_read_buff[1];
DBG_SYS_Printf("read_len : %d ",read_len); DBG_SYS_Printf("read_len : %d ",read_len);
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"Dev Info:",g_read_buff,4);
if(read_len <= EEPROM_DATA_Size_Max){ if(read_len <= EEPROM_DATA_Size_Max){
DBG_SYS_Printf("read_para %0x%x\r\n",MCU_EEPROM_MCUDevInfo_Address); DBG_SYS_Printf("read_para %0x%x\r\n",MCU_EEPROM_MCUDevInfo_Address);
@@ -336,6 +328,8 @@ uint8_t EEPROM_ReadMCUDevInfo(E_MCU_DEV_INFO *info)
return 0x00; return 0x00;
} }
} }
}else {
DBG_SYS_Printf("read_len : %d ",read_len);
} }
return 0x01; return 0x01;
@@ -395,7 +389,7 @@ void EEPROM_Default_MCUDevInfo(E_MCU_DEV_INFO *info)
memset((char *)info->dev_name,0,EEPROM_DEV_NAME_Size); memset((char *)info->dev_name,0,EEPROM_DEV_NAME_Size);
memcpy((char *)info->dev_name,(char *)Peoject_Name,info->dev_name_len); memcpy((char *)info->dev_name,(char *)Peoject_Name,info->dev_name_len);
EEPROM_WriteMCUDevInfo(info); //EEPROM_WriteMCUDevInfo(info);
#endif #endif
} }
@@ -472,6 +466,8 @@ uint8_t Read_APP_Feature_Info(uint8_t option,G_SYS_FEATURE_T *feature_info)
}else if(option == 0x02){ }else if(option == 0x02){
//<2F><>ȡ<EFBFBD>ⲿ Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><>ȡ<EFBFBD>ⲿ Flash APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Flash_Read(g_read_buff,APP_FEATURE_SIZE,SPIFLASH_APP_FEATURE_Addr); Flash_Read(g_read_buff,APP_FEATURE_SIZE,SPIFLASH_APP_FEATURE_Addr);
}else {
return 0x02; //ֱ<><D6B1><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>ʧ<EFBFBD><CAA7>
} }
Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"APP Feature :",g_read_buff,APP_FEATURE_SIZE); Dbg_Print_Buff(DBG_BIT_SYS_STATUS,"APP Feature :",g_read_buff,APP_FEATURE_SIZE);
@@ -626,7 +622,6 @@ void APP_Feature_Info_Printf(G_SYS_FEATURE_T *feature_info)
DBG_SYS_Printf("Feature crc_check: %x \r\n",feature_info->crc_check); DBG_SYS_Printf("Feature crc_check: %x \r\n",feature_info->crc_check);
DBG_SYS_Printf("Feature app_flag: %x \r\n",feature_info->app_flag); DBG_SYS_Printf("Feature app_flag: %x \r\n",feature_info->app_flag);
DBG_SYS_Printf("Feature app_start_addr: %x \r\n",feature_info->app_start_addr); DBG_SYS_Printf("Feature app_start_addr: %x \r\n",feature_info->app_start_addr);
DBG_SYS_Printf("Feature app_end_addr: %x \r\n",feature_info->app_end_addr); DBG_SYS_Printf("Feature app_end_addr: %x \r\n",feature_info->app_end_addr);
DBG_SYS_Printf("Feature app_crc_len: %d \r\n",feature_info->app_crc_len); DBG_SYS_Printf("Feature app_crc_len: %d \r\n",feature_info->app_crc_len);
@@ -636,3 +631,6 @@ void APP_Feature_Info_Printf(G_SYS_FEATURE_T *feature_info)

View File

@@ -7,6 +7,7 @@
#include "spi_flash.h" #include "spi_flash.h"
#include "debug.h" #include "debug.h"
#include "watchdog.h"
uint8_t Flash_Buffer[4150]; //FLash д<><EFBFBD><EBBBBA>BUFF uint8_t Flash_Buffer[4150]; //FLash д<><EFBFBD><EBBBBA>BUFF
@@ -125,7 +126,7 @@ uint8_t Flash_Wait_Busy(void)
temp = Flash_ReadSR(); temp = Flash_ReadSR();
while((temp&0x01)==0x01) while((temp&0x01)==0x01)
{ {
FEED_DOG(); //ι<><CEB9> WDT_Feed(); //ι<><CEB9>
Delay_Us(100); Delay_Us(100);
temp = Flash_ReadSR(); temp = Flash_ReadSR();
i++; i++;
@@ -350,7 +351,7 @@ void Flash_Write_NoCheck(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t write
if(NumByteToWrite<=pageremain) pageremain=NumByteToWrite;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35><36><EFBFBD>ֽ<EFBFBD> if(NumByteToWrite<=pageremain) pageremain=NumByteToWrite;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>256<35><36><EFBFBD>ֽ<EFBFBD>
while(1) while(1)
{ {
FEED_DOG(); //ι<><CEB9> WDT_Feed(); //ι<><CEB9>
Flash_Write_Page(pBuffer,pageremain,writeAddr); Flash_Write_Page(pBuffer,pageremain,writeAddr);
if(pageremain == NumByteToWrite) break; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(pageremain == NumByteToWrite) break; //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -395,7 +396,7 @@ void Flash_Write(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t WriteAddr)
while(1) while(1)
{ {
FEED_DOG(); //ι<><CEB9> WDT_Feed(); //ι<><CEB9>
Flash_Read(Write_Buff,256,secpos*256); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Flash_Read(Write_Buff,256,secpos*256); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -446,7 +447,7 @@ void Flash_Write(uint8_t* pBuffer,uint16_t NumByteToWrite,uint32_t WriteAddr)
while(1) while(1)
{ {
FEED_DOG(); //ι<><CEB9> WDT_Feed(); //ι<><CEB9>
Flash_Read(Write_Buff,2048,secpos*4096); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Flash_Read(Write_Buff,2048,secpos*4096); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Flash_Read(Write_Buff+2048,2048,secpos*4096+2048); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Flash_Read(Write_Buff+2048,2048,secpos*4096+2048); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -22,7 +22,8 @@ void TIMER0_Init(void)
volatile uint32_t Time0_100us = 0; volatile uint32_t Time0_100us = 0;
volatile uint32_t Time0_1ms = 0; volatile uint32_t Time0_1ms = 0;
void __attribute__((interrupt("WCH-Interrupt-fast"))) TIM0_IRQHandler() void TIM0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void TIM0_IRQHandler(void)
{ {
static uint8_t NUM_1 = 0; static uint8_t NUM_1 = 0;

View File

@@ -17,7 +17,14 @@
#include <string.h> #include <string.h>
UART_t g_uart[UART_MAX]; /* Bootload <20>й滮<D0B9><E6BBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 1<><31><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD> - <20><><EFBFBD><EFBFBD>0
* 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD> - <20><><EFBFBD><EFBFBD>2
* - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
*/
UART_t g_uart_0;
UART_t g_uart_2;
void UART0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); void UART0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void UART1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); void UART1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
@@ -58,11 +65,11 @@ void UARTx_Init(UART_IDX uart_id, uint32_t buad) {
UART0_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY); UART0_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART0_IRQn); NVIC_EnableIRQ(UART0_IRQn);
memset(&g_uart[UART_0],0,sizeof(UART_t)); memset(&g_uart_0,0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart[UART_0],buad); Set_Uart_recvTimeout(&g_uart_0,buad);
g_uart[UART_0].send_data_cf = UART0_SendString; g_uart_0.send_data_cf = MCU485_SendString_0;
g_uart[UART_0].set_baud_cf = UART0_ChangeBaud; g_uart_0.set_baud_cf = UART0_ChangeBaud;
break; break;
case UART_1: case UART_1:
UART1_Reset(); UART1_Reset();
@@ -80,11 +87,6 @@ void UARTx_Init(UART_IDX uart_id, uint32_t buad) {
UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY); UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART1_IRQn); NVIC_EnableIRQ(UART1_IRQn);
memset(&g_uart[UART_1],0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart[UART_1],buad);
g_uart[UART_1].send_data_cf = UART1_SendString;
g_uart[UART_1].set_baud_cf = UART1_ChangeBaud;
break; break;
case UART_2: case UART_2:
//RS485ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD> //RS485ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
@@ -106,11 +108,11 @@ void UARTx_Init(UART_IDX uart_id, uint32_t buad) {
UART2_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY); UART2_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART2_IRQn); NVIC_EnableIRQ(UART2_IRQn);
memset(&g_uart[UART_2],0,sizeof(UART_t)); memset(&g_uart_2,0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart[UART_2],buad); Set_Uart_recvTimeout(&g_uart_2,buad);
g_uart[UART_2].send_data_cf = UART2_SendString; g_uart_2.send_data_cf = MCU485_SendString_2;
g_uart[UART_2].set_baud_cf = UART2_ChangeBaud; g_uart_2.set_baud_cf = UART2_ChangeBaud;
break; break;
case UART_3: case UART_3:
UART3_Reset(); UART3_Reset();
@@ -128,11 +130,6 @@ void UARTx_Init(UART_IDX uart_id, uint32_t buad) {
UART3_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY); UART3_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART3_IRQn); NVIC_EnableIRQ(UART3_IRQn);
memset(&g_uart[UART_3],0,sizeof(UART_t));
Set_Uart_recvTimeout(&g_uart[UART_3],buad);
g_uart[UART_3].send_data_cf = UART3_SendString;
g_uart[UART_3].set_baud_cf = UART3_ChangeBaud;
break; break;
} }
} }
@@ -173,14 +170,14 @@ void UART0_IRQHandler(void)
break; break;
case UART_II_RECV_RDY: case UART_II_RECV_RDY:
case UART_II_RECV_TOUT: case UART_II_RECV_TOUT:
if( (g_uart[UART_0].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_0].RecvLen = 0x00; if( (g_uart_0.RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart_0.RecvLen = 0x00;
g_uart[UART_0].RecvBuffer[g_uart[UART_0].RecvLen] = UART0_RecvByte(); g_uart_0.RecvBuffer[g_uart_0.RecvLen] = UART0_RecvByte();
g_uart[UART_0].RecvLen += 1; g_uart_0.RecvLen += 1;
g_uart[UART_0].Receiving = 0x01; g_uart_0.Receiving = 0x01;
g_uart[UART_0].RecvIdleTiming = SysTick_1ms; g_uart_0.RecvIdleTiming = SysTick_1ms;
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ڷ<EFBFBD>æ״̬ //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ڷ<EFBFBD>æ״̬
g_uart[UART_0].CommBusy |= UART_COMMBUSY_RECV_Flag; g_uart_0.CommBusy |= UART_COMMBUSY_RECV_Flag;
break; break;
} }
@@ -202,11 +199,11 @@ void UART1_IRQHandler(void)
break; break;
case UART_II_RECV_RDY: case UART_II_RECV_RDY:
case UART_II_RECV_TOUT: case UART_II_RECV_TOUT:
if( (g_uart[UART_1].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_1].RecvLen = 0x00; // if( (g_uart[UART_1].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_1].RecvLen = 0x00;
g_uart[UART_1].RecvBuffer[g_uart[UART_1].RecvLen] = UART1_RecvByte(); // g_uart[UART_1].RecvBuffer[g_uart[UART_1].RecvLen] = UART1_RecvByte();
g_uart[UART_1].RecvLen += 1; // g_uart[UART_1].RecvLen += 1;
g_uart[UART_1].Receiving = 0x01; // g_uart[UART_1].Receiving = 0x01;
g_uart[UART_1].RecvIdleTiming = SysTick_1ms; // g_uart[UART_1].RecvIdleTiming = SysTick_1ms;
break; break;
} }
} }
@@ -227,11 +224,11 @@ void UART2_IRQHandler(void)
break; break;
case UART_II_RECV_RDY: case UART_II_RECV_RDY:
case UART_II_RECV_TOUT: case UART_II_RECV_TOUT:
if( (g_uart[UART_2].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_2].RecvLen = 0x00; if( (g_uart_2.RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart_2.RecvLen = 0x00;
g_uart[UART_2].RecvBuffer[g_uart[UART_2].RecvLen] = UART2_RecvByte(); g_uart_2.RecvBuffer[g_uart_2.RecvLen] = UART2_RecvByte();
g_uart[UART_2].RecvLen += 1; g_uart_2.RecvLen += 1;
g_uart[UART_2].Receiving = 0x01; g_uart_2.Receiving = 0x01;
g_uart[UART_2].RecvIdleTiming = SysTick_1ms; g_uart_2.RecvIdleTiming = SysTick_1ms;
break; break;
} }
} }
@@ -252,11 +249,11 @@ void UART3_IRQHandler(void)
break; break;
case UART_II_RECV_RDY: case UART_II_RECV_RDY:
case UART_II_RECV_TOUT: case UART_II_RECV_TOUT:
if( (g_uart[UART_3].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_3].RecvLen = 0x00; // if( (g_uart[UART_3].RecvLen + 1) >= USART_BUFFER_SIZE ) g_uart[UART_3].RecvLen = 0x00;
g_uart[UART_3].RecvBuffer[g_uart[UART_3].RecvLen] = UART3_RecvByte(); // g_uart[UART_3].RecvBuffer[g_uart[UART_3].RecvLen] = UART3_RecvByte();
g_uart[UART_3].RecvLen += 1; // g_uart[UART_3].RecvLen += 1;
g_uart[UART_3].Receiving = 0x01; // g_uart[UART_3].Receiving = 0x01;
g_uart[UART_3].RecvIdleTiming = SysTick_1ms; // g_uart[UART_3].RecvIdleTiming = SysTick_1ms;
break; break;
} }
} }
@@ -270,17 +267,17 @@ void UART3_IRQHandler(void)
*/ */
void UART0_RECEIVE(void) void UART0_RECEIVE(void)
{ {
if(g_uart[UART_0].Receiving == 0x01) if(g_uart_0.Receiving == 0x01)
{ {
if(SysTick_1ms - g_uart[UART_0].RecvIdleTiming >= g_uart[UART_0].RecvTimeout) if(SysTick_1ms - g_uart_0.RecvIdleTiming >= g_uart_0.RecvTimeout)
{ {
g_uart[UART_0].RecvIdleTiming = SysTick_1ms; g_uart_0.RecvIdleTiming = SysTick_1ms;
DBG_SYS_Printf("--UART0_RECEIVE--\r\n"); DBG_SYS_Printf("UART0_RECEIVE");
Launcher_Uart_Upgrade_Process(&g_uart[UART_0]); Launcher_Uart_Upgrade_Process(&g_uart_0);
g_uart[UART_0].RecvLen = 0; g_uart_0.RecvLen = 0;
g_uart[UART_0].Receiving = 0; g_uart_0.Receiving = 0;
} }
} }
} }
@@ -294,19 +291,7 @@ void UART0_RECEIVE(void)
*/ */
void UART1_RECEIVE(void) void UART1_RECEIVE(void)
{ {
if(g_uart[UART_1].Receiving == 0x01)
{
if(SysTick_1ms - g_uart[UART_1].RecvIdleTiming >= g_uart[UART_1].RecvTimeout)
{
g_uart[UART_1].RecvIdleTiming = SysTick_1ms;
DBG_SYS_Printf("--UART1_RECEIVE--\r\n");
Launcher_Uart_Upgrade_Process(&g_uart[UART_1]);
g_uart[UART_1].RecvLen = 0;
g_uart[UART_1].Receiving = 0;
}
}
} }
@@ -320,17 +305,17 @@ void UART1_RECEIVE(void)
*/ */
void UART2_RECEIVE(void) void UART2_RECEIVE(void)
{ {
if(g_uart[UART_2].Receiving == 1) if(g_uart_2.Receiving == 1)
{ {
if(SysTick_1ms - g_uart[UART_2].RecvIdleTiming > g_uart[UART_2].RecvTimeout) if(SysTick_1ms - g_uart_2.RecvIdleTiming > g_uart_2.RecvTimeout)
{ {
g_uart[UART_2].RecvIdleTiming = SysTick_1ms; g_uart_2.RecvIdleTiming = SysTick_1ms;
DBG_SYS_Printf("--UART2_RECEIVE--\r\n"); DBG_SYS_Printf("UART2_RECEIVE");
Launcher_Uart_Upgrade_Process(&g_uart[UART_2]); Launcher_Uart_Upgrade_Process(&g_uart_2);
g_uart[UART_2].RecvLen = 0; g_uart_2.RecvLen = 0;
g_uart[UART_2].Receiving = 0; g_uart_2.Receiving = 0;
} }
} }
} }
@@ -346,19 +331,7 @@ void UART2_RECEIVE(void)
*/ */
void UART3_RECEIVE(void) void UART3_RECEIVE(void)
{ {
if(g_uart[UART_3].Receiving == 1)
{
if(SysTick_1ms - g_uart[UART_3].RecvIdleTiming > g_uart[UART_3].RecvTimeout)
{
g_uart[UART_3].RecvIdleTiming = SysTick_1ms;
DBG_SYS_Printf("--UART3_RECEIVE--\r\n");
Launcher_Uart_Upgrade_Process(&g_uart[UART_3]);
g_uart[UART_3].RecvLen = 0;
g_uart[UART_3].Receiving = 0;
}
}
} }
/********************************************************************* /*********************************************************************
@@ -397,7 +370,7 @@ uint8_t UART0_ChangeBaud(uint32_t baudrate)
UART0_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY); UART0_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART0_IRQn); NVIC_EnableIRQ(UART0_IRQn);
Set_Uart_recvTimeout(&g_uart[UART_0],baudrate); Set_Uart_recvTimeout(&g_uart_0,baudrate);
__enable_irq(); __enable_irq();
@@ -425,7 +398,7 @@ uint8_t UART1_ChangeBaud(uint32_t baudrate)
while(1) while(1)
{ {
if( UART0_GetLinSTA() & RB_LSR_TX_ALL_EMP ) if( UART1_GetLinSTA() & RB_LSR_TX_ALL_EMP )
{ {
/*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/ /*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/
__disable_irq(); __disable_irq();
@@ -445,7 +418,7 @@ uint8_t UART1_ChangeBaud(uint32_t baudrate)
UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY); UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART1_IRQn); NVIC_EnableIRQ(UART1_IRQn);
Set_Uart_recvTimeout(&g_uart[UART_1],baudrate); //Set_Uart_recvTimeout(&g_uart[UART_1],baudrate);
__enable_irq(); __enable_irq();
@@ -473,7 +446,7 @@ uint8_t UART2_ChangeBaud(uint32_t baudrate)
while(1) while(1)
{ {
if( UART0_GetLinSTA() & RB_LSR_TX_ALL_EMP ) if( UART2_GetLinSTA() & RB_LSR_TX_ALL_EMP )
{ {
/*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/ /*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/
__disable_irq(); __disable_irq();
@@ -493,7 +466,7 @@ uint8_t UART2_ChangeBaud(uint32_t baudrate)
UART2_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY); UART2_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART2_IRQn); NVIC_EnableIRQ(UART2_IRQn);
Set_Uart_recvTimeout(&g_uart[UART_2],baudrate); Set_Uart_recvTimeout(&g_uart_2,baudrate);
__enable_irq(); __enable_irq();
@@ -521,7 +494,7 @@ uint8_t UART3_ChangeBaud(uint32_t baudrate)
while(1) while(1)
{ {
if( UART0_GetLinSTA() & RB_LSR_TX_ALL_EMP ) if( UART3_GetLinSTA() & RB_LSR_TX_ALL_EMP )
{ {
/*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/ /*<2A><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>*/
__disable_irq(); __disable_irq();
@@ -541,7 +514,7 @@ uint8_t UART3_ChangeBaud(uint32_t baudrate)
UART3_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY); UART3_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_THR_EMPTY);
NVIC_EnableIRQ(UART3_IRQn); NVIC_EnableIRQ(UART3_IRQn);
Set_Uart_recvTimeout(&g_uart[UART_3],baudrate); //Set_Uart_recvTimeout(&g_uart[UART_3],baudrate);
__enable_irq(); __enable_irq();
@@ -571,10 +544,9 @@ uint8_t UART3_ChangeBaud(uint32_t baudrate)
* *
* */ * */
uint8_t MCU485_SendString_1(uint8_t *buff, uint16_t len) uint8_t MCU485_SendString_0(uint8_t *buff, uint16_t len)
{ {
uint32_t delay_num = 0; uint32_t delay_num = 0;
MCU485_EN1_H;
UART0_SendString(buff,len); UART0_SendString(buff,len);
@@ -587,7 +559,6 @@ uint8_t MCU485_SendString_1(uint8_t *buff, uint16_t len)
if(delay_num > 50000) break; if(delay_num > 50000) break;
} }
MCU485_EN1_L;
return 0x00; return 0x00;
} }
@@ -615,25 +586,33 @@ uint8_t MCU485_SendString_2(uint8_t *buff, uint16_t len)
* Function Name : Uart0_Add_Data_To_SendBuff * Function Name : Uart0_Add_Data_To_SendBuff
* Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD> * Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
* Input : * Input :
* uart_info<66><6F><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff<66><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> buff<66><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
len<65><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> len<65><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
sendCount <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD> sendCount <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
ValidDuration <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чʱ<D0A7><EFBFBD><E4A3AC>λ<EFBFBD><CEBB>ms ValidDuration <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чʱ<D0A7><EFBFBD><E4A3AC>λ<EFBFBD><CEBB>ms
sendInterval <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC>λ<EFBFBD><CEBB>ms sendInterval <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC>λ<EFBFBD><CEBB>ms
*******************************************************************************/ *******************************************************************************/
uint8_t Uart0_Add_Data_To_SendBuff(uint8_t *buff,uint16_t len,uint8_t sendCount,uint32_t ValidDuration,uint32_t sendInterval) uint8_t Uartx_Add_Data_To_SendBuff(
UART_t *uart_info,
uint8_t *buff,
uint16_t len,
uint8_t sendCount,
uint32_t ValidDuration,
uint32_t sendInterval)
{ {
if( buff == NULL) return 0x01; if( uart_info == NULL ) return 0x01;
if( buff == NULL ) return 0x01;
if( len > USART_BUFFER_SIZE ) return 0x02; if( len > USART_BUFFER_SIZE ) return 0x02;
memset(g_uart[UART_0].SendBuffer,0,USART_BUFFER_SIZE); memset(uart_info->SendBuffer,0,USART_BUFFER_SIZE);
memcpy(g_uart[UART_0].SendBuffer,buff,len); memcpy(uart_info->SendBuffer,buff,len);
g_uart[UART_0].SendLen = len; uart_info->SendLen = len;
g_uart[UART_0].SendCount = sendCount; uart_info->SendCount = sendCount;
g_uart[UART_0].SendCnt = 0; uart_info->SendCnt = 0;
g_uart[UART_0].SendValidDuration = ValidDuration; uart_info->SendValidDuration = ValidDuration;
g_uart[UART_0].SendInterval = sendInterval; uart_info->SendInterval = sendInterval;
g_uart[UART_0].SendValidTick = SysTick_1ms; uart_info->SendValidTick = SysTick_1ms;
return 0x00; return 0x00;
} }
@@ -642,10 +621,12 @@ uint8_t Uart0_Add_Data_To_SendBuff(uint8_t *buff,uint16_t len,uint8_t sendCount,
* Function Name : Uart0_Clear_SendBuff * Function Name : Uart0_Clear_SendBuff
* Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱȡ<CAB1><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱȡ<CAB1><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/ *******************************************************************************/
uint8_t Uart0_Clear_SendBuff(void) uint8_t Uartx_Clear_SendBuff(UART_t *uart_info)
{ {
memset(g_uart[UART_0].SendBuffer,0,USART_BUFFER_SIZE); if( uart_info == NULL ) return 0x01;
g_uart[UART_0].SendLen = 0x00;
memset(uart_info->SendBuffer,0,USART_BUFFER_SIZE);
uart_info->SendLen = 0x00;
return 0x00; return 0x00;
} }
@@ -654,40 +635,45 @@ uint8_t Uart0_Clear_SendBuff(void)
* Function Name : Uart0_Avoid_Conflict_Send_Task * Function Name : Uart0_Avoid_Conflict_Send_Task
* Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * Description : Uart0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/ *******************************************************************************/
uint8_t Uart0_Avoid_Conflict_Send_Task(void) uint8_t Uartx_Avoid_Conflict_Send_Task(UART_t *uart_info)
{ {
if( (g_uart[UART_0].SendLen == 0x00) || (g_uart[UART_0].SendLen > USART_BUFFER_SIZE) ) return 0x01; if( uart_info == NULL ) return 0x01;
if( g_uart[UART_0].SendCnt >= g_uart[UART_0].SendCount ) { if( (uart_info->SendLen == 0x00) || (uart_info->SendLen > USART_BUFFER_SIZE) ) return 0x01;
if( uart_info->SendCnt >= uart_info->SendCount ) {
//<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB5BD><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB5BD><EFBFBD>ޣ<EFBFBD><DEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
g_uart[UART_0].SendLen = 0x00; uart_info->SendLen = 0x00;
return 0x02; return 0x02;
} }
if( SysTick_1ms - g_uart[UART_0].SendValidTick >= g_uart[UART_0].SendInterval ){ if( SysTick_1ms - uart_info->SendValidTick >= uart_info->SendInterval ){
//<2F><><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>Ч<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> //<2F><><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>Ч<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
g_uart[UART_0].SendLen = 0x00; uart_info->SendLen = 0x00;
return 0x03; return 0x03;
} }
if( g_uart[UART_0].CommBusy != UART_COMMBUSY_IDLE_Flag ) return 0x04; //ͨѶ<CDA8><D1B6><EFBFBD>ڷ<EFBFBD>æ״̬ if( uart_info->CommBusy != UART_COMMBUSY_IDLE_Flag ) return 0x04; //ͨѶ<CDA8><D1B6><EFBFBD>ڷ<EFBFBD>æ״̬
//<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> //<2F><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
if( ( g_uart[UART_0].SendCnt == 0x00 ) || ( SysTick_1ms - g_uart[UART_0].SendTick >= g_uart[UART_0].SendInterval ) ) if( ( uart_info->SendCnt == 0x00 ) || ( SysTick_1ms - uart_info->SendTick >= uart_info->SendInterval ) )
{ {
__disable_irq(); //<2F>ر<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD> __disable_irq(); //<2F>ر<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
g_uart[UART_0].CommBusy |= UART_COMMBUSY_SEND_Flag; uart_info->CommBusy |= UART_COMMBUSY_SEND_Flag;
g_uart[UART_0].SendIdleTick = SysTick_1ms; uart_info->SendIdleTick = SysTick_1ms;
__enable_irq(); //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD> __enable_irq(); //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
UART0_SendString(g_uart[UART_0].SendBuffer, g_uart[UART_0].SendLen); if( uart_info->send_data_cf != NULL ){
g_uart[UART_0].SendTick = SysTick_1ms; uart_info->send_data_cf(uart_info->SendBuffer, uart_info->SendLen);
g_uart[UART_0].SendCnt++; }
if( g_uart[UART_0].SendCnt >= g_uart[UART_0].SendCount ) uart_info->SendTick = SysTick_1ms;
uart_info->SendCnt++;
if( uart_info->SendCnt >= uart_info->SendCount )
{ {
memset(g_uart[UART_0].SendBuffer,0,USART_BUFFER_SIZE); memset(uart_info->SendBuffer,0,USART_BUFFER_SIZE);
g_uart[UART_0].SendLen = 0x00; uart_info->SendLen = 0x00;
return 0x05; //ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD> return 0x05; //ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
} }
@@ -696,37 +682,52 @@ uint8_t Uart0_Avoid_Conflict_Send_Task(void)
return 0x00; return 0x00;
} }
void Uart0_Task(void) /*******************************************************************************
* Function Name : Uartx_IDLE_State_Determination
* Description : Uartx <20><><EFBFBD><EFBFBD>״̬<D7B4>ж<EFBFBD>
*******************************************************************************/
void Uartx_IDLE_State_Determination(UART_t *uart_info)
{ {
UART0_RECEIVE(); if( uart_info->CommBusy == UART_COMMBUSY_IDLE_Flag )
Uart0_Avoid_Conflict_Send_Task();
if( g_uart[UART_0].CommBusy == UART_COMMBUSY_IDLE_Flag )
{ {
/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>״̬ - <20><><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD>*/ /*<2A><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>״̬ - <20><><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD>*/
if( g_uart[UART_0].ChangeBaudFlag == 0x01 ) if( uart_info->ChangeBaudFlag == 0x01 )
{ {
g_uart[UART_0].set_baud_cf(g_uart[UART_0].CommBaud); uart_info->set_baud_cf(uart_info->CommBaud);
g_uart[UART_0].ChangeBaudFlag = 0x00; uart_info->ChangeBaudFlag = 0x00;
} }
}else { }else {
/*<2A><>ǰ<EFBFBD><C7B0><EFBFBD>ڷ<EFBFBD><DAB7>ͷ<EFBFBD>æ״̬<D7B4><CCAC><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>״̬ - <20>ж<EFBFBD>ʹ<EFBFBD>ó<EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱʱ<CAB1><CAB1>һ<EFBFBD><D2BB>*/ /*<2A><>ǰ<EFBFBD><C7B0><EFBFBD>ڷ<EFBFBD><DAB7>ͷ<EFBFBD>æ״̬<D7B4><CCAC><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD>״̬ - <20>ж<EFBFBD>ʹ<EFBFBD>ó<EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱʱ<CAB1><CAB1>һ<EFBFBD><D2BB>*/
if( ((g_uart[UART_0].CommBusy & UART_COMMBUSY_SEND_Flag) != 0x00 ) && ( SysTick_1ms - g_uart[UART_0].SendIdleTick >= g_uart[UART_0].RecvTimeout ) ) if( ((uart_info->CommBusy & UART_COMMBUSY_SEND_Flag) != 0x00 ) && ( SysTick_1ms - uart_info->SendIdleTick >= uart_info->RecvTimeout ) )
{ {
g_uart[UART_0].SendIdleTick = SysTick_1ms; uart_info->SendIdleTick = SysTick_1ms;
__disable_irq(); //<2F>ر<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD> __disable_irq(); //<2F>ر<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
g_uart[UART_0].CommBusy &= ~(UART_COMMBUSY_SEND_Flag); uart_info->CommBusy &= ~(UART_COMMBUSY_SEND_Flag);
g_uart[UART_0].SendIdleTick = SysTick_1ms; uart_info->SendIdleTick = SysTick_1ms;
__enable_irq(); //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD> __enable_irq(); //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>ж<EFBFBD>
} }
} }
}
void Uart0_Task(void)
{
UART0_RECEIVE();
Uartx_Avoid_Conflict_Send_Task(&g_uart_0);
Uartx_IDLE_State_Determination(&g_uart_0);
}
void Uart2_Task(void)
{
UART2_RECEIVE();
Uartx_Avoid_Conflict_Send_Task(&g_uart_2);
Uartx_IDLE_State_Determination(&g_uart_2);
} }

40
MCU_Driver/watchdog.c Normal file
View File

@@ -0,0 +1,40 @@
/*
* watchdog.c
*
* Created on: Jan 9, 2026
* Author: cc
*/
#include "watchdog.h"
/*******************************************************************************
* Function Name : WDT_Init
* Description : <20><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD>ʼ<EFBFBD><CABC> <20><><EFBFBD><EFBFBD>100MHz <20><>ƵԼΪ84ms
* Input : None
* Return : None
*******************************************************************************/
void WDT_Init(void)
{
FEED_DOG();
WDOG_ENABLE();
}
/*******************************************************************************
* Function Name : WDT_Feed
* Description : <20><><EFBFBD>Ź<EFBFBD>ι<EFBFBD><CEB9>
* Input : None
* Return : None
*******************************************************************************/
void WDT_Feed(void)
{
FEED_DOG();
}
/*******************************************************************************
* Function Name : WDT_Reinit
* Description : <20><><EFBFBD>Ź<EFBFBD>ȥ<EFBFBD><C8A5>ʼ<EFBFBD><CABC>
*******************************************************************************/
void WDT_Reinit(void)
{
WDOG_DISABLE();
}

View File

@@ -11,6 +11,7 @@
*******************************************************************************/ *******************************************************************************/
#include "ch564_spi.h" #include "ch564_spi.h"
#include "debug.h" #include "debug.h"
#include "watchdog.h"
uint32_t spi_comm_tick = 0; uint32_t spi_comm_tick = 0;
#define SPICOMM_TIMEOUT 10 #define SPICOMM_TIMEOUT 10
@@ -77,6 +78,8 @@ void SPI0_MasterSendByte(uint8_t data)
spi_comm_tick = SysTick_100us; spi_comm_tick = SysTick_100us;
while (SPI0_GET_TOTAL_CNT() != 0) while (SPI0_GET_TOTAL_CNT() != 0)
{ {
WDT_Feed();
if(SysTick_100us - spi_comm_tick >= SPICOMM_TIMEOUT) break; if(SysTick_100us - spi_comm_tick >= SPICOMM_TIMEOUT) break;
} }
} }
@@ -96,6 +99,8 @@ uint8_t SPI0_MasterRecvByte(void)
spi_comm_tick = SysTick_100us; spi_comm_tick = SysTick_100us;
while (!SPI0_GET_FIFO_CNT()) while (!SPI0_GET_FIFO_CNT())
{ {
WDT_Feed();
if(SysTick_100us - spi_comm_tick >= SPICOMM_TIMEOUT) break; if(SysTick_100us - spi_comm_tick >= SPICOMM_TIMEOUT) break;
} }
return (SPI0_GET_FIFO()); return (SPI0_GET_FIFO());
@@ -121,6 +126,8 @@ void SPI0_MasterTrans(uint8_t *pbuf, uint16_t len)
spi_comm_tick = SysTick_100us; spi_comm_tick = SysTick_100us;
while (sendlen) while (sendlen)
{ {
WDT_Feed();
if (SPI0_GET_FIFO_CNT() < SPI0_FIFO_SIZE) if (SPI0_GET_FIFO_CNT() < SPI0_FIFO_SIZE)
{ {
SPI0_SET_FIFO(*pbuf); SPI0_SET_FIFO(*pbuf);
@@ -133,6 +140,8 @@ void SPI0_MasterTrans(uint8_t *pbuf, uint16_t len)
spi_comm_tick = SysTick_100us; spi_comm_tick = SysTick_100us;
while (SPI0_GET_TOTAL_CNT() != 0) // Wait for all the data in the FIFO to be sent while (SPI0_GET_TOTAL_CNT() != 0) // Wait for all the data in the FIFO to be sent
{ {
WDT_Feed();
if(SysTick_100us - spi_comm_tick >= SPICOMM_TIMEOUT) break; if(SysTick_100us - spi_comm_tick >= SPICOMM_TIMEOUT) break;
} }
} }
@@ -160,6 +169,8 @@ void SPI0_MasterRecv(uint8_t *pbuf, uint16_t len)
spi_comm_tick = SysTick_100us; spi_comm_tick = SysTick_100us;
while (readlen) while (readlen)
{ {
WDT_Feed();
if (SPI0_GET_FIFO_CNT()) if (SPI0_GET_FIFO_CNT())
{ {
*pbuf = SPI0_GET_FIFO(); *pbuf = SPI0_GET_FIFO();
@@ -193,6 +204,8 @@ void SPI0_MasterTransRecv(uint8_t *ptbuf, uint8_t *prbuf, uint16_t len)
spi_comm_tick = SysTick_100us; spi_comm_tick = SysTick_100us;
while (sendlen) while (sendlen)
{ {
WDT_Feed();
if (SPI0_GET_FIFO_CNT() == 0) if (SPI0_GET_FIFO_CNT() == 0)
{ {
SPI0_SET_FIFO(*ptbuf); SPI0_SET_FIFO(*ptbuf);
@@ -227,6 +240,8 @@ void SPI0_DMATrans(uint8_t *pbuf, uint32_t len)
spi_comm_tick = SysTick_100us; spi_comm_tick = SysTick_100us;
while (SPI0_GET_TOTAL_CNT()) while (SPI0_GET_TOTAL_CNT())
{ {
WDT_Feed();
if(SysTick_100us - spi_comm_tick >= SPICOMM_TIMEOUT) break; if(SysTick_100us - spi_comm_tick >= SPICOMM_TIMEOUT) break;
} }
SPI0_SET_DMA_MODE(RB_SPI_DMA_ENABLE, DISABLE); SPI0_SET_DMA_MODE(RB_SPI_DMA_ENABLE, DISABLE);
@@ -252,6 +267,8 @@ void SPI0_DMARecv(uint8_t *pbuf, uint32_t len)
spi_comm_tick = SysTick_100us; spi_comm_tick = SysTick_100us;
while (SPI0_GET_TOTAL_CNT()) while (SPI0_GET_TOTAL_CNT())
{ {
WDT_Feed();
if(SysTick_100us - spi_comm_tick >= 1000) break; if(SysTick_100us - spi_comm_tick >= 1000) break;
} }
SPI0_SET_DMA_MODE(RB_SPI_DMA_ENABLE, DISABLE); SPI0_SET_DMA_MODE(RB_SPI_DMA_ENABLE, DISABLE);

View File

@@ -2,12 +2,36 @@ BLV-C1P Launcher
<EFBFBD>״<EFBFBD><EFBFBD> #### 2026-01-19
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD>֣<EFBFBD> ? 1<><31>Launcher<65>еĴ<D0B5><C4B4><EFBFBD>ֻʹ<D6BB>ô<EFBFBD><C3B4><EFBFBD>0(<28><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2(<28><><EFBFBD><EFBFBD>RS485<38>˿<EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EBB4AE>3<EFBFBD><33>ʹ<EFBFBD>ã<EFBFBD><C3A3>Ҳ<EFBFBD><D2B2><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ1100Byte<74><EFBFBD>
FLASH_ROMA_ERASE <20><> EEPROM_ERASE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ4096
? Ŀ<>ģ<EFBFBD>CH564<36><34><EFBFBD>ڽ<EFBFBD>Launcher<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>RAM<41><4D><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>˿<EFBFBD>ʹ<EFBFBD>õı<C3B5><C4B1><EFBFBD><EFBFBD><EFBFBD>Сֻ<D0A1><D6BB>32Kbyte<74><65><EFBFBD><EFBFBD>ʹ<EFBFBD>õĴ<C3B5><C4B4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ͬʱʹ<CAB1>õ<EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RAM<41>ռ<D5BC><E4B2BB>ʹ<EFBFBD>á<EFBFBD>
? 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 - <20><><EFBFBD><EFBFBD>RS485ʹ<35>ܣ<EFBFBD>ͬʱͨѶ<CDA8><D1B6><EFBFBD>ӱ<EFBFBD><D3B1>Ϲ<EFBFBD><CFB9>ܡ<EFBFBD>
2025-07-30
Launcher<65><72>ַ <20><>0x00000000 ~ 0x00004000
#### 2026-01-17
? 1<><31>Launcher<65><72>MCU Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD>תAPPʧ<50><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>
? 2<><32>Launcher<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
- <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>**<2A>¹̼<C2B9>**<2A><><EFBFBD><EFBFBD>
- **<2A>¹̼<C2B9>**<2A><>5<EFBFBD><35>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- д<><D0B4><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>Ӵ˲<D3B4><CBB2><EFBFBD><EFBFBD><EFBFBD>MCU Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
? 3<><33>Laucnher<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU Flashд<68><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>ơ<EFBFBD>
#### 2026-01-04
? CH564 FLASH_ROMA_ERASE <20><> EEPROM_ERASE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>СΪ4096
?
#### 2025-07-30
? Launcher<65><72>ַ <20><>0x00000000 ~ 0x00004000
?

View File

@@ -24,14 +24,17 @@
#include "flash_mem_addr.h" #include "flash_mem_addr.h"
#include "rtc.h" #include "rtc.h"
#include "mcu_flash.h" #include "mcu_flash.h"
#include "watchdog.h"
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE> /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
<20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>̶<EFBFBD>Ӧ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD> <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>̶<EFBFBD>Ӧ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>
Boot<6F>л<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡEEPROM<4F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD>жϵ<D0B6>ǰ<EFBFBD><C7B0>ʲô<CAB2><C3B4><EFBFBD><EFBFBD> Boot<6F>л<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡEEPROM<4F>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD>жϵ<D0B6>ǰ<EFBFBD><C7B0>ʲô<CAB2><C3B4><EFBFBD><EFBFBD>
<20><><EFBFBD><EFBFBD>EEPROM <20><>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Boot<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַΪ0x00<30><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>Ϊ0x00 <20><><EFBFBD><EFBFBD>EEPROM <20><>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Boot<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַΪ0x00<30><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>Ϊ0x00
*/ */
#define Project_Version "--BLV_C1P_Launcher V01--" //<2F>ù<EFBFBD><C3B9>̰汾<CCB0><E6B1BE><EFBFBD>ڱ<EFBFBD><DAB1>뵽HEX/BIN <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
#define Project_Area 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪBoot<6F><74><EFBFBD><EFBFBD> 0x01:Boot<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x02:APP<50><50><EFBFBD><EFBFBD> #define Project_Area 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪBoot<6F><74><EFBFBD><EFBFBD> 0x01:Boot<6F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x02:APP<50><50><EFBFBD><EFBFBD>
#define Peoject_Name "BLV_C1P_Bootload" //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #define Peoject_Name "BLV_C1P_Launcher" //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Project_FW_Version 0x01 //<2F><><EFBFBD>̶<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE> #define Project_FW_Version 0x01 //<2F><><EFBFBD>̶<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
#define Project_Type 0x00 //<2F><><EFBFBD>̶<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> BootĬ<74><C4AC><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> #define Project_Type 0x00 //<2F><><EFBFBD>̶<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> BootĬ<74><C4AC><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>

View File

@@ -14,6 +14,8 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
const char Prject_File_Name[] __attribute__((section(".project_info"))) = Project_Version;
uint32_t test_tick = 0; uint32_t test_tick = 0;
/********************************************************************* /*********************************************************************
@@ -26,18 +28,18 @@ uint32_t test_tick = 0;
int main(void) int main(void)
{ {
uint8_t sys_reset = 0; uint8_t sys_reset = 0;
uint32_t wdt_reste_tick = 0;
unsigned char Buffer; unsigned char Buffer;
unsigned long DATA_ROM_ADDR;
/* - <20>ϵ<EFBFBD>ǰ<EFBFBD><C7B0>Ҫ<EFBFBD>رտ<D8B1><D5BF>Ź<EFBFBD>
* - ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
* */
WDT_Reinit();
SystemCoreClockUpdate(); //ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC> SystemCoreClockUpdate(); //ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC>
Systick_Init(); Systick_Init();
UARTx_Init(UART_0,512000); UARTx_Init(UART_0,512000);
UARTx_Init(UART_1,512000);
UARTx_Init(UART_2,512000); UARTx_Init(UART_2,512000);
UARTx_Init(UART_3,512000);
SYS_LED_Init(); SYS_LED_Init();
@@ -48,36 +50,37 @@ int main(void)
Get_Flash_Size(&Buffer); Get_Flash_Size(&Buffer);
if(Buffer){ if(Buffer){
DATA_ROM_ADDR = 0x70000; DBG_SYS_Printf("CH564 ROMA :0x0 - 0x6FFFF");
DBG_SYS_Printf("CH564 EEPROM :0x70000 - 0x77FFF");
}else { }else {
DATA_ROM_ADDR = 0x30000; DBG_SYS_Printf("CH564 ROMA :0x0 - 0x2FFFF");
DBG_SYS_Printf("CH564 EEPROM :0x30000 - 0x37FFF");
} }
DBG_SYS_Printf("RTC_Init \r\n");
RTC_Init();
DBG_SYS_Printf("EEPROM_Init - DATA_ROM_ADDR:%x\r\n",DATA_ROM_ADDR);
EEPROM_Init(); EEPROM_Init();
DBG_SYS_Printf("G PARA \r\n");
memset((uint8_t *)&g_app_feature,0,sizeof(G_SYS_FEATURE_T)); memset((uint8_t *)&g_app_feature,0,sizeof(G_SYS_FEATURE_T));
memset((uint8_t *)&g_mcu_app_feature,0,sizeof(G_SYS_FEATURE_T)); memset((uint8_t *)&g_mcu_app_feature,0,sizeof(G_SYS_FEATURE_T));
memset((uint8_t *)&g_update_recode,0,sizeof(UPDATE_RECORD_T)); memset((uint8_t *)&g_update_recode,0,sizeof(UPDATE_RECORD_T));
DBG_SYS_Printf("G_SYS_FEATURE_T : %d \r\n",sizeof(G_SYS_FEATURE_T)); DBG_SYS_Printf("Project Name:%s",Prject_File_Name);
sys_reset = RCC_GET_GLOB_RST_KEEP(); sys_reset = RCC_GET_GLOB_RST_KEEP(); //<2F><>λ<EFBFBD><CEBB><EFBFBD>ּĴ<D6BC><C4B4><EFBFBD>
if(sys_reset == 0x00) if(sys_reset == 0x00)
{ {
DBG_SYS_Printf("<EFBFBD>ϵ縴λ \r\n"); DBG_SYS_Printf("<EFBFBD>ϵ縴λ \r\n");
g_Boot_Time = 10000;
}else if(sys_reset == 0x02){ }else if(sys_reset == 0x02){
DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ \r\n");
g_Boot_Time = 30000;
}else if(sys_reset == 0x03){
DBG_SYS_Printf("MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ \r\n");
g_Boot_Time = 3000;
DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD>λ \r\n");
}else { }else {
DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ \r\n"); DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD>λ \r\n");
g_Boot_Time = 30000;
} }
RCC_SET_GLOB_RST_KEEP(0x01); RCC_SET_GLOB_RST_KEEP(0x01);
@@ -86,48 +89,66 @@ int main(void)
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
if(g_jump_flag == 2) { if(g_jump_flag == 2) {
MCU_APP_Write(); //MCU<43><55>Ҫд<D2AA><D0B4> MCU_APP_Write(); //MCU<43><55>Ҫд<D2AA><D0B4>
g_jump_flag = 0;
// printf("Jump APP 1\r\n"); DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ \r\n");
//
// Delay_Ms(1000);
//
// __disable_irq();
// Jump_APP(g_mcu_app_feature.app_start_addr);
NVIC_EnableIRQ( Software_IRQn ); //WDT_Init();
Delay_Ms( 20 ); //RCC_SET_GLOB_RST_KEEP(0x03);
NVIC_SetPendingIRQ( Software_IRQn ); Delay_Ms(1000);
// - <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ָ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Code Flash
RCC_GlobleRstCFG(RB_GLOB_FORCE_RST, ENABLE);
while(1);
} }
WDT_Init();
while (1) while (1)
{ {
WDT_Feed();
SYS_LED_Task(); SYS_LED_Task();
Uart0_Task(); Uart0_Task();
UART1_RECEIVE(); Uart2_Task();
UART2_RECEIVE();
UART3_RECEIVE();
RTC_TASK();
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
if(SysTick_1ms - g_Boot_Tick >= 5000) if(g_jump_flag == 0x00)
{ {
g_Boot_Tick = SysTick_1ms; if(SysTick_1ms - g_Boot_Tick >= 5000)
if(g_jump_flag == 0x00) //APP У<><D0A3><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>תAPP
{ {
printf("Jump APP 2\r\n"); g_Boot_Tick = SysTick_1ms;
DBG_SYS_Printf("Jump APP 2\r\n");
Delay_Ms(1000); Delay_Ms(1000);
WDT_Reinit();
NVIC_EnableIRQ( Software_IRQn ); NVIC_EnableIRQ( Software_IRQn );
Delay_Ms( 20 ); Delay_Ms( 20 );
HSI_ON();
CLKSEL_HSI();
SYSCLK_SOURCE_SELECT(SYSCLK_SOURCE_HSI_HSE);
RCC_UNLOCK_SAFE_ACCESS();
BITS_CFG( R32_EXTEN_CTLR0 , RB_FLASH_PRE_EN , DISABLE );
RCC_LOCK_SAFE_ACCESS();
NVIC_SetPendingIRQ( Software_IRQn ); NVIC_SetPendingIRQ( Software_IRQn );
} }
}else {
if(SysTick_1ms - g_Boot_Tick >= g_Boot_Time)
{
DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ ....");
RCC_SET_GLOB_RST_KEEP(0x02);
Delay_Ms(1000);
RCC_GlobleRstCFG(RB_GLOB_FORCE_RST, ENABLE);
while(1);
}
} }
} }
} }
@@ -145,6 +166,7 @@ void NMI_Handler(void)
{ {
while (1) while (1)
{ {
} }
} }
@@ -172,12 +194,11 @@ void HardFault_Handler(void)
while(1); while(1);
} }
/* - <20><>תAPP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SW_Handler<65>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ת
* - <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>SW_Handler<65>жϺ<D0B6><CFBA><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תAPP */
void SW_Handler(void) { void SW_Handler(void) {
printf("SW_Handler Jump App\r\n");
Delay_Ms( 100 );
__disable_irq(); __asm volatile("li a6, 0x01000");
__asm volatile("li a6, 0x07000");
__asm volatile("jr a6"); __asm volatile("jr a6");
while(1); while(1);