From 9f7d7820ae4eca4c374c0776bfcf382579184734 Mon Sep 17 00:00:00 2001 From: RB Date: Wed, 2 Apr 2025 20:51:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9move=5Fxr=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 5 ++ MDK-ARM/sick.uvguix.lvzucheng | 94 +++++++++++++++++------------------ User/bsp/bsp.h | 17 +++++++ User/bsp/can.c | 19 +++++++ User/bsp/can.h | 15 ++++++ User/bsp/led.c | 1 - User/bsp/led.h | 4 +- User/bsp/spi.c | 26 ++++++++++ User/bsp/spi.h | 22 ++++++++ User/component/user_math.c | 12 +++++ User/component/user_math.h | 20 ++++++++ User/device/ads8864.c | 42 ++++++++++------ User/device/ads8864.h | 7 +-- User/device/can.c | 57 ++++++++++++++++++--- User/device/can.h | 32 ++++++------ User/device/pc.c | 36 -------------- User/device/pc.h | 33 ------------ User/task/adc.c | 22 +++----- User/task/can.c | 82 ++++++------------------------ User/task/init.c | 20 ++++---- User/task/mointor.c | 6 --- User/task/pc.c | 11 ++-- User/task/user_task.c | 2 + User/task/user_task.h | 56 ++++++++++++++++++--- 24 files changed, 370 insertions(+), 271 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 User/bsp/bsp.h create mode 100644 User/component/user_math.c create mode 100644 User/component/user_math.h 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);