diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..3751aa6
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "files.associations": {
+ "ads8864.h": "c"
+ }
+}
\ No newline at end of file
diff --git a/MDK-ARM/sick.uvguix.lvzucheng b/MDK-ARM/sick.uvguix.lvzucheng
index c17ba16..89525a3 100644
--- a/MDK-ARM/sick.uvguix.lvzucheng
+++ b/MDK-ARM/sick.uvguix.lvzucheng
@@ -20,12 +20,12 @@
346
Code Coverage
- 620 157
+ 631 101
204
Performance Analyzer
- 110 116 116 435
+ 350 116 116 150
@@ -70,7 +70,7 @@
466
Source Browser
500
- 300
+ 166
@@ -101,17 +101,17 @@
-1
- 64
- 359
- 1328
- 811
+ 91
+ 235
+ 1204
+ 921
0
859
- 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000010000000100000036433A5C4D61635C486F6D655C4465736B746F705C7369636B5C4D444B2D41524D5C737461727475705F73746D33326633303278382E730000000015737461727475705F73746D33326633303278382E7300000000C5D4F200FFFFFFFF28433A5C4D61635C486F6D655C4465736B746F705C7369636B5C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF28433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C63616E2E63000000000563616E2E6300000000BECEA100FFFFFFFF2E433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C757365725F7461736B2E63000000000B757365725F7461736B2E6300000000F0A0A100FFFFFFFF29433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C696E69742E630000000006696E69742E6300000000BCA8E100FFFFFFFF28433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C6164632E6300000000056164632E63000000009CC1B600FFFFFFFF48433A5C4D61635C486F6D655C4465736B746F705C7369636B5C4D6964646C6577617265735C54686972645F50617274795C4672656552544F535C536F757263655C7461736B732E6300000000077461736B732E6300000000F7B88600FFFFFFFF49433A5C4D61635C486F6D655C4465736B746F705C7369636B5C447269766572735C53544D3332463378785F48414C5F4472697665725C5372635C73746D3332663378785F68616C2E63000000000F73746D3332663378785F68616C2E6300000000D9ADC200FFFFFFFF27433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C70632E63000000000470632E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000601000066000000E805000046020000
+ 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000010000000100000036433A5C4D61635C486F6D655C4465736B746F705C7369636B5C4D444B2D41524D5C737461727475705F73746D33326633303278382E730000000015737461727475705F73746D33326633303278382E7300000000C5D4F200FFFFFFFF28433A5C4D61635C486F6D655C4465736B746F705C7369636B5C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF28433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C63616E2E63000000000563616E2E6300000000BECEA100FFFFFFFF2E433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C757365725F7461736B2E63000000000B757365725F7461736B2E6300000000F0A0A100FFFFFFFF29433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C696E69742E630000000006696E69742E6300000000BCA8E100FFFFFFFF28433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C6164632E6300000000056164632E63000000009CC1B600FFFFFFFF48433A5C4D61635C486F6D655C4465736B746F705C7369636B5C4D6964646C6577617265735C54686972645F50617274795C4672656552544F535C536F757263655C7461736B732E6300000000077461736B732E6300000000F7B88600FFFFFFFF49433A5C4D61635C486F6D655C4465736B746F705C7369636B5C447269766572735C53544D3332463378785F48414C5F4472697665725C5372635C73746D3332663378785F68616C2E63000000000F73746D3332663378785F68616C2E6300000000D9ADC200FFFFFFFF27433A5C4D61635C486F6D655C4465736B746F705C7369636B5C557365725C7461736B5C70632E63000000000470632E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000601000066000000E8050000D7000000
@@ -150,7 +150,7 @@
0
16
- 0300000066000000FF00000016020000
+ 0300000066000000FF000000A7000000
16
@@ -170,7 +170,7 @@
0
16
- 0300000066000000FF00000016020000
+ 0300000066000000FF000000A7000000
16
@@ -450,7 +450,7 @@
0
16
- 0300000066000000FF00000016020000
+ 0300000066000000FF000000A7000000
16
@@ -470,7 +470,7 @@
0
16
- 0300000066000000FF00000016020000
+ 0300000066000000FF000000A7000000
16
@@ -490,7 +490,7 @@
0
16
- 0000000033020000E805000057030000
+ 00000000C4000000E805000057030000
16
@@ -1150,7 +1150,7 @@
0
16
- 0300000066000000FF00000016020000
+ 0300000066000000FF0000009C010000
16
@@ -1799,7 +1799,7 @@
3359
- 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFA5000000BE000000B8030000C2000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000A500000066000000B8030000D5000000A50000004F000000B8030000BE0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF130300004F00000017030000A6010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000001703000066000000B8030000BD010000170300004F000000B8030000A601000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF020100004F000000060100002F0200000100000002000010040000000100000061FFFFFF3E050000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000660000000201000046020000000000004F000000020100002F0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000092010000B80300009601000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AD010000B8030000300200000000000096010000B80300001902000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFDC01000096010000E00100001902000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002F020000E8050000330200000100000001000010040000000100000017FEFFFFB1000000C50000000000000000000000000000000000000001000000C500000001000000C500000001000000FFFF02001200434D756C746950616E654672616D65576E640001008400000000F9010000E80500008103000000000000000000000200000000000000FFFFFFFF05000000C7000000B4010000D2010000CF010000779400000180008000000000000000000000F9010000E80500008103000000000000CF010000E8050000570300000000000040820046050000000D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC70000000000000000000000
+ 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFA5000000BE000000B8030000C2000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000A500000066000000B8030000D5000000A50000004F000000B8030000BE0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF130300004F00000017030000A6010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000001703000066000000B8030000BD010000170300004F000000B8030000A601000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF020100004F00000006010000C00000000100000002000010040000000100000061FFFFFF3E050000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000006600000002010000CC010000000000004F00000002010000C00000000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000092010000B80300009601000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AD010000B8030000300200000000000096010000B80300001902000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFDC01000096010000E00100001902000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000C0000000E8050000C4000000010000000100001004000000010000009FFEFFFF39010000C50000000000000000000000000000000000000001000000C500000001000000C500000001000000FFFF02001200434D756C746950616E654672616D65576E640001008400000000F9010000E80500008103000000000000000000000200000000000000FFFFFFFF05000000C7000000B4010000D2010000CF010000779400000180008000000000000000000000F9010000E80500008103000000000000CF010000E8050000570300000000000040820046050000000D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC70000000000000000000000
59392
@@ -1822,7 +1822,7 @@
Build
968
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000047369636B96000000000000000100047369636B000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000047369636B96000000000000000100047369636B000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -1838,7 +1838,7 @@
Debug
2373
- 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -1927,7 +1927,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -1947,7 +1947,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -1967,7 +1967,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -1987,7 +1987,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2047,7 +2047,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2067,7 +2067,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2087,7 +2087,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2107,7 +2107,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2127,7 +2127,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2147,7 +2147,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2167,7 +2167,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2367,7 +2367,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2947,7 +2947,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -2967,7 +2967,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -3527,7 +3527,7 @@
0
32767
0
- 32768
+ 16384
0
16
@@ -3563,7 +3563,7 @@
Build
955
- 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -3579,7 +3579,7 @@
Debug
2362
- 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000004002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000004002800000000000000000000000000000000010000000100000001801B80000000000400290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000004002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020000002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020000002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -3624,9 +3624,9 @@
..\User\task\can.c
- 8
- 2
- 23
+ 6
+ 22
+ 24
1
0
@@ -3642,18 +3642,18 @@
..\User\task\init.c
- 0
- 1
- 1
+ 52
+ 14
+ 31
1
0
..\User\task\adc.c
- 20
+ 13
1
- 13
+ 10
1
0
@@ -3669,18 +3669,18 @@
../Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_hal.c
- 0
+ 1
283
- 292
+ 299
1
0
..\User\task\pc.c
- 15
- 1
- 20
+ 2
+ 5
+ 22
1
0
diff --git a/User/bsp/bsp.h b/User/bsp/bsp.h
new file mode 100644
index 0000000..19e162c
--- /dev/null
+++ b/User/bsp/bsp.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BSP_OK (0)
+#define BSP_ERR (-1)
+#define BSP_ERR_NULL (-2)
+#define BSP_ERR_INITED (-3)
+#define BSP_ERR_NO_DEV (-4)
+
+#define SIGNAL_BSP_USB_BUF_RECV (1u << 0)
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/User/bsp/can.c b/User/bsp/can.c
index e69de29..ed84926 100644
--- a/User/bsp/can.c
+++ b/User/bsp/can.c
@@ -0,0 +1,19 @@
+// /* Includes ----------------------------------------------------------------- */
+// #include "bsp\can.h"
+// #include "can.h" // 包含 hcan 的定义
+
+// /* Private define ----------------------------------------------------------- */
+// /* Private macro ------------------------------------------------------------ */
+// /* Private typedef ---------------------------------------------------------- */
+// /* Private variables -------------------------------------------------------- */
+// /* Private function -------------------------------------------------------- */
+
+// /* Exported functions ------------------------------------------------------- */
+// CAN_HandleTypeDef *BSP_CAN_GetHandle(BSP_CAN_t can) {
+// switch (can) {
+// case BSP_CAN:
+// return &hcan; // 返回全局定义的 hcan 实例
+// default:
+// return NULL; // 未知的 CAN 枚举值
+// }
+// }
\ No newline at end of file
diff --git a/User/bsp/can.h b/User/bsp/can.h
index e69de29..23c19ce 100644
--- a/User/bsp/can.h
+++ b/User/bsp/can.h
@@ -0,0 +1,15 @@
+// #pragma once
+
+// /* Includes ----------------------------------------------------------------- */
+// #include
+// #include "bsp/bsp.h"
+
+// /* Exported constants ------------------------------------------------------- */
+// /* Exported macro ----------------------------------------------------------- */
+// /* Exported types ----------------------------------------------------------- */
+// typedef enum {
+// BSP_CAN,
+// } BSP_CAN_t;
+
+// /* Exported functions prototypes -------------------------------------------- */
+// CAN_HandleTypeDef *BSP_CAN_GetHandle(BSP_CAN_t can);
diff --git a/User/bsp/led.c b/User/bsp/led.c
index fd7050b..76bf067 100644
--- a/User/bsp/led.c
+++ b/User/bsp/led.c
@@ -1,6 +1,5 @@
/* Includes ----------------------------------------------------------------- */
#include "bsp\led.h"
-// #include "stm32f3xx.h"
#include "gpio.h"
#include "tim.h"
/* Private define ----------------------------------------------------------- */
diff --git a/User/bsp/led.h b/User/bsp/led.h
index 7913b9b..2428ff1 100644
--- a/User/bsp/led.h
+++ b/User/bsp/led.h
@@ -27,6 +27,4 @@ typedef enum
/* Exported functions prototypes -------------------------------------------- */
-int8_t BSP_LED_SET(BSP_LED_Channel_t ch, BSP_LED_Status_t s);
-int8_t BSP_WS2812_Set(uint8_t red, uint8_t green, uint8_t blue);
-int8_t BSP_WS2812_Init(void);
+int8_t BSP_LED_SET(BSP_LED_Channel_t ch, BSP_LED_Status_t s);
\ No newline at end of file
diff --git a/User/bsp/spi.c b/User/bsp/spi.c
index e69de29..983ff62 100644
--- a/User/bsp/spi.c
+++ b/User/bsp/spi.c
@@ -0,0 +1,26 @@
+/* Includes ----------------------------------------------------------------- */
+#include "bsp\spi.h"
+
+/* Private define ----------------------------------------------------------- */
+/* Private macro ------------------------------------------------------------ */
+/* Private typedef ---------------------------------------------------------- */
+/* Private variables -------------------------------------------------------- */
+/* Private function -------------------------------------------------------- */
+static BSP_SPI_t SPI_Get(SPI_HandleTypeDef *hspi) {
+ if (hspi->Instance == SPI2)
+ return BSP_SPI_ADC;
+ else
+ return BSP_ERR;
+}
+
+
+/* Exported functions ------------------------------------------------------- */
+SPI_HandleTypeDef *BSP_SPI_GetHandle(BSP_SPI_t spi) {
+ switch (spi) {
+ case BSP_SPI_ADC:
+ return &hspi2;
+ default:
+ return NULL;
+ }
+}
+
diff --git a/User/bsp/spi.h b/User/bsp/spi.h
index e69de29..2758624 100644
--- a/User/bsp/spi.h
+++ b/User/bsp/spi.h
@@ -0,0 +1,22 @@
+#pragma once
+
+
+/* Includes ----------------------------------------------------------------- */
+#include
+
+#include "bsp/bsp.h"
+
+/* Exported constants ------------------------------------------------------- */
+/* Exported macro ----------------------------------------------------------- */
+/* Exported types ----------------------------------------------------------- */
+
+/* 要添加使用SPI的新设备,需要先在此添加对应的枚举值 */
+
+/* SPI实体枚举,与设备对应 */
+typedef enum {
+ BSP_SPI_ADC,
+} BSP_SPI_t;
+
+/* Exported functions prototypes -------------------------------------------- */
+SPI_HandleTypeDef *BSP_SPI_GetHandle(BSP_SPI_t spi);
+
diff --git a/User/component/user_math.c b/User/component/user_math.c
new file mode 100644
index 0000000..5fb8a58
--- /dev/null
+++ b/User/component/user_math.c
@@ -0,0 +1,12 @@
+/*
+ 自定义的数学运算。
+*/
+
+#include "user_math.h"
+#include
+
+
+float Adc_to_Distance(uint16_t adc_data) {
+ // return (float)((adc_data * 1000) / 4095);
+ return (float)((adc_data * 1000) / 4095.0f); // 使用浮点数进行计算
+}
\ No newline at end of file
diff --git a/User/component/user_math.h b/User/component/user_math.h
new file mode 100644
index 0000000..52ddda8
--- /dev/null
+++ b/User/component/user_math.h
@@ -0,0 +1,20 @@
+/*
+ 自定义的数学运算。
+*/
+
+#pragma once
+
+
+#include
+#include
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846f
+#endif
+
+/**
+ * @brief 用于计算ADC数据对应的距离(mm)
+ * @param adc_data
+ * @return
+ */
+float Adc_to_Distance(uint16_t adc_data);
\ No newline at end of file
diff --git a/User/device/ads8864.c b/User/device/ads8864.c
index 5d8dab6..3ac1c9a 100644
--- a/User/device/ads8864.c
+++ b/User/device/ads8864.c
@@ -1,9 +1,10 @@
#include "ads8864.h"
-#include "spi.h"
#include "gpio.h"
-
+#include "bsp/spi.h"
+#include
+#include "component/user_math.h"
/* Private variables --------------------------------------------------------- */
-// static Ads8864_t ads8864_data = {0}; // 全局的ADC数据结构体
+// static Ads8864_t ads8864 = {0}; // 全局的ADC数据结构体
/* Private function prototypes ----------------------------------------------- */
static uint16_t Ads8864_Read_Internal(void);
@@ -15,30 +16,37 @@ static void Ads8864_Update_Filtered_Data(void);
* @note 初始化ADC相关引脚
* @retval None
*/
-void ads8864_Init(void) {
- HAL_GPIO_WritePin(GPIOB, DIN_Pin, GPIO_PIN_SET); // 设置DIN引脚为高电平
- HAL_GPIO_WritePin(GPIOB, CONVST_Pin, GPIO_PIN_RESET); // 设置CS引脚为低电平
+// void ads8864_Init(void) {
+// HAL_GPIO_WritePin(GPIOB, DIN_Pin, GPIO_PIN_SET); // 设置DIN引脚为高电平
+// HAL_GPIO_WritePin(GPIOB, CONVST_Pin, GPIO_PIN_RESET); // 设置CS引脚为低电平
+// }
+int8_t ads8864_Init(Ads8864_t *ads8864) {
+ HAL_GPIO_WritePin(GPIOB, DIN_Pin, GPIO_PIN_SET); // 设置DIN引脚为高电平
+ HAL_GPIO_WritePin(GPIOB, CONVST_Pin, GPIO_PIN_RESET); // 设置CS引脚为低电平
+ memset(ads8864, 0, sizeof(Ads8864_t)); // 初始化结构体
+ return 0; // 初始化成功
}
-
/**
* @brief 读取ADS8864 ADC数据
* @note 通过SPI接口读取ADC转换结果,并更新滤波数据
* @retval uint16_t 返回滤波后的ADC数据
*/
-uint16_t Ads8864_Read(void) {
+ int8_t Ads8864_Read(Ads8864_t *ads8864) {
// 读取原始数据
uint16_t raw_data = Ads8864_Read_Internal();
// 更新原始数据缓冲区
for (int i = 9; i > 0; i--) {
- ads8864_data.raw.adc_data[i] = ads8864_data.raw.adc_data[i - 1];
+ ads8864->raw.adc_data[i] = ads8864->raw.adc_data[i - 1];
}
- ads8864_data.raw.adc_data[0] = raw_data;
+ ads8864->raw.adc_data[0] = raw_data;
// 更新滤波数据
Ads8864_Update_Filtered_Data();
+ // 计算距离
+ ads8864->filtered.distance = Adc_to_Distance(ads8864->filtered.adc_data); // 计算距离
- return ads8864_data.filtered.adc_data;
+ return 0;
}
/* Private functions --------------------------------------------------------- */
@@ -50,9 +58,15 @@ uint16_t Ads8864_Read(void) {
static uint16_t Ads8864_Read_Internal(void) {
uint8_t rx_data[2] = {0}; // 接收数据缓冲区
+ // 获取 SPI 句柄
+ SPI_HandleTypeDef *hspi = BSP_SPI_GetHandle(BSP_SPI_ADC);
+ if (hspi == NULL) {
+ return 0; // 如果句柄为空,返回 0
+ }
+
HAL_GPIO_WritePin(GPIOB, CONVST_Pin, GPIO_PIN_RESET); // 设置CS引脚为低电平
HAL_Delay(1); // 延时 1 毫秒
- HAL_SPI_Receive(&hspi2, rx_data, sizeof(rx_data), HAL_MAX_DELAY); // SPI接收数据
+ HAL_SPI_Receive(hspi, rx_data, sizeof(rx_data), HAL_MAX_DELAY); // SPI接收数据
HAL_GPIO_WritePin(GPIOB, CONVST_Pin, GPIO_PIN_SET); // 设置CS引脚为高电平
return (rx_data[0] << 8) | rx_data[1]; // 合并接收数据并返回
@@ -68,7 +82,7 @@ static void Ads8864_Update_Filtered_Data(void) {
// 计算原始数据的平均值
for (int i = 0; i < 10; i++) {
- sum += ads8864_data.raw.adc_data[i];
+ sum += ads8864.raw.adc_data[i];
}
- ads8864_data.filtered.adc_data = (uint16_t)(sum / 10);
+ ads8864.filtered.adc_data = (uint16_t)(sum / 10);
}
\ No newline at end of file
diff --git a/User/device/ads8864.h b/User/device/ads8864.h
index 9e75b74..d348636 100644
--- a/User/device/ads8864.h
+++ b/User/device/ads8864.h
@@ -15,6 +15,7 @@ typedef struct {
// 滤波后的ADC数据
typedef struct {
uint16_t adc_data;
+ float distance; // 距离(mm)
} Ads8864_Filtered_t;
// ADC数据结构体
@@ -23,8 +24,8 @@ typedef struct {
Ads8864_Filtered_t filtered; // 滤波后的数据
} Ads8864_t;
-extern Ads8864_t ads8864_data; // 声明全局变量
+extern Ads8864_t ads8864; // 声明全局变量
/* Exported functions prototypes -------------------------------------------- */
-void ads8864_Init(void);
-uint16_t Ads8864_Read(void);
\ No newline at end of file
+int8_t ads8864_Init(Ads8864_t *ads8864);
+int8_t Ads8864_Read(Ads8864_t *ads8864);
\ No newline at end of file
diff --git a/User/device/can.c b/User/device/can.c
index 0af8720..a1656a8 100644
--- a/User/device/can.c
+++ b/User/device/can.c
@@ -1,11 +1,52 @@
-/*
- CAN总线上的设
- 将所有CAN总线上挂载的设抽象成一设进行配和控制
-*/
-
-/* Includes ----------------------------------------------------------------- */
#include "can.h"
+#include "device/can.h"
+#include "stm32f3xx_hal.h"
+// CAN 调试结构体实例
+can_t can_debug = {
+ .TxData = {0},
+ .TxID = 0x023,
+ .TxStatus = 0,
+ .DebugCounter = 0
+};
-#include
-#include
+// 初始化 CAN
+void CAN_Init(CAN_HandleTypeDef *hcan_Cur)
+{
+ // 仅初始化CAN,不配置接收过滤器
+ HAL_CAN_Start(hcan_Cur); // 开启CAN
+}
+// CAN 发送函数,添加超时机制
+uint8_t CAN_SendData(CAN_HandleTypeDef *hcan_Cur, uint8_t *pData, uint16_t ID)
+{
+ HAL_StatusTypeDef HAL_RetVal = HAL_ERROR;
+ uint8_t FreeTxNum = 0;
+ CAN_TxHeaderTypeDef TxMessage;
+
+ TxMessage.StdId = ID;
+ TxMessage.DLC = 8; /* 默认一帧传输长度为8 */
+ TxMessage.IDE = CAN_ID_STD;
+ TxMessage.RTR = CAN_RTR_DATA;
+
+ uint32_t timeout = 5000; // 增加超时时间
+ while (FreeTxNum == 0 && timeout > 0)
+ {
+ FreeTxNum = HAL_CAN_GetTxMailboxesFreeLevel(hcan_Cur);
+ if (FreeTxNum > 0) break; // 如果有空闲邮箱,退出循环
+ osDelay(1); // 避免忙等待
+ timeout--;
+ }
+ if (timeout == 0)
+ {
+ return 1; // 超时,发送失败
+ }
+
+ HAL_RetVal = HAL_CAN_AddTxMessage(hcan_Cur, &TxMessage, pData, (uint32_t *)CAN_TX_MAILBOX1);
+
+ if (HAL_RetVal != HAL_OK)
+ {
+ return 1; // 发送失败
+ }
+
+ return 0; // 发送成功
+}
\ No newline at end of file
diff --git a/User/device/can.h b/User/device/can.h
index 701b7fe..cb6b64c 100644
--- a/User/device/can.h
+++ b/User/device/can.h
@@ -1,19 +1,19 @@
#pragma once
-/* Includes ----------------------------------------------------------------- */
-#include
-#include
-
-#include "bsp\can.h"
-
-
-#define CAN_TX_BUF_SIZE (8)
-#define CAN_RX_BUF_SIZE (8)
-
-
+#include "can.h"
+#include "stm32f3xx_hal.h"
+#include
+// CAN 调试结构体
typedef struct {
- uint16_t adc_data;
- struct {
- uint32_t sick;
- } mailbox;
- } CAN_t;
\ No newline at end of file
+ uint8_t TxData[8]; // 要发送的数据
+ uint16_t TxID; // 发送的CAN ID
+ uint8_t TxStatus; // 发送状态,0: 成功,1: 失败
+ uint32_t DebugCounter; // 调试计数器
+} can_t;
+
+// 外部变量声明
+extern can_t can_debug;
+
+// 函数声明
+void CAN_Init(CAN_HandleTypeDef *hcan_Cur);
+uint8_t CAN_SendData(CAN_HandleTypeDef *hcan_Cur, uint8_t *pData, uint16_t ID);
diff --git a/User/device/pc.c b/User/device/pc.c
index d3670e5..e69de29 100644
--- a/User/device/pc.c
+++ b/User/device/pc.c
@@ -1,36 +0,0 @@
-// #include "device/pc.h"
-// #include "usart.h" // 包含 USART 驱动头文件
-// #include // 用于 memcpy
-
-// /* Private variables --------------------------------------------------------- */
-
-// /* Exported functions -------------------------------------------------------- */
-
-// /**
-// * @brief 初始化PC通信
-// */
-// void PC_Init(void) {
-// // MX_USART1_UART_Init(); // 初始化 USART1
-// pc_data.PC_online = false; // 默认PC离线
-// }
-
-// /**
-// * @brief 通过串口发送数据
-// * @param data 要发送的16位数据
-// */
-// void PC_SendData(void) {
-// // 将 pc_data.to_pc 数据通过串口发送
-// HAL_UART_Transmit(&huart1, (uint8_t *)&pc_data.to_pc, sizeof(PC_UpPackage_t), HAL_MAX_DELAY);
-// }
-
-// /**
-// * @brief 接收串口数据
-// * @param data 接收缓冲区
-// * @param length 接收数据长度
-// */
-// void PC_ReceiveData(uint8_t *data, uint16_t length) {
-// if (length == sizeof(PC_DownPackage_t)) {
-// memcpy(&pc_data.from_pc, data, length); // 将接收到的数据存储到 pc_data.from_pc
-// pc_data.PC_online = true; // 标记PC在线
-// }
-// }
\ No newline at end of file
diff --git a/User/device/pc.h b/User/device/pc.h
index 1c550ad..e69de29 100644
--- a/User/device/pc.h
+++ b/User/device/pc.h
@@ -1,33 +0,0 @@
-// #pragma once
-
-// /* Includes ----------------------------------------------------------------- */
-
-// #include
-// #include // 添加此行以定义 bool 类型
-// /* Exported constants ------------------------------------------------------- */
-// /* Exported macro ----------------------------------------------------------- */
-// /* Exported types ----------------------------------------------------------- */
-
-// typedef struct {
-// uint8_t notice;
-// } PC_DownPackage_t;
-
-// // 滤波后的ADC数据
-// typedef struct {
-// uint16_t adc_data; // ADC数据
-// } PC_UpPackage_t;
-
-// // ADC数据结构体
-// typedef struct {
-// PC_DownPackage_t from_pc; // 从PC接收的数据
-// PC_UpPackage_t to_pc; // 发送到PC的数据
-// bool PC_online; // PC在线状态
-// } PC_t;
-
-
-// extern PC_t pc_data; // 用于存储PC通信数据
-
-// /* Exported functions prototypes -------------------------------------------- */
-// void PC_Init(void);
-// void PC_SendData(void);
-// void PC_ReceiveData(uint8_t *data, uint16_t length);
diff --git a/User/task/adc.c b/User/task/adc.c
index 5807d0b..6c21124 100644
--- a/User/task/adc.c
+++ b/User/task/adc.c
@@ -1,13 +1,12 @@
/* Includes ----------------------------------------------------------------- */
#include "task/user_task.h"
#include "device/ads8864.h"
-#include "bsp/led.h" // 包含 LED 控制头文件
/* Private typedef ---------------------------------------------------------- */
/* Private define ----------------------------------------------------------- */
/* Private macro ------------------------------------------------------------ */
/* Private variables --------------------------------------------------------- */
-Ads8864_t ads8864_data; // 引用全局的ADC数据结构体
+Ads8864_t ads8864;
/* Private function --------------------------------------------------------- */
/* Exported functions ------------------------------------------------------- */
@@ -15,21 +14,16 @@ void Task_Adc(void *argument) {
(void)argument; // 消除未使用参数的警告
/* 计算任务运行到指定频率需要等待的tick数 */
- const uint32_t delay_tick = osKernelGetTickFreq() / 200; // 250Hz
-
- // osDelay(1000); /* 延时一段时间再开启任务 */
-
+ const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_ADC; // 200Hz
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
- ads8864_Init(); // 初始化 ADC
+ ads8864_Init(&ads8864); // 初始化 ADC
while (1) {
tick += delay_tick; /* 计算下一个唤醒时刻 */
- // 读取滤波后的 ADC 数据
- Ads8864_Read();
- osMessageQueueReset(adcQueueHandle); // 重置消息队列
- osMessageQueuePut(adcQueueHandle, &ads8864_data.filtered.adc_data, 0, 0); // 将数据放入消息队列
- osMessageQueueReset(pcQueueHandle); // 重置消息队列
- osMessageQueuePut(pcQueueHandle, &ads8864_data.filtered.adc_data, 0, 0); // 将数据放入消息队列
- // BSP_LED_SET(BSP_LED1, BSP_LED_TAGGLE); // 切换 LED 状态
+ Ads8864_Read(&ads8864);
+ osMessageQueueReset(task_runtime.msgq.adc); // 重置消息队列
+ osMessageQueuePut(task_runtime.msgq.adc, &ads8864.filtered, 0, 0); // 将数据放入消息队列
+ osMessageQueueReset(task_runtime.msgq.pc); // 重置消息队列
+ osMessageQueuePut(task_runtime.msgq.pc, &ads8864.filtered.distance,0, 0); // 将数据放入消息队列
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
}
}
\ No newline at end of file
diff --git a/User/task/can.c b/User/task/can.c
index fe37308..981a66a 100644
--- a/User/task/can.c
+++ b/User/task/can.c
@@ -8,90 +8,40 @@
#include "can.h"
#include "task\user_task.h"
#include "bsp\led.h"
+#include "device\ads8864.h"
+#include "device\can.h"
/* Private typedef ---------------------------------------------------------- */
-typedef struct {
- uint8_t TxData[8]; // 要发送的数据
- uint16_t TxID; // 发送的CAN ID
- uint8_t TxStatus; // 发送状态,0: 成功,1: 失败
- uint32_t DebugCounter; // 调试计数器
-} can_t;
-
/* Private define ----------------------------------------------------------- */
/* Private variables -------------------------------------------------------- */
-can_t can_debug = {
- .TxData = {0},
- .TxID = 0x023,
- .TxStatus = 0,
- .DebugCounter = 0
-};
+
/* Exported functions ------------------------------------------------------- */
-void CAN_Init(CAN_HandleTypeDef *hcan_Cur)
-{
- // 仅初始化CAN,不配置接收过滤器
- HAL_CAN_Start(hcan_Cur); // 开启CAN
-}
-
-/* CAN发送函数 */
-uint8_t CAN_SendData(CAN_HandleTypeDef *hcan_Cur, uint8_t *pData, uint16_t ID)
-{
- HAL_StatusTypeDef HAL_RetVal = HAL_ERROR;
- uint8_t FreeTxNum = 0;
- CAN_TxHeaderTypeDef TxMessage;
-
- TxMessage.StdId = ID;
- TxMessage.DLC = 8; /* 默认一帧传输长度为8 */
- TxMessage.IDE = CAN_ID_STD;
- TxMessage.RTR = CAN_RTR_DATA;
-
- FreeTxNum = HAL_CAN_GetTxMailboxesFreeLevel(hcan_Cur);
-
- while (FreeTxNum == 0) // 等待空邮箱,可能会卡死在这里(小BUG)
- {
- FreeTxNum = HAL_CAN_GetTxMailboxesFreeLevel(hcan_Cur);
- }
-
- HAL_RetVal = HAL_CAN_AddTxMessage(hcan_Cur, &TxMessage, pData, (uint32_t *)CAN_TX_MAILBOX1);
-
- if (HAL_RetVal != HAL_OK)
- {
- return 1; // 发送失败
- }
-
- return 0; // 发送成功
-}
-
void Task_Can(void *argument) {
(void)argument; // 消除未使用参数的警告
- const uint32_t delay_tick = osKernelGetTickFreq() / 100; // 50Hz
+ const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN; // 100Hz
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */
CAN_Init(&hcan); // 初始化CAN模块
- uint16_t adc_data = 0; // 用于存储从消息队列读取的 ADC 数据
-
- // 初始化调试结构体数据
- for (int i = 0; i < 8; i++) {
- can_debug.TxData[i] = 0; // 填充测试数据
- }
+ uint16_t adc_data = 0; // 用于存储ADC数据
while (1) {
- tick += delay_tick; /* 计算下一个唤醒时刻 */
+ tick += delay_tick; /* 计算下一个唤醒时刻 */
// 周期性发送数据
- if (osMessageQueueGet(adcQueueHandle, &adc_data, NULL, osWaitForever) == osOK) {
- // 将 ADC 数据填充到 CAN 数据帧
- can_debug.TxData[0] = (adc_data >> 8) & 0xFF; // 高字节
- can_debug.TxData[1] = adc_data & 0xFF; // 低字节
+ if (osMessageQueueGet(task_runtime.msgq.adc, &adc_data, NULL, 100) == osOK) {
+ // 将 ADC 数据填充到 CAN 数据帧
+ can_debug.TxData[0] = (adc_data >> 8) & 0xFF; // 高字节
+ can_debug.TxData[1] = adc_data & 0xFF; // 低字节
- // 发送 CAN 数据
- can_debug.TxStatus = CAN_SendData(&hcan, can_debug.TxData, can_debug.TxID);
- can_debug.DebugCounter++; // 调试计数器递增
- }
- //每发送10条数据切换一次LED状态
+ // 发送 CAN 数据
+ can_debug.TxStatus = CAN_SendData(&hcan, can_debug.TxData, can_debug.TxID);
+ can_debug.DebugCounter++; // 调试计数器递增
+ }
+ // 每发送10条数据切换一次LED状态
if (can_debug.DebugCounter % 10 == 0) {
BSP_LED_SET(BSP_LED2, BSP_LED_TAGGLE); // 切换 LED 状态
- }
+ }
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
}
}
\ No newline at end of file
diff --git a/User/task/init.c b/User/task/init.c
index 85a5222..a4f5fe9 100644
--- a/User/task/init.c
+++ b/User/task/init.c
@@ -6,14 +6,12 @@
/* Includes ----------------------------------------------------------------- */
#include "task\user_task.h"
-
+#include "device/ads8864.h"
/* Private typedef ---------------------------------------------------------- */
/* Private define ----------------------------------------------------------- */
/* Private macro ------------------------------------------------------------ */
/* Private variables -------------------------------------------------------- */
-osMessageQueueId_t adcQueueHandle;
-osMessageQueueId_t pcQueueHandle;
/* Private function --------------------------------------------------------- */
/* Exported functions ------------------------------------------------------- */
@@ -28,14 +26,16 @@ void Task_Init(void *argument) {
osKernelLock(); // 锁定内核,防止任务切换
// 创建任务,确保任务创建成功
-
- osThreadId_t monitorTaskHandle = osThreadNew(Task_Monitor, NULL, &attr_monitor);
- osThreadId_t adcReadTaskHandle = osThreadNew(Task_Adc, NULL, &attr_adc);
- osThreadId_t canTaskHandle = osThreadNew(Task_Can, NULL, &attr_can);
- osThreadId_t pcTaskHandle = osThreadNew(Task_PC, NULL, &attr_pc);
+ task_runtime.thread.adc = osThreadNew(Task_Adc, NULL, &attr_adc);
+ task_runtime.thread.can = osThreadNew(Task_Can, NULL, &attr_can);
+ task_runtime.thread.monitor = osThreadNew(Task_Monitor, NULL, &attr_monitor);
+ task_runtime.thread.pc = osThreadNew(Task_PC, NULL, &attr_pc);
+
//创建消息队列
- adcQueueHandle = osMessageQueueNew(2u, sizeof(uint16_t), NULL);
- pcQueueHandle = osMessageQueueNew(2u, sizeof(uint16_t), NULL);
+ task_runtime.msgq.adc =osMessageQueueNew(2u, sizeof(Ads8864_Filtered_t), NULL);
+ task_runtime.msgq.can = osMessageQueueNew(2u, sizeof(Ads8864_Filtered_t), NULL);
+ task_runtime.msgq.pc = osMessageQueueNew(2u, sizeof(float), NULL);
+
osKernelUnlock(); // 解锁内核
osThreadTerminate(osThreadGetId()); // 任务完成后结束自身
}
diff --git a/User/task/mointor.c b/User/task/mointor.c
index 099e6b2..622a851 100644
--- a/User/task/mointor.c
+++ b/User/task/mointor.c
@@ -13,14 +13,8 @@
/* Exported functions ------------------------------------------------------- */
void Task_Monitor(void *argument) {
(void)argument; // 消除未使用参数的警告
- // BSP_WS2812_Init(); // 初始化 WS2812 LED
while (1) {
BSP_LED_SET(BSP_LED1, BSP_LED_TAGGLE); // 切换 LED 状态
- // BSP_WS2812_Set(255, 0, 0); // 设置为红色
HAL_Delay(1000); // 延时 1 秒
- // BSP_WS2812_Set(0, 255, 0); // 设置为绿色
- // HAL_Delay(1000); // 延时 1 秒
- // BSP_WS2812_Set(0, 0, 255); // 设置为蓝色
- // HAL_Delay(1000); // 延时 1 秒
}
}
diff --git a/User/task/pc.c b/User/task/pc.c
index e002866..611541c 100644
--- a/User/task/pc.c
+++ b/User/task/pc.c
@@ -1,12 +1,12 @@
/* Includes ----------------------------------------------------------------- */
#include "task\user_task.h"
// #include "device/pc.h"
-#include "usart.h" // 添加此行以声明 HAL_UART_Receive 和 huart1
+#include "usart.h"
#include "bsp\led.h"
/* Private variables -------------------------------------------------------- */
-uint16_t adc_data = 0; // 用于存储ADC数据
+float distance = 0.0f; // 用于存储距离数据单位为米
/* Exported functions ------------------------------------------------------- */
void Task_PC(void *argument) {
(void)argument; // 消除未使用参数的警告
@@ -15,11 +15,10 @@ void Task_PC(void *argument) {
while (1) {
tick += delay_tick; /* 计算下一个唤醒时刻 */
- // 使用 DMA 发送数据
- if (osMessageQueueGet(pcQueueHandle, &adc_data, NULL, osWaitForever) == osOK) {
- // 直接发送数字到PC
- HAL_UART_Transmit_DMA(&huart3, (uint8_t *)&adc_data, sizeof(adc_data));
+ if (osMessageQueueGet(task_runtime.msgq.pc, &distance, NULL, osWaitForever) == osOK) {
+ HAL_UART_Transmit_DMA(&huart3, (uint8_t *)&distance, sizeof(distance)); // 发送数据
}
+
osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */
}
}
\ No newline at end of file
diff --git a/User/task/user_task.c b/User/task/user_task.c
index b08e5cd..e2c082c 100644
--- a/User/task/user_task.c
+++ b/User/task/user_task.c
@@ -1,5 +1,7 @@
#include "task/user_task.h"
+Task_Runtime_t task_runtime;
+
// 定义任务属性
const osThreadAttr_t attr_init = {
.name = "Task_Init",
diff --git a/User/task/user_task.h b/User/task/user_task.h
index 5686017..7b4537f 100644
--- a/User/task/user_task.h
+++ b/User/task/user_task.h
@@ -10,12 +10,51 @@ extern "C" {
// 定义任务运行时结构体
typedef struct {
- uint32_t runtime;
-} Task_Runtime_t;
+ /* 各任务,也可以叫做线程 */
+ struct {
+ osThreadId_t can; /* CAN任务 */
+ osThreadId_t adc; /* ADC任务 */
+ osThreadId_t pc; /* PC任务 */
+ osThreadId_t monitor; /* 监控任务 */
+ } thread;
+
+ struct {
+ osMessageQueueId_t can; /* CAN消息队列 */
+ osMessageQueueId_t adc; /* ADC消息队列 */
+ osMessageQueueId_t pc; /* PC消息队列 */
+ } msgq;
+
+
+ struct {
+ uint32_t can; /* CAN使用 */
+ uint32_t adc; /* ADC使用 */
+ uint32_t pc; /* PC使用 */
+ uint32_t monitor; /* 监控使用 */
+ } heap_water_mark; /* heap使用 */
+
+ struct {
+ float can; /* CAN任务运行频率 */
+ float adc; /* ADC任务运行频率 */
+ float pc; /* PC任务运行频率 */
+ float monitor; /* 监控任务运行频率 */
+ } freq; /* 任务运行频率 */
+
+ struct {
+ uint32_t can; /* CAN任务运行时间 */
+ uint32_t adc; /* ADC任务运行时间 */
+ uint32_t pc; /* PC任务运行时间 */
+ uint32_t monitor; /* 监控任务运行时间 */
+ } last_up_time; /* 任务最近运行时间 */
+ } Task_Runtime_t;
+
+
// 任务频率和初始化延时
-#define TASK_FREQ_CAN (1000u)
-#define TASK_FREQ_ADC (500u)
+#define TASK_FREQ_CAN (100u)
+#define TASK_FREQ_ADC (200u)
+#define TASK_FREQ_MONITOR (1u)
+#define TASK_FREQ_PC (100u)
+
#define TASK_INIT_DELAY_INFO (500u)
@@ -24,20 +63,21 @@ typedef struct {
osThreadId_t can;
osThreadId_t adc;
osThreadId_t monitor;
- // osThreadId_t init;
osThreadId_t pc;
} Task_Handles_t;
extern Task_Runtime_t task_runtime;
+
+
extern const osThreadAttr_t attr_init;
+
extern const osThreadAttr_t attr_can;
extern const osThreadAttr_t attr_adc;
extern const osThreadAttr_t attr_monitor;
extern const osThreadAttr_t attr_pc;
-extern osMessageQueueId_t adcQueueHandle;
-extern osMessageQueueId_t pcQueueHandle;
-
+// extern osMessageQueueId_t adcQueueHandle;
+// extern osMessageQueueId_t pcQueueHandle;
void Task_Init(void *argument);
void Task_Can(void *argument);