diff --git a/.vscode/settings.json b/.vscode/settings.json
index faa9b76..4c5e84a 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -5,7 +5,9 @@
"motor.h": "c",
"main.h": "c",
"app.h": "c",
- "type_traits": "c"
+ "type_traits": "c",
+ "adcs.h": "c",
+ "uarts.h": "c"
},
"C_Cpp.errorSquiggles": "disabled"
}
\ No newline at end of file
diff --git a/MDK-ARM/motor.uvoptx b/MDK-ARM/motor.uvoptx
index de29cce..4d573bd 100644
--- a/MDK-ARM/motor.uvoptx
+++ b/MDK-ARM/motor.uvoptx
@@ -158,44 +158,22 @@
1
1
- motor_state
+ test_buffer,0x10
2
1
- motor_ccr
-
-
- 3
- 1
- step_motor_flag
-
-
- 4
- 1
- motor->handle.step_motor.attribute,0x0A
-
-
- 5
- 1
- motor_dir
-
-
- 6
- 1
- deal_done_flag,0x0A
-
-
- 7
- 1
- uarts
-
-
- 8
- 1
- uart
+ self_test,0x0A
+
+
+ 1
+ 0
+ 0x20000090
+ 0
+
+
0
@@ -238,16 +216,6 @@
-
-
- System Viewer\DMA1
- 35904
-
-
- System Viewer\USART1
- 35905
-
-
1
0
@@ -508,7 +476,7 @@
User
- 1
+ 0
0
0
0
@@ -812,7 +780,7 @@
9
41
1
- 0
+ 1
0
0
..\User\board\board.c
diff --git a/MDK-ARM/motor/motor.hex b/MDK-ARM/motor/motor.hex
index d21e664..94bd9ad 100644
--- a/MDK-ARM/motor/motor.hex
+++ b/MDK-ARM/motor/motor.hex
@@ -1,5 +1,5 @@
:020000040800F2
-:10000000704600209D01000895200008650D00083D
+:10000000604700209D01000895200008650D00084C
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000003523000870
:100030000000000000000000EB210008372300084A
@@ -14,21 +14,21 @@
:1000C00000F002F800F03EF80CA030C80838241800
:1000D0002D18A246671EAB4654465D46AC4201D180
:1000E00000F030F87E460F3E0FCCB6460126334274
-:1000F00000D0FB1AA246AB4633431847683F0000C6
-:10010000883F0000103A02D378C878C1FAD8520765
+:1000F00000D0FB1AA246AB4633431847B841000074
+:10010000D8410000103A02D378C878C1FAD8520713
:1001100001D330C830C101D504680C6070470000BD
:100120000023002400250026103A01D378C1FBD813
:10013000520700D330C100D50B6070471FB51FBDFB
:1001400010B510BD00F0BDFD1146FFF7F7FF02F03E
-:1001500075FE00F0D5FD03B4FFF7F2FF03BC00F01D
+:10015000A1FE00F0D5FD03B4FFF7F2FF03BC00F0F1
:10016000DBFD000070B505460C46164602E00FCCDC
:100170000FC5103E102EFAD2082E02D303CC03C5B1
:10018000083E042E07D301CC01C5361F03E02178B9
:100190002970641C6D1C761EF9D270BD074880471B
:1001A00007480047FEE7FEE7FEE7FEE7FEE7FEE75B
:1001B00004480549054A064B704700007D240008A5
-:1001C000C1000008703C00207046002070400020F4
-:1001D0007040002001E004C0091F0429FBD28B07F6
+:1001C000C1000008603D0020604700206041002021
+:1001D0006041002001E004C0091F0429FBD28B0705
:1001E00001D50280801CC90700D002707047002929
:1001F0000BD0C30702D00270401C491E022904D351
:10020000830702D50280801C891EE3E70022EEE707
@@ -124,7 +124,7 @@
:1007A0004C00D4420AD15C00D4420BD04B4002D55D
:1007B00092021143E2E749004908DFE75940C90FB7
:1007C000C90718E000200849D8E7054801420DD1C3
-:1007D0000342F7D0F2E700000000FF07483B0000AB
+:1007D0000342F7D0F2E700000000FF07983D000059
:1007E0000000F07F0000E0FF0000F87F1148594052
:1007F0000143C01241400020C0E70123089A9B0634
:100800009A4205DC032252078918C90FC907B5E7C8
@@ -193,7 +193,7 @@
:100BF000AB42F9D84900A942F6D8AB4201D1A9428B
:100C0000F2D0A94201D1002101E061004908D005DC
:100C10000843F0BD1102090EFBD0FF200243D005AE
-:100C2000F0BD0A460146104654E70000FE340000BD
+:100C2000F0BD0A460146104654E700004E3700006A
:100C30000000C07F0102C21504D00123DB07194365
:100C4000002A0ADB9E239A1A02D40846D040704735
:100C5000FF2241001206914201D900207047C017BF
@@ -208,11 +208,11 @@
:100CE00000274908B6460026C0C5C0C5C0C5C0C556
:100CF000C0C5C0C5C0C5C0C5403D49008D46704790
:100D000010B50446C046C0462046FFF724FA10BD81
-:100D100000487047103C002001491820ABBEFEE798
+:100D100000487047003D002001491820ABBEFEE7A7
:100D20002600020070470000024600BF002A03D1DF
:100D30000348018000BFFEE700BF012070470000AC
-:100D4000C400002010B5024807C801F057FD10BDCF
-:100D50008400002010B50249086802F087FC10BD2D
+:100D4000D000002010B5024807C801F057FD10BDC3
+:100D50008C00002010B50249086802F0AFFD10BDFC
:100D6000003A002000BFFEE770B504460D4600269D
:100D7000204600F019F8002810D1A96868680843D7
:100D8000E9680843E168074A11400843E0602069C8
@@ -225,32 +225,32 @@
:100DF0003CC2FEFFC268920892000A43C26070477C
:100E00008168024A1140091D81607047E8FFFF7F39
:100E100010B54A1E044B9A5C825853085B004A1E68
-:100E2000014CA25C835010BD2B3F000810B54A1E38
+:100E2000014CA25C835010BD7B41000810B54A1EE6
:100E3000044B9A5C825801231A434B1E014CE35C1D
-:100E4000C25010BD2B3F000810B54A1E044B9A5CDF
+:100E4000C25010BD7B41000810B54A1E044B9A5C8D
:100E5000825802231A434B1E014CE35CC25010BD62
-:100E60002B3F000830B54B1E054CE35CC3580324F0
+:100E60007B41000830B54B1E054CE35CC35803249E
:100E70002403A34313434C1E014D2C5D035130BD8D
-:100E8000923E000830B54B1E064CE35C1B185B68B5
+:100E8000E240000830B54B1E064CE35C1B185B6863
:100E90001B0C1B0413434C1E024D2C5D2418636075
-:100EA00030BD00002B3F000830B54B1E054CE35C05
+:100EA00030BD00007B41000830B54B1E054CE35CB3
:100EB000C358054C234013434C1E024D2C5D035177
-:100EC00030BD0000923E0008EFBFFFFF10B54B1E83
-:100ED000024CE35C1B18DA6010BD00002B3F0008D9
+:100EC00030BD0000E2400008EFBFFFFF10B54B1E31
+:100ED000024CE35C1B18DA6010BD00007B41000887
:100EE00030B54B1E054CE35CC3588024A343134329
-:100EF0004C1E024D2C5D035130BD0000923E000897
+:100EF0004C1E024D2C5D035130BD0000E240000845
:100F000030B54B1E054CE35CC3580324A402A34335
-:100F100013434C1E014D2C5D035130BD923E000821
+:100F100013434C1E014D2C5D035130BDE2400008CF
:100F200030B54B1E054CE35CC3582024A343134348
-:100F30004C1E024D2C5D035130BD0000923E000856
+:100F30004C1E024D2C5D035130BD0000E240000804
:100F400010B54B1E024CE35C1B189A6010BD0000EC
-:100F50002B3F000830B54B1E054CE35CC3584024C2
+:100F50007B41000830B54B1E054CE35CC358402470
:100F6000A34313434C1E024D2C5D035130BD0000C2
-:100F7000923E000830B5A8231B584C1EA5000F2434
+:100F7000E240000830B5A8231B584C1EA5000F24E2
:100F8000AC40A3434C1EA5001446AC402343A82408
:100F9000235030BD30B54B1E054CE35CC3580324D1
:100FA0002402A34313434C1E014D2C5D035130BD5D
-:100FB000923E0008024949688143014A51607047E6
+:100FB000E2400008024949688143014A5160704794
:100FC00000040140024909688143014A11607047E9
:100FD00000040140024949680143014A51607047D9
:100FE000000401400249C9680143014AD1607047C9
@@ -388,7 +388,7 @@
:1018200008400121090708430E49886000BF10499C
:1018300010480068FEF7EEFC0A2148430546FEF713
:10184000E9FC044600E0641E002CFCD110B070BD21
-:101850000010024000080050800002404C3E00088A
+:101850000010024000080050800002409C40000838
:10186000EFBFFFFF0024014008270140E8FFFF7F92
:10187000400D03000000002008B501200C49096B51
:1018800001430B4A11631146096B0140009100BFEF
@@ -485,8 +485,8 @@
:101E30000B4AD1621146C96A0140019100BF00BF3F
:101E40004003029002200390002004900590069029
:101E50000620079002A90748FFF73AF910B070BDB5
-:101E600000100240E703000000080140763E000831
-:101E70007D3E00080004005000B585B000200190B0
+:101E600000100240E703000000080140C6400008DF
+:101E7000CD4000080004005000B585B0002001905E
:101E800002900390049010201649896B0143154A73
:101E900091631146896B0140009100BF00BF002192
:101EA000112000F0C3FB112000F03CFB0E486946F6
@@ -543,12 +543,12 @@
:1021D000B0434E683603304304465560D361886887
:1021E000106400BF1462002070BD7047014600BF3C
:1021F0000548C068F022104010400009034A125CF4
-:102200000846D0407047000000100240B53E00086C
+:102200000846D04070470000001002400541000819
:10221000014600BF0548C068072212021040000AAC
:10222000034A125C0846D04070470000001002408C
-:10223000C53E0008014600BF0548C0680722D2021B
+:1022300015410008014600BF0548C0680722D202C8
:102240001040C00A034A125C0846D04070470000A4
-:1022500000100240C53E000810B500BF1648C06817
+:10225000001002401541000810B500BF1648C068C4
:102260000C210840002806D004280CD0082812D0E1
:102270000C2816D111E0FFF769F8400B401C012132
:102280008140CC0315E0FFF74FF8002801D00B4C3C
@@ -562,7 +562,7 @@
:10230000461C0748C0680F2189040840800C084912
:10231000085C604307463146FDF77CFFF8BD0000CE
:102320000010024000093D000024F40000127A0071
-:10233000CD3E00087047704710B501204B49096831
+:102330001D4100087047704710B501204B490968DE
:1023400081430143494A116000BF00BF00BF4748B5
:102350000068C007C00F0028F8D00120C00244491F
:1023600009680322D20291430143414A116000BF30
@@ -584,12 +584,12 @@
:10246000044A4032D16000BF10BD0000002002408D
:1024700000700040001002400048E8017047000072
:1024800010B50848FEF7BEFF00280AD006480068CD
-:1024900001F010F800BF0120C0430249086100BFED
+:1024900001F0D2F800BF0120C0430249086100BF2B
:1024A00000BF10BD000801407C00002010B50A48A4
:1024B000FEF7A8FF00280DD000BF08480068401CA8
:1024C0000649086000BF00BF0120C04302490861FF
:1024D00000BF00BF10BD00000010004060000020E1
-:1024E00010B50249086801F0D9F910BD003A002082
+:1024E00010B50249086801F001FB10BD003A002058
:1024F00030B47446641E2578641CAB4204D3635D1B
:102500005B00E31830BC18471D46F8E7002805DBE0
:10251000C206D20E01219140014A116070470000AD
@@ -627,10 +627,10 @@
:1027100010BD000000E100E01CED00E0EFF31080D0
:10272000704780F31088704701460846103000E07B
:10273000001D0268002A03D1024A12689042F7D3B2
-:10274000704700002400002010B50648046803E02C
+:10274000704700002800002010B50648046803E028
:102750002046FFF7E9FF0446034800688442F7D3A8
-:1027600010BD0000200000202400002010B5044609
-:102770002146002000F0E6FC10BD10B501E001701C
+:1027600010BD0000240000202800002010B5044601
+:102770002146002000F084FD10BD10B501E001707D
:10278000401C1346541EA2B2002BF8D110BD0FB44A
:102790006A46908800990A690240824201D101226A
:1027A00000E00022D0B204B070470FB46A469188AE
@@ -660,387 +660,424 @@
:10292000DA6000BF029901984A1E2B469A5C8258D1
:1029300001231A434B1EEB5CC25000BF032C02D193
:102940000098FEF75DFAFEBD75000020E8FFFF7FEE
-:10295000083F00082038002038B5044600200090C9
-:102960002068002802D01D2834D129E000BF00F0E3
-:10297000EBF81B49886000F0EFFD0546FEF75AF9B9
-:102980001749486000F0D9F81549486100F0F8FB94
-:102990000546FEF74FF91249086100F0C7F81049E3
-:1029A000086200F073F80546FEF744F90C49C86167
-:1029B00000BF0C480068606000BF1D20206000BFA1
-:1029C000084960680968081A0A2801D2002038BD41
-:1029D00000BFCCE70020206000900320F7E7000054
-:1029E000A00000206000002010B500F0F3FA00F015
-:1029F0007DF810BD10B500F087F810BD10B50020AF
-:102A00000F49086000F002FB00F092FA0D4807C879
-:102A1000FFF736FF00F0B8F900BF00BF0A480068B2
-:102A2000012108430849086000BF00BF0846C0688C
-:102A3000012108430449C86000BF00BF10BD000069
-:102A40007C0000208400002000100040F8B50446FF
-:102A50000026022500F078F80090FF2020706670B4
-:102A60000020A070E070257168460088FF210902EF
-:102A700008400112684600880002081881B20091DF
-:102A80002A466946601D00F00DFAF8BDF8B500242D
-:102A9000002500F04BF80646FEF710F904468B219E
-:102AA000C9052046FEF716F806460C4901F00EF956
-:102AB00005460B49284601F061F90A490090FEF7E6
-:102AC00009F807468321C905FEF704F806460649BA
-:102AD00001F0FCF805462846F8BD000000803B45A3
-:102AE00000001644000016430000964300200349EE
-:102AF0000860034908600349086070470800002027
-:102B0000100000201800002010B50548FFF724FF32
-:102B1000044800F0FDFC044800F064F910BD00001A
-:102B200008000020100000201800002010B504202C
-:102B3000FFF78AFE0446204610BD10B50320FFF7BC
-:102B400083FE0446204610BD10B50920FFF77CFE29
-:102B50000446204610BD0000F8B505460E4618276D
-:102B60003946002000F0EEFA0446002C01D0012185
-:102B700000E0002108463621FEF7D6F82560A68041
-:102B80000448A0600448E060044820610448606193
-:102B90002046F8BDBB270008AB270008CB2700085C
-:102BA0008F27000870B504460D46002C01D0012186
-:102BB00000E0002108464321FEF7B6F8002D01D0C1
-:102BC000012100E0002108464421FEF7ADF8A0787D
-:102BD000002802D001280AD104E02946204600F04E
-:102BE0001FFB05E02946204600F0D6F900E000BFB3
-:102BF00000BF70BDF8B504460F46002C01D001217E
-:102C000000E0002108463721FEF78EF82579681D7F
-:102C1000C6B232462146024800F044F9F8BD000031
-:102C2000143A0020F8B50646002E01D0012100E03C
-:102C3000002108465621FEF777F8104C00270020A7
-:102C400000903079401DC5B22A463146204600F03A
-:102C500029F97819C7B2681E81B2601C00F0E1FF43
-:102C6000E055781CC7B23C20E055A81CC0B20090CB
-:102C70002046009900F07CF8F8BD00001E3B0020C3
-:102C8000FEB504460D4601200190002600270020D5
-:102C900000902078FF2806D16078002803D1681EB4
-:102CA000205C3C2803D0002001900198FEBD2079D3
-:102CB000C01DC6B2AE4203D0002001900198F5E7D6
-:102CC000A81E275CE81E81B2601C00F0AAFF0090DD
-:102CD0000098874203D0002001900198E6E7019810
-:102CE000E4E70000F8B507460C46154600262946DD
-:102CF0002046FFF7C5FF0646012E0AD10548007899
-:102D0000002806D129462046FFF774FF012001491B
-:102D10000870F8BD7800002070B5114800780128CF
-:102D200000D170BD0F4D104C21462846FFF73AFFE9
-:102D30002046FFF777FFF02200210C48FFF71DFD2A
-:102D4000852200212846FFF718FD85220021204614
-:102D5000FFF713FD00200249087000BFE1E7000003
-:102D600078000020143A0020993A00201E3B0020F1
-:102D700070B504460D4603492A460868214600F00E
-:102D8000DFFE70BD003A00200EB512480068002832
-:102D90001FD1F0210122104B0092019102900A46AE
-:102DA00001210E4800F018FC0A490860002009685B
-:102DB00008700B48074909688860032005490968BD
-:102DC000C86002200349096808610249086800F0E8
-:102DD00037FE0EBD003A0020E52C00080038014007
-:102DE0000000024038B5044600200090206800280A
-:102DF00002D0332819D10EE000BF7D20C00000F0C2
-:102E0000EFF90C49087000BF0B480068606000BF14
-:102E10003320206000BF084960680968081A6428E8
-:102E200001D2002038BD00BFE7E7002020600090FD
-:102E30000320F7E7040000206000002008B501200F
-:102E40001749496B0143164A51631146496B0140CA
-:102E5000009100BF00BF00071146896B01439163D9
-:102E60001146896B0140009100BF00BF0321081F7C
-:102E7000FFF764FBFFF760FAFEF71CFDFEF7FCFCB2
-:102E8000FEF7DAFBFFF734F8FEF7F6FFFEF742FF36
-:102E9000FFF7B4FDFFF7A8FD01E0FFF7ABFDFCE78E
-:102EA0000010024010B503E00B780370491C401C71
-:102EB0001346541EA2B2002BF6D110BD70B50546C4
-:102EC00044263146002000F03DF90446002C01D094
-:102ED000012100E0002108466521FDF725FF20467D
-:102EE0000021442201E00170401C1346561EB2B27C
-:102EF000002BF8D100BF2570012D0AD10749E162EE
-:102F000007492163074961630749A16307492164B0
-:102F100001E0002070BD00BF2046FBE74F320008F3
-:102F2000A332000863340008F73300086134000856
-:102F300010B598B00120FFF7C1FF134908601822AF
-:102F4000124912A8FDF70EF91822104918310CA8E1
-:102F5000FDF708F910200E490E4A09920A910B90CC
-:102F600018220CA903A8FDF7FDF815A807C86B46A1
-:102F700007C305480068C46A034812A90EC900685F
-:102F8000A04718B010BD00007C000020743F00086E
-:102F9000000801400AD7A33C70B504460D46002C3A
-:102FA00001D0012100E000210846BC21FDF7BCFE54
-:102FB000E078002806D0012805D0032804D0042892
-:102FC00004D102E003E002E001E000E000BF00BF46
-:102FD00070BD000010B508242146002000F0B2F8B2
-:102FE000094908600968002901D0012100E0002199
-:102FF0000846B521FDF798FE082200210248006826
-:10300000FFF7BBFB10BD00008000002010B5044698
-:10301000A1000C4B59584A00A3000B49C858002185
-:1030200000F0A4F8A100094B5A58A300064908393A
-:10303000C858002100F09AF80121034808300155D2
-:1030400010BD0000F03E000854000020003F0008C2
-:10305000F3B581B004460025002000902548005DAE
-:10306000002804D123481838016820468847029870
-:10307000002801D1401EFEBDA0001F4A1158029831
-:10308000FDF7C8F80646A0001B4A11580298FDF744
-:10309000C1F8002900D0761CA00018490858451E28
-:1030A00022E0A1001348083840586900405A00281F
-:1030B00003D10098401C009001E00020009000988F
-:1030C000B04210D1002707E0A2000A480838805813
-:1030D000EA19520086527F1CB742F5D3A000064978
-:1030E00008586843C7E76D1E002DDADA0020C04398
-:1030F000C1E700005C000020F83E0008F03E000838
-:1031000070B504460026002508E0A1000B48405891
-:103110006900405A002800D0761C6D1CA0000849A8
-:103120000858A842F1D8A2000B469958642272436D
-:103130001046FDF76FF8C0B270BD000054000020CB
-:10314000F03E000870B504460E4631462046FFF7B3
-:103150007FFF0546681C002800D170BDA100024811
-:1031600040584019F9E700004C00002030B50346F4
-:1031700001E019705B1C1446521E002CF9D130BDC1
-:10318000F8B500240025FFF7D8FC0646FDF796FDAC
-:1031900004468B21C9052046FDF79CFC06460C49D8
-:1031A00000F094FD05460B49284600F0E7FD0A496A
-:1031B0000090FDF78FFC07468321C905FDF78AFCC7
-:1031C0000646064900F082FD05462846F8BD000087
-:1031D00000803B45000016440000164300007A447E
-:1031E000F8B5044600252046FDF768FD06460A4866
-:1031F0000068FDF763FD07463146FDF76BFC0546A9
-:103200000020054908600549284600F05FFD064694
-:10321000FDF710FDF8BD0000700000200000C8425E
-:1032200070B505460C46E878002806D0012808D07D
-:10323000022807D0032807D105E02046FFF706FC47
-:1032400003E002E001E000E000BF00BF70BD0FB48A
-:10325000F8B5044613ADE0CD002C01D0012100E00B
-:10326000002108460621FDF75FFD6A46118C07988C
-:10327000FFF772FC60606A46118F0D98FFF76CFCD7
-:10328000A060E6602761656100BFE068FEF770F846
-:103290002169E068FEF768F800BFF8BC08BC04B01C
-:1032A0001847F3B585B00546002D01D0012100E097
-:1032B000002108461121FDF737FD2C1D002C01D0FF
-:1032C000012100E0002108461321FDF72DFD06989D
-:1032D000207601216176069800283ED12168086990
-:1032E00049690191009020680490206880680390EB
-:1032F0000C21049841180A7813464A7812021343A5
-:103300008A7812041343C97809060B43082141182F
-:103310000E7832464E78360232438E783604324387
-:10332000C97809060A430779394647793F02394384
-:1033300087793F043943C6793606314306463778E4
-:10334000384677783F023843B7783F043843F678F9
-:1033500036063043039EB0473DE02168086949695D
-:1033600001910090206804902068C06803900C21AF
-:10337000049841180A7813464A78120213438A784F
-:1033800012041343C97809060B43082141180E782B
-:1033900032464E78360232438E7836043243C9784C
-:1033A00009060A430779394647793F023943877945
-:1033B0003F043943C67936063143064637783846E6
-:1033C00077783F023843B7783F043843F6783606BB
-:1033D0003043039EB04700BFA0680168012211433B
-:1033E000016000BFE168A068026A0A43026200BF90
-:1033F00000BF07B0F0BDFEB505460E461746002DCE
-:1034000001D0012100E0002108462B21FDF78CFCB2
-:103410002C1D002C01D0012100E0002108462D21A7
-:10342000FDF782FC607E012800D1FEBD3046FDF72D
-:1034300045FC00902169FDF74DFB0190FDF7FAFB7B
-:10344000E06100216162E069002803D12846216B18
-:10345000884703E039462846E26A904700BFE4E720
-:10346000704770B50546002D01D0012100E0002114
-:1034700008461C21FDF758FC2C1D002C01D0012111
-:1034800000E0002108461E21FDF74EFC0021617678
-:103490006161E16100BFA068FDF76AFFE168A068B3
-:1034A000FDF762FF00BFA06B002802D02846A16B89
-:1034B000884770BD70B50546002D01D0012100E0A0
-:1034C000002108464C21FDF72FFC2C1D002C01D0BB
-:1034D000012100E0002108464E21FDF725FCE069AE
-:1034E000401EE061606A401C6062207E012803D1BA
-:1034F000206A401C206202E0206A401E2062E069CF
-:10350000002804D100BF00BF2846216B884770BD4A
-:1035100038B50446002000902068002802D02828F2
-:1035200013D10AE000BFFFF7F7FB00BF09480068AE
-:10353000606000BF2820206000BF064960680968FD
-:10354000081A00D138BD00BFEDE7002020600090D0
-:103550000320F7E760000020F0B587B000240020CA
-:103560000690FFF7F1FA0546FDF7A8FB04468B210C
-:10357000C9052046FDF7AEFA0546114900F0A6FB45
-:1035800006901049069800F0F9FB0F490190FDF7ED
-:10359000A1FA0746FDF774FA05460C4A0C4BFCF7F6
-:1035A00027FF00220B4B03910290FDF745F905918F
-:1035B0000490FCF7DFFE0690069807B0F0BD00000F
-:1035C00000803B450080BB440000CA426891ED7C0E
-:1035D0003F35174000002440FFB581B00646154630
-:1035E0000B9F002E01D0012100E00021084684211C
-:1035F000FDF79AFB3420FFF7B9F80446002C01D000
-:10360000012100E0002108468721FDF78DFB049889
-:10361000E062A5830C9820632785002D0DDD2846E8
-:10362000FFF7A4F8A061A169002901D0012100E001
-:10363000002108469621FDF777FB002F0DDD384667
-:10364000FFF794F86062616A002901D0012100E06F
-:10365000002108469D21FDF767FB0298A0752021F7
-:103660000A9808556660204605B0F0BD70B504465E
-:10367000002C01D0012100E000210846FF216B3120
-:10368000FDF752FB2169A068FDF7C2FB206903002A
-:10369000FEF72EFF0873051423334353637300BFF3
-:1036A000A0680168022211404908002904D0A068DE
-:1036B0000221416000BF00BF00BF5FE000BFA06803
-:1036C0000168202211404909002904D0A068202166
-:1036D000416000BF00BF00BF50E000BFA0680168AC
-:1036E000012252021140490A002904D0A068114663
-:1036F000416000BF00BF00BF40E000BFA06801689C
-:10370000012252031140490B002904D0A068114640
-:10371000416000BF00BF00BF30E000BFA06801688B
-:10372000012252041140490C002904D0A06811461E
-:10373000416000BF00BF00BF20E000BFA06801687B
-:10374000012252051140490D002904D0A0681146FC
-:10375000416000BF00BF00BF10E000BFA06801686B
-:10376000012252061140490E002904D0A0681146DA
-:10377000416000BF00BF00BF00E000BF00BF656840
-:1037800000BF00BFFEF7CAFF06460120FEF7C9FFD3
-:1037900028684021084328603046FEF7C2FF00BF7A
-:1037A00000BF01212A20015520690300FEF7A0FE79
-:1037B0000873051423334353637300BFA068016883
-:1037C00008221140C908002904D0A06808214160DE
-:1037D00000BF00BF00BF5FE000BFA068016880229B
-:1037E0001140C909002904D0A0688021416000BFB0
-:1037F00000BF00BF50E000BFA06801680122D202F4
-:103800001140C90A002904D0A0681146416000BFD8
-:1038100000BF00BF40E000BFA06801680122D203E2
-:103820001140C90B002904D0A0681146416000BFB7
-:1038300000BF00BF30E000BFA06801680122D204D1
-:103840001140C90C002904D0A0681146416000BF96
-:1038500000BF00BF20E000BFA06801680122D205C0
-:103860001140C90D002904D0A0681146416000BF75
-:1038700000BF00BF10E000BFA06801680122D206AF
-:103880001140C90E002904D0A0681146416000BF54
-:1038900000BF00BF00E000BF00BF70BD70B50446B0
-:1038A000002C01D0012100E000210846FF21243135
-:1038B000FDF73AFA606801682022114049090029A1
-:1038C0001BD06068C16911404909002915D06068A2
-:1038D000416AC9B2A28A501CA082A0698154A07D0D
-:1038E000002851D1E06A002804D0A28A2078E36A37
-:1038F000A16998470020A08246E060680168102214
-:103900001140090900293FD06068C16911400909C7
-:10391000002939D0A07D012831D1E168A068FDF7E8
-:1039200077FAE168A0684A1E444B9A5C1218526804
-:10393000A08B801AA082E06A002817D0A08A0028F5
-:1039400014DDA08AA18B884210DCA28A2078E36A69
-:10395000A16998470021A28BA06901E00170401C79
-:103960001346551EAAB2002BF8D100BFA28BE16806
-:10397000A068FDF787FAE168A068FDF757FA002014
-:10398000A0826068FDF77AFD6068016840221140FE
-:10399000890900290ED06068FDF728FE002809D0AB
-:1039A000206B002801D0206B8047606840210162B5
-:1039B00000BF00BF60680168FF2201321140090AA0
-:1039C00000290DD06068C169C907C90F01225140A3
-:1039D0005140002904D060680121016200BF00BF8E
-:1039E0006068FDF7F1FD002809D06068FDF7ECFD87
-:1039F000002804D060680221016200BF00BF606837
-:103A0000FDF7E8FD002809D06068FDF7E3FD002818
-:103A100004D060680421016200BF00BF6068FDF748
-:103A2000DFFD002809D06068FDF7DAFD002804D02A
-:103A300060680821016200BF00BF70BD2B3F000815
-:103A400070B50446A07D002803D16068FDF722FD13
-:103A500075E06068FDF712FD6068FDF71BFD2169E8
-:103A6000A068FDF7D5F9E168A068FDF7D1F901215B
-:103A70006068FDF706FD05462A46E168A068FDF787
-:103A80005FFAA269E168A068FDF720FAA28BE168FD
-:103A9000A068FDF7F7F9E168A068FDF7D5F9E168DE
-:103AA000A068FDF7C3F9656800BF00BFFEF736FEEA
-:103AB00006460120FEF735FEA86840210843A860AD
-:103AC0003046FEF72EFE00BF00BF656800BF00BF96
-:103AD000FEF724FE06460120FEF723FE286810218B
-:103AE000084328603046FEF71CFE00BF00BF0021DF
-:103AF0006068FDF7C6FC05462A462169A068FDF707
-:103B00001FFA626A2169A068FDF7E0F92169A068DF
-:103B1000FDF79AF9656800BF00BFFEF7FFFD064696
-:103B20000120FEF7FEFDA86880210843A86030460A
-:103B3000FEF7F7FD00BF00BF01212A20015570BD2F
-:103B4000F8B504460D461646002C01D0012100E0D0
-:103B500000210846F321FDF7E7F8002D01D00121EF
-:103B600000E000210846F421FDF7DEF8002E01DD1B
-:103B7000012100E000210846F521FDF7D5F80027D6
-:103B80002020005D012823D12A20005D01281FD1BB
-:103B900000212A2001552946606A009603E00A7830
-:103BA0000270491C401C009A531E9BB20093002ACD
-:103BB000F5D100BF2169A068FDF72AF932462169D5
-:103BC000A068FDF75FF92169A068FDF72FF926E0ED
-:103BD0000027002014E0002705E039467A1CD7B200
-:103BE000FE2900DBF8BD6168CA6980231A40D2094A
-:103BF000002AF2D02A5C61688A6200BF411C88B248
-:103C0000B042E8DB002705E03846791CCFB2FE2839
-:103C100000DBE7E76068FDF7E9FC0028F4D000BFAF
-:103C2000E0E730B5024614460020002304E0257882
-:103C30006840641C5D1CABB28B42F8DB30BD0000F9
-:103C400070B501250400ED074C4020D4441A01D280
-:103C5000001B0919C60D4B00F2B2FF2A29D01B0E1A
-:103C60002CD000020C02D31A2C43DC402843051947
-:103C700010D2280A02D3401C6D0611D0761EF6051C
-:103C80008019FF2A00DA70BDC00DC00570BD694003
-:103C900000F07AF801200543C541521C761CE8E784
-:103CA00064089C40C90161408900E7D10124A04318
-:103CB000E4E71B0E440200D0034870BD002AFCD18B
-:103CC000C00FC00770BD00BF0000C07F70B54200CC
-:103CD00064414B005C41120E39D01B0E38D0FF2AD4
-:103CE0003CD0FF2B3AD040024902400A490A060064
-:103CF00045184E43000A090AD2184843ED017F3A9D
-:103D00000104731A4019190C4318990F04D00121AA
-:103D10005B0849075B1A521CD80904D3401CF50301
-:103D200001D19D0607D0FF2A08D2D50506D0E407A9
-:103D30002043401970BD0125A843F4E7002A01DCA7
-:103D4000E00770BD2402FF202043C00570BD1B0E9C
-:103D5000FF2A03D0FF2B01D0E00770BDFF264500EE
-:103D60003606B54206D84D00B54203D8D218FF2A10
-:103D700000D0E7E7004870BD0000C07F70B50125A6
-:103D80000400ED074C4022D4441A02D26C40001BC0
-:103D90000919C60D4B00F2B2FF2A4BD01B0E50D0B2
-:103DA00000020C02D31A2C43DC40A843051B05D5A6
-:103DB000AD0019D36D08761E521E37D0F605280ABD
-:103DC00001D2801970BD70416D0603D070BD69408D
-:103DD000FFF73CFF9C4009026140490001D0401EB2
-:103DE00070BD0124A04370BD6D081DD001202B0CB7
-:103DF00001D12D0410302B0E01D12D0208302B0FD4
-:103E000001D12D01001DAB0F01D1AD00801CEB0FC6
-:103E100001D16D00401C6D00361A121A680AF505B2
-:103E20004019012A02DB70BD002070BDC036300A87
-:103E3000C00770BD1B0E440201D1FF2B00D1024808
-:103E400070BD002AF0D070BD0000C07F081C304457
-:103E5000586C80000000000400040000080000000E
-:103E600008000008000000080000040008000C081A
-:103E70001C3044586C80000000000400040000085E
-:103E8000000000080000080000000800000400080E
-:103E9000000C081C3044586C800000000004000432
-:103EA00000000800000008000008000000080000F2
-:103EB000040008000C0000000000000000010203E4
-:103EC00004060708090000000001020304030406B9
-:103ED000080C101820305F6C697374006C6973747F
-:103EE00020616C6C20636F6D6D616E64000000007A
-:103EF000A0010000010000002000000020000000E0
-:103F00000034000020000000081C3044586C800081
-:103F10000000000400040000080000000800000881
-:103F2000000000080000040008000C081C30445881
-:103F30006C8000000000040004000008000000087D
-:103F4000000008000000080000040008000C000049
-:103F5000081C3044586C800000000004000400007D
-:103F6000080000000800000800000008000004002D
-:103F700008000C00000400500020000000000000B9
-:103F800000000000000000000000000000040050DD
-:103F90000010000000000000000000000000000011
-:103FA0000000000080807F7E7D7C7B7A7978777648
-:103FB00076757473727171706F6E6E6D6C6C6B6A06
-:103FC0006A696868676666656464636362616160A4
-:103FD000605F5F5E5E5D5D5C5C5B5B5A5A59595821
-:103FE000585757565655555554545353525252518B
-:103FF000515050504F4F4F4E4E4D4D4D4C4C4C4BE1
-:104000004B4B4A4A4A494949484848474747474627
-:104010004646454545444444444343434342424263
-:10402000424141418182838485868788898B8C8D3A
-:104030008E8F919293959697999A9C9D9FA0A2A3FB
-:10404000A5A7A8AAACAEB0B2B3B5B7B9BCBEC0C242
-:10405000C5C7C9CCCED1D4D7D9DCDFE2E6E9ECF0D4
-:10406000F3F7FAFE8440000800000020A0000000E2
-:104070000401000824410008A0000020D0450000F1
-:1040800020010008000020000000000000000000E7
-:104090000000000000000000000000000000000020
-:1040A0000000000000000000000000000000000010
-:1040B0000000000000000000000000000000000000
-:1040C00000000000000000000D3000080131000871
-:1040D000E000002040000020E034002042000020EA
-:1040E00000000000000000000000000000000000D0
-:1040F00000000000000000000000000000000000C0
-:104100000000000000000000002401400000024008
-:1041100001000000D63E0008DC3E0008C6E533B4CE
-:044120004927000823
+:10295000584100082038002038B504460020009077
+:102960002068002802D0222858D14DE000BF00F096
+:1029700011F92D49886000F017FF0546FEF75AF956
+:102980002949486008468068FF2109020840001272
+:1029900025498968090240182449088000F0F3F8A5
+:1029A0002149486100F08AFC0546FEF743F91E49BB
+:1029B000086108464069FF210902084001121A48CF
+:1029C0004069000208181949488000F0D5F81649F6
+:1029D000086200F081F80546FEF72CF91249C8613B
+:1029E0000846006AFF210902084001120E48006AE9
+:1029F000000208180D49888000BF0D48006860601B
+:102A000000BF2220206000BF094960680968081AD9
+:102A10000A2801D2002038BD00BFA8E700202060AE
+:102A200000900320F7E70000AC00002084000020A5
+:102A30006000002010B500F06BFB00F07DF810BDC9
+:102A400010B500F087F810BD10B500200F490860E0
+:102A500000F07AFB00F0B6FA0D4807C8FFF710FF48
+:102A600000F0BEF900BF00BF0A480068012108431A
+:102A70000849086000BF00BF0846C068012108433C
+:102A80000449C86000BF00BF10BD00007C000020EA
+:102A90008C0000200010004070B505460E4614461C
+:102AA000002E01D0012100E000210846FF21C231A3
+:102AB000FEF73AF9002C01D0012100E00021084680
+:102AC000FF21C331FEF730F985223146204600F060
+:102AD00015FA657070BD0000F8B50024002500F0FF
+:102AE0004BF80646FEF7EAF804468B21C905204656
+:102AF000FDF7F0FF06460C4901F010FA05460B49B8
+:102B0000284601F063FA0A490090FDF7E3FF074603
+:102B10008321C905FDF7DEFF0646064901F0FEF9EF
+:102B200005462846F8BD000000803B4500001644DD
+:102B30000000164300009643002003490860034943
+:102B400008600349086070470C0000201400002052
+:102B50001C00002010B50548FFF7FEFE044800F0F9
+:102B600099FD044800F06AF910BD00000C00002037
+:102B7000140000201C00002010B50420FFF764FEA4
+:102B80000446204610BD10B50320FFF75DFE044645
+:102B9000204610BD10B50920FFF756FE044620461A
+:102BA00010BD0000F8B505460E461827394600202E
+:102BB00000F066FB0446002C01D0012100E000215A
+:102BC00008463621FEF7B0F82560A6800448A060CC
+:102BD0000448E06004482061044860612046F8BD74
+:102BE000BB270008AB270008CB2700088F27000869
+:102BF00070B504460D46002C01D0012100E00021F3
+:102C000008464421FEF790F8002D01D0012100E094
+:102C1000002108464521FEF787F8A078002802D059
+:102C200001280AD104E02946204600F097FB0AE07B
+:102C30002946204600F022FA05E02A4621460320D4
+:102C4000FFF72AFF00BF00BF70BD0000F8B50446C3
+:102C50000F46002C01D0012100E000210846382158
+:102C6000FEF762F82579681DC6B232462146024851
+:102C700000F044F9F8BD0000143A0020F8B506460B
+:102C8000002E01D0012100E0002108465821FEF766
+:102C90004BF8104C0027002000903079401DC5B241
+:102CA0002A463146204600F029F97819C7B2681E35
+:102CB00081B2601C01F0DDF8E055781CC7B23C2001
+:102CC000E055A81CC0B200902046009900F07CF8A6
+:102CD000F8BD00001E3B0020FEB504460D46012055
+:102CE000019000260027002000902078FF2806D1C0
+:102CF0006078002803D1681E205C3C2803D00020A7
+:102D000001900198FEBD2079C01DC6B2AE4203D02D
+:102D1000002001900198F5E7A81E275CE81E81B20B
+:102D2000601C01F0A6F800900098874203D00020B4
+:102D300001900198E6E70198E4E70000F8B507463E
+:102D40000C461546002629462046FFF7C5FF0646D5
+:102D5000012E0AD105480078002806D129462046D0
+:102D6000FFF774FF012001490870F8BD78000020CA
+:102D700070B511480078002800D170BD0F4D104C7F
+:102D800021462846FFF734FF2046FFF777FFF02261
+:102D900000210C48FFF7F1FC852200212846FFF7AF
+:102DA000ECFC852200212046FFF7E7FC00200249C9
+:102DB000087000BFE1E7000078000020143A00200E
+:102DC000993A00201E3B002070B504460D46034989
+:102DD0002A460868214600F0DBFF70BD003A00205B
+:102DE0000EB51248006800281FD1F0210122104BB7
+:102DF0000092019102900A4601210E4800F014FD54
+:102E00000A4908600020096808700B4807490968EA
+:102E10008860032005490968C860022003490968E1
+:102E200008610249086800F033FF0EBD003A002037
+:102E30003D2D0008003801400000024038B504462E
+:102E4000002000902068002802D0392819D110E015
+:102E500000BF00F043FC7D20C00000F05FFA0B498A
+:102E6000087000BF0A480068606000BF3920206019
+:102E700000BF074960680968081A00D138BD00BF63
+:102E8000E7E70020206000900320F7E7040000201F
+:102E90006000002008B501201749496B0143164A1C
+:102EA00051631146496B0140009100BF00BF00070C
+:102EB0001146896B014391631146896B0140009172
+:102EC00000BF00BF0321081FFFF738FBFFF734FAEC
+:102ED000FEF7F0FCFEF7D0FCFEF7AEFBFFF708F8BC
+:102EE000FEF7CAFFFEF716FFFFF7AEFDFFF7A2FDE4
+:102EF00001E0FFF7A5FDFCE70010024010B503E07C
+:102F00000B780370491C401C1346541EA2B2002BC0
+:102F1000F6D110BD70B5054644263146002000F0BC
+:102F2000AFF90446002C01D0012100E00021084641
+:102F30006521FDF7F9FE20460021442201E00170E1
+:102F4000401C1346561EB2B2002BF8D100BF2570AC
+:102F5000012D0AD10749E1620749216307496163ED
+:102F60000749A1630749216401E0002070BD00BF4B
+:102F70002046FBE7D93300082D340008E735000868
+:102F800081350008E5350008F8B505460C460B48C4
+:102F90000068061D0A480778012D09D1007800282D
+:102FA00006D1227861680548736B0068984703E092
+:102FB0000248316B006888473846F8BD7C00002025
+:102FC0000800002010B598B00120FFF7A3FF1349B7
+:102FD00008601822124912A8FDF7C4F818221049F7
+:102FE00018310CA8FDF7BEF810200E490E4A0992C0
+:102FF0000A910B9018220CA903A8FDF7B3F815A8A5
+:1030000007C86B4607C305480068C46A034812A98D
+:103010000EC90068A04718B010BD00007C00002059
+:10302000C4410008000801400AD7A33CF8B5054692
+:103030000C4600262879052802DA03263046F8BD1A
+:10304000687920700422A91D201DFFF757FF6068D2
+:10305000009000990A0EFF231B041940090A521818
+:103060001B120099194009025118009A120689187A
+:103070000091009961603046E1E70000F8B505462F
+:103080000C46002D01D0012100E000210846E2217C
+:10309000FDF74AFE002C01D0012100E00021084686
+:1030A000E321FDF741FE194807680026E87800286B
+:1030B00004D0012803D0022820D113E024E03946AF
+:1030C0002846FFF7B3FF0646002E04D139460120FB
+:1030D000FFF75AFF0646852229462046FFF70EFFD6
+:1030E000667011E039460020FFF74EFF0646852244
+:1030F00029462046FFF702FF667005E02246294672
+:103100000320FFF7C9FC00BF00BFF8BD800000200E
+:1031100010B508242146002000F0B2F809490860E3
+:103120000968002901D0012100E000210846DB21C7
+:10313000FDF7FAFD0822002102480068FFF71DFB99
+:1031400010BD00008000002010B50446A1000C4B0B
+:1031500059584A00A3000B49C858002100F0A4F8B0
+:10316000A100094B5A58A30006490839C858002144
+:1031700000F09AF8012103480830015510BD000005
+:10318000404100085400002050410008F3B581B0D0
+:1031900004460025002000902548005D002804D149
+:1031A000234818380168204688470298002801D132
+:1031B000401EFEBDA0001F4A11580298FDF72AF8D4
+:1031C0000646A0001B4A11580298FDF723F8002973
+:1031D00000D0761CA00018490858451E22E0A10026
+:1031E0001348083840586900405A002803D1009815
+:1031F000401C009001E0002000900098B04210D1E7
+:10320000002707E0A2000A4808388058EA1952004F
+:1032100086527F1CB742F5D3A00006490858684380
+:10322000C7E76D1E002DDADA0020C043C1E70000B9
+:103230005C000020484100084041000870B5044689
+:103240000026002508E0A1000B4840586900405ABC
+:10325000002800D0761C6D1CA00008490858A84220
+:10326000F1D8A2000B469958642272431046FCF72D
+:10327000D1FFC0B270BD00005400002040410008E2
+:1032800070B504460E4631462046FFF77FFF0546DF
+:10329000681C002800D170BDA100024840584019A8
+:1032A000F9E700004C00002030B5034601E019703A
+:1032B0005B1C1446521E002CF9D130BDF8B5002419
+:1032C0000025FFF760FC0646FDF7F8FC04468B215D
+:1032D000C9052046FDF7FEFB06460C4900F01EFE20
+:1032E00005460B49284600F071FE0A490090FDF79B
+:1032F000F1FB07468321C905FDF7ECFB06460649AD
+:1033000000F00CFE05462846F8BD000000803B4555
+:10331000000016440000164300007A44F8B5044645
+:1033200000252046FDF7CAFC06460A480068FDF75E
+:10333000C5FC07463146FDF7CDFB05460020054993
+:1033400008600549284600F0E9FD0646FDF772FCD5
+:10335000F8BD0000700000200000C84270B50546AE
+:103360000C46002D01D0012100E000210846FF217C
+:103370004D31FDF7D9FC002C01D0012100E00021E6
+:103380000846FF214E31FDF7CFFC0026E8780328E0
+:1033900001DD032600E000BFFF2020706670A878E2
+:1033A000A070E878E070E878032807DB0620207139
+:1033B00022790849601DFFF7A1FD09E00220207174
+:1033C0002279E0784000034BC118601DFFF796FD9D
+:1033D00070BD0000840000200FB4F8B5044613ADA2
+:1033E000E0CD002C01D0012100E00021084606219B
+:1033F000FDF79AFC6A46118C0798FFF7D3FB6060D3
+:103400006A46118F0D98FFF7CDFBA060E66027613B
+:10341000656100BFE068FDF7ABFF2169E068FDF77B
+:10342000A3FF00BFF8BC08BC04B01847F3B585B0D3
+:103430000546002D01D0012100E0002108461121A0
+:10344000FDF772FC2C1D002C01D0012100E00021B1
+:1034500008461321FDF768FC069820760121617665
+:10346000069800283ED121680869496901910090B9
+:10347000206804902068806803900C21049841180B
+:103480000A7813464A78120213438A7812041343C7
+:10349000C97809060B43082141180E7832464E7848
+:1034A000360232438E7836043243C97809060A431D
+:1034B0000779394647793F02394387793F043943D1
+:1034C000C6793606314306463778384677783F0264
+:1034D0003843B7783F043843F67836063043039EC6
+:1034E000B0473DE021680869496901910090206872
+:1034F00004902068C06803900C21049841180A7851
+:1035000013464A78120213438A7812041343C97887
+:1035100009060B43082141180E7832464E783602D0
+:1035200032438E7836043243C97809060A43077954
+:10353000394647793F02394387793F043943C67991
+:103540003606314306463778384677783F023843A7
+:10355000B7783F043843F67836063043039EB047C9
+:1035600000BFA068016801221143016000BFE1684B
+:10357000A068026A0A43026200BF00BF07B0F0BD44
+:10358000F8B505460E461746002D01D0012100E092
+:10359000002108462B21FDF7C7FB2C1D002C01D074
+:1035A000012100E0002108462D21FDF7BDFB607ED2
+:1035B000012800D1F8BD30462169FDF78BFA009053
+:1035C000FDF738FBE06100216162E069002803D16A
+:1035D0002846216B884703E039462846E26A90472F
+:1035E00000BFE7E7704770B50546002D01D0012107
+:1035F00000E0002108461C21FDF796FB2C1D002C45
+:1036000001D0012100E0002108461E21FDF78CFBBE
+:10361000002161766161E16100BFA068FDF7A8FE4D
+:10362000E168A068FDF7A0FE00BFA06B002802D0F3
+:103630002846A16B884770BD70B50546002D01D0A6
+:10364000012100E0002108464C21FDF76DFB2C1DF7
+:10365000002C01D0012100E0002108464E21FDF799
+:1036600063FBE069401EE061606A401C6062207E8E
+:10367000012803D1206A401C206202E0206A401E1B
+:103680002062E069002804D100BF00BF2846216BFA
+:10369000884770BD38B50446002000902068002897
+:1036A00002D02D2813D10AE000BFFFF761FB00BF55
+:1036B00009480068606000BF2D20206000BF0649F7
+:1036C00060680968081A00D138BD00BFEDE7002026
+:1036D000206000900320F7E76000002070B500250F
+:1036E0000F4C10480078032800DB70BD0D480078AF
+:1036F000012802D0022808D106E00A49487821466C
+:1037000000F02CF8054601E000E000BF00BF2946AC
+:10371000204600F009F800200249087000BFE4E7E5
+:103720000E3C00209800002070B504460D4600268F
+:1037300029462046FFF7D0FA0646012E0AD1064850
+:103740000078002806D129462046FFF77FFA01209D
+:103750000149087070BD000078000020F0B5A3B0EA
+:1037600006460D4600270024FF216846017100210E
+:1037700041718171C67101720524F0222846FEF75D
+:10378000FCFF224601A92846FFF7B8FB601E81B264
+:10379000681C00F06EFB2855641C3C202855641CF6
+:1037A0002746384623B0F0BDF0B587B0002400208E
+:1037B0000690FFF7EFF90546FDF780FA04468B21E6
+:1037C000C9052046FDF786F90546114900F0A6FB1C
+:1037D00006901049069800F0F9FB0F490190FDF79B
+:1037E00079F90746FDF74CF905460C4A0C4BFCF7F6
+:1037F000FFFD00220B4B03910290FDF71DF8059190
+:103800000490FCF7B7FD0690069807B0F0BD0000E5
+:1038100000803B450080BB440000CA426891ED7CBB
+:103820003F35174000002440FFB581B006461546DD
+:103830000B9F002E01D0012100E0002108468421C9
+:10384000FDF772FA3420FEF791FF0446002C01D0F8
+:10385000012100E0002108468721FDF765FA049860
+:10386000E062A5830C9820632785002D0DDD284696
+:10387000FEF77CFFA061A169002901D0012100E0D1
+:10388000002108469621FDF74FFA002F0DDD38463E
+:10389000FEF76CFF6062616A002901D0012100E03F
+:1038A000002108469D21FDF73FFA0298A0752021CE
+:1038B0000A9808556660204605B0F0BD70B504460C
+:1038C000002C01D0012100E000210846FF216B31CE
+:1038D000FDF72AFA2169A068FDF79AFA206903002A
+:1038E000FEF706FE0873051423334353637300BFCA
+:1038F000A0680168022211404908002904D0A0688C
+:103900000221416000BF00BF00BF5FE000BFA068B0
+:103910000168202211404909002904D0A068202113
+:10392000416000BF00BF00BF50E000BFA068016859
+:10393000012252021140490A002904D0A068114610
+:10394000416000BF00BF00BF40E000BFA068016849
+:10395000012252031140490B002904D0A0681146EE
+:10396000416000BF00BF00BF30E000BFA068016839
+:10397000012252041140490C002904D0A0681146CC
+:10398000416000BF00BF00BF20E000BFA068016829
+:10399000012252051140490D002904D0A0681146AA
+:1039A000416000BF00BF00BF10E000BFA068016819
+:1039B000012252061140490E002904D0A068114688
+:1039C000416000BF00BF00BF00E000BF00BF6568EE
+:1039D00000BF00BFFEF7A2FE06460120FEF7A1FED3
+:1039E00028684021084328603046FEF79AFE00BF51
+:1039F00000BF01212A20015520690300FEF778FD50
+:103A00000873051423334353637300BFA068016830
+:103A100008221140C908002904D0A068082141608B
+:103A200000BF00BF00BF5FE000BFA0680168802248
+:103A30001140C909002904D0A0688021416000BF5D
+:103A400000BF00BF50E000BFA06801680122D202A1
+:103A50001140C90A002904D0A0681146416000BF86
+:103A600000BF00BF40E000BFA06801680122D20390
+:103A70001140C90B002904D0A0681146416000BF65
+:103A800000BF00BF30E000BFA06801680122D2047F
+:103A90001140C90C002904D0A0681146416000BF44
+:103AA00000BF00BF20E000BFA06801680122D2056E
+:103AB0001140C90D002904D0A0681146416000BF23
+:103AC00000BF00BF10E000BFA06801680122D2065D
+:103AD0001140C90E002904D0A0681146416000BF02
+:103AE00000BF00BF00E000BF00BF70BD70B504465E
+:103AF000002C01D0012100E000210846FF212431E3
+:103B0000FDF712F960680168202211404909002977
+:103B10001BD06068C16911404909002915D060684F
+:103B2000416AC9B2A28A501CA082A0698154A07DBA
+:103B3000002851D1E06A002804D0A28A2078E36AE4
+:103B4000A16998470020A08246E0606801681022C1
+:103B50001140090900293FD06068C1691140090975
+:103B6000002939D0A07D012831D1E168A068FDF796
+:103B70004FF9E168A0684A1E444B9A5C12185268DB
+:103B8000A08B801AA082E06A002817D0A08A0028A3
+:103B900014DDA08AA18B884210DCA28A2078E36A17
+:103BA000A16998470021A28BA06901E00170401C27
+:103BB0001346551EAAB2002BF8D100BFA28BE168B4
+:103BC000A068FDF75FF9E168A068FDF72FF9002014
+:103BD000A0826068FDF752FC6068016840221140D5
+:103BE000890900290ED06068FDF700FD002809D082
+:103BF000206B002801D0206B804760684021016263
+:103C000000BF00BF60680168FF2201321140090A4D
+:103C100000290DD06068C169C907C90F0122514050
+:103C20005140002904D060680121016200BF00BF3B
+:103C30006068FDF7C9FC002809D06068FDF7C4FC86
+:103C4000002804D060680221016200BF00BF6068E4
+:103C5000FDF7C0FC002809D06068FDF7BBFC002818
+:103C600004D060680421016200BF00BF6068FDF7F6
+:103C7000B7FC002809D06068FDF7B2FC002804D02A
+:103C800060680821016200BF00BF70BD7B41000871
+:103C900070B50446A07D002803D16068FDF7FAFBEB
+:103CA00075E06068FDF7EAFB6068FDF7F3FB2169EA
+:103CB000A068FDF7ADF8E168A068FDF7A9F801215B
+:103CC0006068FDF7DEFB05462A46E168A068FDF75F
+:103CD00037F9A269E168A068FDF7F8F8A28BE168FE
+:103CE000A068FDF7CFF8E168A068FDF7ADF8E168DE
+:103CF000A068FDF79BF8656800BF00BFFEF70EFDEA
+:103D000006460120FEF70DFDA86840210843A86083
+:103D10003046FEF706FD00BF00BF656800BF00BF6C
+:103D2000FEF7FCFC06460120FEF7FBFC286810218C
+:103D3000084328603046FEF7F4FC00BF00BF0021B6
+:103D40006068FDF79EFB05462A462169A068FDF7DD
+:103D5000F7F8626A2169A068FDF7B8F82169A068E0
+:103D6000FDF772F8656800BF00BFFEF7D7FC064696
+:103D70000120FEF7D6FCA86880210843A8603046E1
+:103D8000FEF7CFFC00BF00BF01212A20015570BD06
+:103D9000F8B504460D461646002C01D0012100E07E
+:103DA00000210846F321FCF7BFFF002D01D00121BF
+:103DB00000E000210846F421FCF7B6FF002E01DDEB
+:103DC000012100E000210846F521FCF7ADFF0027A6
+:103DD0002020005D012823D12A20005D01281FD169
+:103DE00000212A2001552946606A009603E00A78DE
+:103DF0000270491C401C009A531E9BB20093002A7B
+:103E0000F5D100BF2169A068FDF702F832462169AB
+:103E1000A068FDF737F82169A068FDF707F826E0EC
+:103E20000027002014E0002705E039467A1CD7B2AD
+:103E3000FE2900DBF8BD6168CA6980231A40D209F7
+:103E4000002AF2D02A5C61688A6200BF411C88B2F5
+:103E5000B042E8DB002705E03846791CCFB2FE28E7
+:103E600000DBE7E76068FDF7C1FB0028F4D000BF86
+:103E7000E0E730B5024614460020002304E0257830
+:103E80006840641C5D1CABB28B42F8DB30BD0000A7
+:103E900070B501250400ED074C4020D4441A01D22E
+:103EA000001B0919C60D4B00F2B2FF2A29D01B0EC8
+:103EB0002CD000020C02D31A2C43DC4028430519F5
+:103EC00010D2280A02D3401C6D0611D0761EF605CA
+:103ED0008019FF2A00DA70BDC00DC00570BD6940B1
+:103EE00000F07AF801200543C541521C761CE8E732
+:103EF00064089C40C90161408900E7D10124A043C6
+:103F0000E4E71B0E440200D0034870BD002AFCD138
+:103F1000C00FC00770BD00BF0000C07F70B5420079
+:103F200064414B005C41120E39D01B0E38D0FF2A81
+:103F30003CD0FF2B3AD040024902400A490A060011
+:103F400045184E43000A090AD2184843ED017F3A4A
+:103F50000104731A4019190C4318990F04D0012158
+:103F60005B0849075B1A521CD80904D3401CF503AF
+:103F700001D19D0607D0FF2A08D2D50506D0E40757
+:103F80002043401970BD0125A843F4E7002A01DC55
+:103F9000E00770BD2402FF202043C00570BD1B0E4A
+:103FA000FF2A03D0FF2B01D0E00770BDFF2645009C
+:103FB0003606B54206D84D00B54203D8D218FF2ABE
+:103FC00000D0E7E7004870BD0000C07F70B5012554
+:103FD0000400ED074C4022D4441A02D26C40001B6E
+:103FE0000919C60D4B00F2B2FF2A4BD01B0E50D060
+:103FF00000020C02D31A2C43DC40A843051B05D554
+:10400000AD0019D36D08761E521E37D0F605280A6A
+:1040100001D2801970BD70416D0603D070BD69403A
+:10402000FFF73CFF9C4009026140490001D0401E5F
+:1040300070BD0124A04370BD6D081DD001202B0C64
+:1040400001D12D0410302B0E01D12D0208302B0F81
+:1040500001D12D01001DAB0F01D1AD00801CEB0F74
+:1040600001D16D00401C6D00361A121A680AF50560
+:104070004019012A02DB70BD002070BDC036300A35
+:10408000C00770BD1B0E440201D1FF2B00D10248B6
+:1040900070BD002AF0D070BD0000C07F081C304405
+:1040A000586C8000000000040004000008000000BC
+:1040B00008000008000000080000040008000C08C8
+:1040C0001C3044586C80000000000400040000080C
+:1040D00000000008000008000000080000040008BC
+:1040E000000C081C3044586C8000000000040004E0
+:1040F00000000800000008000008000000080000A0
+:10410000040008000C000000000000000001020391
+:104110000406070809000000000102030403040666
+:10412000080C101820305F6C697374006C6973742C
+:1041300020616C6C20636F6D6D616E640000000027
+:10414000A00100000100000020000000200000008D
+:104150000034000020000000081C3044586C80002F
+:10416000000000040004000008000000080000082F
+:10417000000000080000040008000C081C3044582F
+:104180006C8000000000040004000008000000082B
+:10419000000008000000080000040008000C0000F7
+:1041A000081C3044586C800000000004000400002B
+:1041B00008000000080000080000000800000400DB
+:1041C00008000C0000040050002000000000000067
+:1041D000000000000000000000000000000400508B
+:1041E00000100000000000000000000000000000BF
+:1041F0000000000080807F7E7D7C7B7A79787776F6
+:1042000076757473727171706F6E6E6D6C6C6B6AB3
+:104210006A69686867666665646463636261616051
+:10422000605F5F5E5E5D5D5C5C5B5B5A5A595958CE
+:104230005857575656555555545453535252525138
+:10424000515050504F4F4F4E4E4D4D4D4C4C4C4B8E
+:104250004B4B4A4A4A4949494848484747474746D5
+:104260004646454545444444444343434342424211
+:10427000424141418182838485868788898B8C8DE8
+:104280008E8F919293959697999A9C9D9FA0A2A3A9
+:10429000A5A7A8AAACAEB0B2B3B5B7B9BCBEC0C2F0
+:1042A000C5C7C9CCCED1D4D7D9DCDFE2E6E9ECF082
+:1042B000F3F7FAFED442000800000020AC00000032
+:1042C0000401000880430008AC000020B446000050
+:1042D0002001000800002000000000000000000095
+:1042E00000000000000000000000000000000000CE
+:1042F00000000000000000000000000000000000BE
+:1043000000000000000000000000000000000000AD
+:104310000000000000000000493100083D320008A4
+:10432000E000002040000020E03400204200002097
+:10433000000000000000000000000000000000007D
+:10434000000000000000000000000000000000006D
+:10435000000000000000000000000000000000005D
+:1043600000240140000002400100000000000000A5
+:10437000264100082C410008C6E533B4492700084F
:04000005080000C12E
:00000001FF
diff --git a/User/app_flow.c b/User/app_flow.c
index 63de744..c31fe7c 100644
--- a/User/app_flow.c
+++ b/User/app_flow.c
@@ -7,6 +7,7 @@
extern __IO app_t app;
extern motor_t *motor;
+uint8_t detect_result = ST_DEV_NORMAL;
static struct flow fl_adc_inspection; // ADC
static struct flow fl_systom_inspection; // 系统
@@ -20,12 +21,16 @@ static uint8_t adc_inspection(struct flow *fl)
// 扭力
app.adc.torsion_in13.original_value = get_torsion_adc();
app.adc.torsion_in13.calibration_value = torsion_detect();
+ sensor_adc[GET_TORSION_VALUE] = S2B_UINT16(app.adc.torsion_in13.original_value);
// 压力
app.adc.pressure_in7.original_value = get_pressure_adc();
app.adc.pressure_in7.calibration_value = pressure_detect();
+ sensor_adc[GET_PRESSURE_VALUE] = S2B_UINT16(app.adc.pressure_in7.original_value);
// 流量
app.adc.pressure_in8.original_value = get_flow_adc();
app.adc.pressure_in8.calibration_value = flow_detect();
+ sensor_adc[GET_FLOW_VALUE] = S2B_UINT16(app.adc.pressure_in8.original_value);
+
FL_LOCK_DELAY(fl, FL_CLOCK_100MSEC); /* 延时100毫秒 */
}
FL_TAIL(fl);
@@ -37,7 +42,7 @@ static uint8_t systom_inspection(struct flow *fl)
for (;;)
{
host_rx_msg_deal();
- FL_LOCK_DELAY(fl, FL_CLOCK_10MSEC); /* 延时100毫秒 */
+ FL_LOCK_DELAY(fl, FL_CLOCK_10MSEC); /* 延时10毫秒 */
}
FL_TAIL(fl);
}
@@ -47,8 +52,9 @@ static uint8_t idle_inspection(struct flow *fl)
FL_HEAD(fl);
for (;;)
{
+ test_process();
cpu_percent = scheduler_time_occupancy_get(1000);
- FL_LOCK_DELAY(fl, FL_CLOCK_SEC);
+ FL_LOCK_DELAY(fl, FL_CLOCK_10MSEC);
}
FL_TAIL(fl);
}
diff --git a/User/board/board.c b/User/board/board.c
index 3768b00..37d39af 100644
--- a/User/board/board.c
+++ b/User/board/board.c
@@ -2,11 +2,12 @@
#include "motor.h"
void motor_process(frame_msg_t *rx, frame_msg_t *bk);
-void sensor_procss(frame_msg_t *rx, frame_msg_t *bk);
+void sensor_process(frame_msg_t *rx, frame_msg_t *bk);
+void error_process(uint8_t err, frame_msg_t *rx, frame_msg_t *bk);
/************************************* 串口通讯 *************************************/
uart_t *uarts[UART_NUM_MAX];
-__IO static BOOL execute_state = 0; // 数据处理标志
+__IO static BOOL execute_state = IDLE; // 数据处理标志
static frame_msg_t rx_msg; // 接收数据句柄
static frame_msg_t bk_msg; // 回复数据句柄
static uint8_t host_send_buffer[UART_TXSIZE] = {0}; // 数据发送缓存
@@ -70,12 +71,13 @@ static void host_cmd_execute(frame_msg_t *rx_msg, frame_msg_t *bk_msg)
switch (rx_msg->dev_no)
{
case ADC_SENSOR:
- sensor_procss(rx_msg, bk_msg);
+ sensor_process(rx_msg, bk_msg);
break;
case MOTOR:
motor_process(rx_msg, bk_msg);
break;
default:
+ error_process(ST_CMD_IVALID, rx_msg, bk_msg);
break;
}
}
@@ -107,7 +109,7 @@ static void host_data_encode(frame_msg_t *msg)
// 数据处理
void host_rx_msg_deal(void)
{
- if (execute_state == TRUE)
+ if (execute_state == IDLE)
{
return;
}
@@ -160,6 +162,8 @@ static void host_uart_init(void)
motor_t *motor;
motor_ctrl_t *motor_param = NULL;
+extern uint8_t detect_result;
+
// 电机初始化
static void motor_init(void)
{
@@ -175,6 +179,40 @@ static void motor_init(void)
motor->handle.step_motor.interface.init(motor, dir, en, MIN_STEP_ANGLE, TIM21, LL_TIM_CHANNEL_CH2);
}
+static uint8_t motor_param_get(frame_msg_t *rx, motor_ctrl_t *param)
+{
+ uint8_t state = ST_DEV_NORMAL;
+
+ // 检查数据长度,方向:1个字节,角度:4个字节
+ if (rx->len < 5)
+ {
+ state = ST_CMD_IVALID;
+ return state;
+ }
+ // 方向
+ param->dir = rx->data[0];
+ // 角度
+ osel_memcpy((uint8_t *)¶m->angle, (uint8_t *)&rx->data[1], 4);
+ param->angle = B2S_FLOAT32(param->angle);
+
+ return state;
+}
+
+static uint8_t motor_ctrl(uint8_t sw, motor_ctrl_t *param)
+{
+ step_motor_t *step_motor = &motor->handle.step_motor;
+ uint8_t state = detect_result;
+ if (sw == RUN && detect_result == ST_DEV_NORMAL)
+ {
+ step_motor->interface.set_angle(motor, param->angle, (dir_e)param->dir);
+ }
+ else
+ {
+ step_motor->interface.stop(motor);
+ }
+ return state;
+}
+
void motor_process_init(void)
{
motor_param = (motor_ctrl_t *)osel_mem_alloc(sizeof(motor_ctrl_t));
@@ -186,26 +224,47 @@ void motor_process_init(void)
void motor_process(frame_msg_t *rx, frame_msg_t *bk)
{
DBG_ASSERT(rx != NULL __DBG_LINE);
+ DBG_ASSERT(bk != NULL __DBG_LINE);
- // step_motor_t *step_motor = &motor->handle.step_motor;
- // uint8_t state = ST_DEV_NORMAL;
+ motor_ctrl_t *ctrl_param = motor_param;
+ uint8_t state = ST_DEV_NORMAL;
switch (rx->cmd_no)
{
case SET_MOTOR_SPEED: // 设置电机转速
break;
- case GET_MIN_STEP: // 获取最小步距
- break;
case MOTOR_MOVE: // 运行电机
+ {
+ // 读取参数
+ state = motor_param_get(rx, ctrl_param);
+ // 运行电机
+ if (state == ST_DEV_NORMAL)
+ {
+ state = motor_ctrl(RUN, ctrl_param);
+ }
+ // 回复数据
+ osel_memcpy((uint8_t *)bk, (uint8_t *)rx, sizeof(frame_msg_t));
+ bk->state = state;
break;
+ }
case MOTOR_STOP: // 停止电机
+ {
+ // 停止电机
+ state = motor_ctrl(STOP, ctrl_param);
+ // 回复数据
+ osel_memcpy((uint8_t *)bk, (uint8_t *)rx, sizeof(frame_msg_t));
+ bk->state = state;
break;
+ }
default:
+ error_process(ST_CMD_IVALID, rx, bk);
break;
}
}
/************************************* ADc传感器 *************************************/
+uint16_t sensor_adc[GET_ALL_VALUE] = {0};
+
// AD传感器
adc_t adc1 = {
.adc = ADC1,
@@ -267,45 +326,108 @@ float32 flow_detect(void)
return val;
}
-// 获取扭力值
-static void cmd_torsion_value(frame_msg_t *bk)
+// 传感器任务
+void sensor_process(frame_msg_t *rx, frame_msg_t *bk)
{
+ DBG_ASSERT(rx != NULL __DBG_LINE);
+ DBG_ASSERT(bk != NULL __DBG_LINE);
uint8_t state = ST_DEV_NORMAL;
- // 计算数据长度
- uint8_t data_len = sizeof(uint16_t);
- // 采集
- uint16_t value = get_torsion_adc();
- // TODO 检查数据合法性
+ // 检查指令合法性
+ if (rx->cmd_no > GET_ALL_VALUE)
+ {
+ state = ST_CMD_IVALID;
+ goto encode;
+ }
+encode:
// 回复数据
bk->head = PACKET_STX;
bk->state = state;
- bk->dev_no = ADC_SENSOR;
- bk->cmd_no = GET_TORSION_VALUE;
- bk->len = data_len;
- value = S2B_UINT16(value);
- osel_memcpy((uint8_t *)bk->data, (uint8_t *)&value, data_len);
+ bk->dev_no = rx->dev_no;
+ bk->cmd_no = rx->cmd_no;
+ if (rx->cmd_no >= GET_ALL_VALUE)
+ {
+ bk->len = sizeof(uint16_t) * GET_ALL_VALUE;
+ osel_memcpy((uint8_t *)bk->data, (uint8_t *)&sensor_adc, bk->len);
+ }
+ else
+ {
+ bk->len = sizeof(uint16_t);
+ osel_memcpy((uint8_t *)bk->data, (uint8_t *)&sensor_adc[bk->cmd_no], bk->len);
+ }
}
-// 传感器任务
-void sensor_procss(frame_msg_t *rx, frame_msg_t *bk)
+/************************************* 测试 *************************************/
+#if SELF_TEST
+test_t self_test = {TEST_DEV_IDEL, 0};
+uint8_t test_buffer[UART_RXSIZE] = {0}; // 数据接收缓存
+#endif
+
+// 传感器测试指令
+static uint8_t test_sensor_cmd(uint8_t cmd, uint8_t *buf)
{
- switch (rx->cmd_no)
+ uint8_t ver_len = 0;
+ uint8_t index = 0;
+ frame_msg_t msg;
+ msg.head = PACKET_STX;
+ msg.state = ST_DEV_NORMAL;
+ msg.dev_no = ADC_SENSOR;
+ msg.cmd_no = cmd;
+ msg.len = 0;
+
+ index = DATA_INDEX;
+ osel_memset(buf, 0, UART_RXSIZE);
+ osel_memcpy(buf, (uint8_t *)&msg, index);
+ buf[index] = xor_compute((uint8_t *)&buf[1], (index - 1));
+ index += 1;
+ buf[index] = PACKET_ETX;
+ index += 1;
+
+ ver_len = index;
+ return ver_len;
+}
+
+// 发送测试数据
+static void test_rx_cb(uint8_t *data, uint8_t len)
+{
+ BOOL ret = FALSE;
+
+ // 数据有效性检查
+ ret = host_data_verify(data, len);
+ // 数据解码
+ if (ret == TRUE && execute_state == IDLE)
{
- case GET_TORSION_VALUE: // 获取扭力值
- cmd_torsion_value(bk);
+ host_data_decode(data, len);
+ execute_state = BUSY;
+ }
+}
+
+// 测试任务
+void test_process(void)
+{
+ uint8_t len = 0;
+ uint8_t *buf = test_buffer;
+
+ if (self_test.dev_id >= TEST_DEV_MAX)
+ {
+ return;
+ }
+
+ switch (self_test.dev_id)
+ {
+ case TEST_DEV_SENSOR:
+ len = test_sensor_cmd(self_test.cmd_id, buf);
break;
- case GET_PRESSURE_VALUE:
- break;
- case GET_FLOW_VALUE:
- break;
- case GET_ALL_VALUE:
+ case TEST_DEV_MOTOR:
break;
default:
break;
}
+
+ test_rx_cb(buf, len);
+ self_test.dev_id = TEST_DEV_IDEL;
}
/************************************* 板卡 *************************************/
@@ -320,3 +442,13 @@ void board_init(void)
host_uart_init(); // 串口初始化
ENABLE_TIM(TIM6); // 任务流程定时器使能
}
+
+// 不支持的任务
+void error_process(uint8_t err, frame_msg_t *rx, frame_msg_t *bk)
+{
+ DBG_ASSERT(rx != NULL __DBG_LINE);
+ DBG_ASSERT(bk != NULL __DBG_LINE);
+
+ osel_memcpy((uint8_t *)bk, (uint8_t *)rx, sizeof(frame_msg_t));
+ bk->state = err;
+}
diff --git a/User/board/board.h b/User/board/board.h
index 5de2638..d878daa 100644
--- a/User/board/board.h
+++ b/User/board/board.h
@@ -4,6 +4,8 @@
#include "adcs.h"
#include "uarts.h"
+#define SELF_TEST 1
+
// 串口协议参数
#define UART_RXSIZE (240u) // 接收缓冲区 240个字节
#define UART_TXSIZE (240u) // 发送缓冲区 240个字节
@@ -34,9 +36,9 @@ typedef enum
typedef enum
{
- ADC_SENSOR,
- MOTOR,
-} dev_id_e;
+ STOP = 0, // 停止
+ RUN = 1, // 运行
+} motor_state_e;
typedef enum
{
@@ -48,30 +50,48 @@ typedef enum
UART_NUM_MAX,
} uart_num_e;
+// 设备号
typedef enum
{
- SET_MOTOR_SPEED,
- GET_MIN_STEP,
- GET_MOTOR_STATE,
- MOTOR_MOVE,
- MOTOR_STOP,
+ ADC_SENSOR, // 传感器
+ MOTOR, // 电机
+} dev_id_e;
+
+// 电机命令号
+typedef enum
+{
+ SET_MOTOR_SPEED, // 设置电机速度
+ MOTOR_MOVE, // 电机启动(参数1:方向,参数2:角度)
+ MOTOR_STOP, // 电机停止
} motor_cmd_e;
+// 传感器命令号
typedef enum
{
- GET_TORSION_VALUE,
- GET_PRESSURE_VALUE,
- GET_FLOW_VALUE,
- GET_ALL_VALUE,
+ GET_TORSION_VALUE, // 扭力
+ GET_PRESSURE_VALUE, // 压力
+ GET_FLOW_VALUE, // 流量
+ GET_ALL_VALUE, // 全部
} sensor_cmd_e;
+// 状态码
typedef enum
{
- ST_DEV_NORMAL,
- ST_DEV_BUSY,
- ST_DEV_MISS,
+ ST_DEV_NORMAL, // 正常
+ ST_DEV_BUSY, // 忙碌
+ ST_DEV_MISS, // 故障
+ ST_CMD_IVALID, // 无效
} status_code_e;
+// 测试
+typedef enum
+{
+ TEST_DEV_IDEL,
+ TEST_DEV_SENSOR,
+ TEST_DEV_MOTOR,
+ TEST_DEV_MAX,
+} test_dev_e;
+
typedef struct
{
uint8_t head; // 包头
@@ -88,6 +108,14 @@ typedef struct
float32 angle;
} motor_ctrl_t;
+typedef struct
+{
+ uint8_t dev_id;
+ uint8_t cmd_id;
+} test_t;
+
+extern uint16_t sensor_adc[GET_ALL_VALUE];
+
extern void board_init(void);
extern uint16_t get_torsion_adc(void);
extern float32 torsion_detect(void);
@@ -97,5 +125,6 @@ extern uint16_t get_flow_adc(void);
extern float32 flow_detect(void);
extern void host_rx_msg_deal(void);
extern void motor_process_init(void);
+extern void test_process(void);
#endif // __BOARD_H__
diff --git a/User/board/motor.c b/User/board/motor.c
index 39bb737..8a537da 100644
--- a/User/board/motor.c
+++ b/User/board/motor.c
@@ -38,7 +38,7 @@ static void step_motor_stop(motor_t *motor)
}
}
-static void step_motor_set_angle(motor_t *motor, uint32_t angle, dir_e dir)
+static void step_motor_set_angle(motor_t *motor, float32 angle, dir_e dir)
{
DBG_ASSERT(motor != NULL __DBG_LINE);
step_motor_t *handle = &motor->handle.step_motor;
diff --git a/User/board/motor.h b/User/board/motor.h
index 5aaa0b9..7b639b0 100644
--- a/User/board/motor.h
+++ b/User/board/motor.h
@@ -37,7 +37,7 @@ typedef struct
void (*init)(motor_t *motor, gpio_t dir, gpio_t en, float32 min_step_angle, TIM_TypeDef *pwm_timer, uint32_t pwm_channel); // 初始化
void (*run)(motor_t *motor, dir_e dir); // 运行
void (*stop)(motor_t *motor); // 停止
- void (*set_angle)(motor_t *motor, uint32_t angle, dir_e dir); // 将角度转换成脉冲个数并运行
+ void (*set_angle)(motor_t *motor, float32 angle, dir_e dir); // 将角度转换成脉冲个数并运行
void (*stop_cb)(motor_t *motor); // 停止回调函数,在stop中执行
void (*set_speed)(motor_t *motor, uint32_t psc);
} step_motor_interface_t;