diff --git a/.vscode/settings.json b/.vscode/settings.json index 6f1625e..181a970 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -60,6 +60,7 @@ "streambuf": "cpp", "cinttypes": "cpp", "typeinfo": "cpp", - "can.h": "c" + "can.h": "c", + "deque": "cpp" } } \ No newline at end of file diff --git a/app/Core/Src/can.c b/app/Core/Src/can.c index 909a3fb..8fca68a 100644 --- a/app/Core/Src/can.c +++ b/app/Core/Src/can.c @@ -47,7 +47,7 @@ void MX_CAN1_Init(void) hcan1.Init.AutoBusOff = ENABLE; hcan1.Init.AutoWakeUp = DISABLE; hcan1.Init.AutoRetransmission = ENABLE; - hcan1.Init.ReceiveFifoLocked = ENABLE; + hcan1.Init.ReceiveFifoLocked = DISABLE; hcan1.Init.TransmitFifoPriority = DISABLE; if (HAL_CAN_Init(&hcan1) != HAL_OK) { diff --git a/app/MDK-ARM/app.uvguix.h_zha b/app/MDK-ARM/app.uvguix.h_zha index b15f2e1..02fd5f6 100644 --- a/app/MDK-ARM/app.uvguix.h_zha +++ b/app/MDK-ARM/app.uvguix.h_zha @@ -6,7 +6,7 @@
### uVision Project, (C) Keil Software
- D:\workspace\project_boditech_vidas_a8000\Incubator_control_system\dep\libtrinamic\src\ic + D:\workspace\project_boditech_vidas_a8000\Incubator_control_system\dep\libiflytop_micro\stm32\component\iflytop_can_client_v1 @@ -15,7 +15,7 @@ 38003 Registers - 122 30 + 160 161 346 @@ -90,28 +90,28 @@ 44 - 0 - 1 + 2 + 3 - -1 - -1 + -32000 + -32000 -1 -1 - 288 - 290 - 1390 - 1274 + 47 + -1447 + -347 + 1033 0 - 2371 - 010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000001000000100000000B0000000100000056443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF64443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C4D444B2D41524D5C737461727475705F73746D33326634303778782E730000000015737461727475705F73746D33326634303778782E7300000000FFDC7800FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D4334333631415C544D4334333631412E63000000000A544D4334333631412E6300000000BECEA100FFFFFFFF74443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C68656C706572735C4352432E6300000000054352432E6300000000F0A0A100FFFFFFFF79443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C72616D705C4C696E65617252616D70312E63000000000D4C696E65617252616D70312E6300000000BCA8E100FFFFFFFF78443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C72616D705C4C696E65617252616D702E63000000000C4C696E65617252616D702E63000000009CC1B600FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E637070000000000C746D6334333631412E63707000000000F7B88600FFFFFFFF50443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C756D61696E2E6370700000000009756D61696E2E63707000000000D9ADC200FFFFFFFF4F443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C706F72742E6370700000000008706F72742E63707000000000A5C2D700FFFFFFFF77443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C2E63000000000F73746D3332663478785F68616C2E6300000000B3A6BE00FFFFFFFF7C443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F756172742E63000000001473746D3332663478785F68616C5F756172742E6300000000EAD6A300FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E687070000000000C746D6334333631412E68707000000000F6FA7D00FFFFFFFF5E443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000B5E99D00FFFFFFFF65443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D63323136302E637070000000000B746D63323136302E637070000000005FC3CF00FFFFFFFF7B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D43323136305C544D43323136302E630000000009544D43323136302E6300000000C1838300FFFFFFFF7B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F7370692E63000000001373746D3332663478785F68616C5F7370692E6300000000CACAD500FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000790200008E01000066050000E8030000 + 2991 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000015000000140000000100000056443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF64443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C4D444B2D41524D5C737461727475705F73746D33326634303778782E730000000015737461727475705F73746D33326634303778782E7300000000FFDC7800FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D4334333631415C544D4334333631412E63000000000A544D4334333631412E6300000000BECEA100FFFFFFFF74443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C68656C706572735C4352432E6300000000054352432E6300000000F0A0A100FFFFFFFF79443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C72616D705C4C696E65617252616D70312E63000000000D4C696E65617252616D70312E6300000000BCA8E100FFFFFFFF78443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C72616D705C4C696E65617252616D702E63000000000C4C696E65617252616D702E63000000009CC1B600FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E637070000000000C746D6334333631412E63707000000000F7B88600FFFFFFFF50443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C756D61696E2E6370700000000009756D61696E2E63707000000000D9ADC200FFFFFFFF4F443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C706F72742E6370700000000008706F72742E63707000000000A5C2D700FFFFFFFF77443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C2E63000000000F73746D3332663478785F68616C2E6300000000B3A6BE00FFFFFFFF7C443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F756172742E63000000001473746D3332663478785F68616C5F756172742E6300000000EAD6A300FFFFFFFF66443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D6334333631412E687070000000000C746D6334333631412E68707000000000F6FA7D00FFFFFFFF5E443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000B5E99D00FFFFFFFF65443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C7372635C69635C746D63323136302E637070000000000B746D63323136302E637070000000005FC3CF00FFFFFFFF7B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C69635C544D43323136305C544D43323136302E630000000009544D43323136302E6300000000C1838300FFFFFFFF7B443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6170705C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F7370692E63000000001373746D3332663478785F68616C5F7370692E6300000000CACAD500FFFFFFFF77443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C69627472696E616D69635C49464C59544F502D544D432D4150495C746D635C68656C706572735C4D6163726F732E6800000000084D6163726F732E6800000000C5D4F200FFFFFFFF27433A5C4B65696C5F76355C41524D5C41524D43435C696E636C7564655C66756E6374696F6E616C000000000A66756E6374696F6E616C00000000FFDC7800FFFFFFFF6A443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C636F6D6D6F6E5C7A7369676E616C2E687070000000000B7A7369676E616C2E68707000000000BECEA100FFFFFFFF7D443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C6465705C6C696269666C79746F705F6D6963726F5C73746D33325C62617369635C73746D33325F68616C5F7265735F6D616E616765722E637070000000001973746D33325F68616C5F7265735F6D616E616765722E63707000000000F0A0A100FFFFFFFF4F443A5C776F726B73706163655C70726F6A6563745F626F6469746563685F76696461735F61383030305C496E63756261746F725F636F6E74726F6C5F73797374656D5C7372635C706F72742E6870700000000008706F72742E68707000000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000CFF9FFFF66000000000000009A030000 @@ -134,7 +134,7 @@ 16 - D600000066000000DC040000F0000000 + 000200008E0100000606000018020000 @@ -150,7 +150,7 @@ 0 16 - 03000000660000004801000090020000 + 0300000066000000480100006A030000 16 @@ -170,7 +170,7 @@ 0 16 - 03000000660000004801000090020000 + 0300000066000000480100006A030000 16 @@ -450,7 +450,7 @@ 0 16 - 03000000660000004801000090020000 + 0300000066000000480100006A030000 16 @@ -470,7 +470,7 @@ 0 16 - 03000000660000004801000090020000 + 0300000066000000480100006A030000 16 @@ -490,7 +490,7 @@ 0 16 - 00000000C10200003C040000A0030000 + 000000009B03000080070000DE030000 16 @@ -530,7 +530,7 @@ 0 16 - 03000000C40200008D0600000D040000 + 030000009E0300003904000061040000 16 @@ -1150,7 +1150,7 @@ 0 16 - 0300000066000000870000002A020000 + 03000000660000004801000090020000 16 @@ -1170,7 +1170,7 @@ 0 16 - 03000000C40200008D0600000D040000 + 030000009E0300003904000061040000 16 @@ -1190,7 +1190,7 @@ 0 16 - 03000000C40200008D0600000D040000 + 030000009E0300003904000061040000 16 @@ -1250,7 +1250,7 @@ 0 16 - 03000000C40200008D0600000D040000 + 030000009E0300003904000061040000 16 @@ -1270,7 +1270,7 @@ 0 16 - 03000000C40200008D0600000D040000 + 030000009E0300003904000061040000 16 @@ -1730,7 +1730,7 @@ 0 16 - 00000000A00300003C040000B3030000 + 00000000DE03000080070000F1030000 16 @@ -1799,14 +1799,14 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000D600000066000000DC040000F0000000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002A0200000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF4B0100004F0000004F010000A90200000100000002000010040000000100000078FFFFFFED060000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000660000008A0000005A020000000000004F0000004B010000A90200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000001A020000DC040000B80200000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000A90200003C040000AD0200000100000001000010040000000100000009FDFFFF8D000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000005E02000090060000D703000000000000AD0200003C040000A00300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFD6000000D9000000DC040000DD000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000000200008E0100000606000018020000D60000004F000000DC040000D90000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000013020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000340500008E01000006060000520300000A0400004F000000DC0400001302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF4B0100004F0000004F010000830300000100000002000010040000000100000078FFFFFFED060000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000002A0100008E01000075020000E8030000000000004F0000004B010000830300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000FF010000DC0400000302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000002A0100004203000006060000E00300000000000003020000DC040000A102000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF6E0200000302000072020000A102000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000008303000080070000870300000100000001000010040000000100000009FEFFFF8D010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000002A010000EC03000066050000DF040000000000008703000080070000DE0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File 2537 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3603,7 +3603,7 @@ 0 100 - 11 + 20 ../Core/Src/main.c 0 @@ -3669,17 +3669,17 @@ ..\..\src\umain.cpp - 25 - 23 - 48 + 0 + 1 + 20 1 0 ..\..\src\port.cpp - 4 - 22 + 3 + 23 47 1 @@ -3748,6 +3748,51 @@ 0 + + ..\..\dep\libtrinamic\IFLYTOP-TMC-API\tmc\helpers\Macros.h + 0 + 1 + 27 + 1 + + 0 + + + C:\Keil_v5\ARM\ARMCC\include\functional + 0 + 1 + 1 + 1 + + 0 + + + ../../dep/libiflytop_micro\common\zsignal.hpp + 0 + 109 + 133 + 1 + + 0 + + + ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp + 0 + 1 + 18 + 1 + + 0 + + + ..\..\src\port.hpp + 36 + 1 + 36 + 1 + + 0 + diff --git a/app/MDK-ARM/app.uvoptx b/app/MDK-ARM/app.uvoptx index accba96..414b451 100644 --- a/app/MDK-ARM/app.uvoptx +++ b/app/MDK-ARM/app.uvoptx @@ -806,7 +806,7 @@ dep/libiflytop_micro - 0 + 1 0 0 0 @@ -822,6 +822,30 @@ 0 0 + + 5 + 34 + 8 + 0 + 0 + 0 + ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp + stm32_hal_res_manager.cpp + 0 + 0 + + + 5 + 35 + 8 + 0 + 0 + 0 + ..\..\dep\libiflytop_micro\stm32\component\iflytop_can_client_v1\iflytop_can_client.cpp + iflytop_can_client.cpp + 0 + 0 + @@ -832,7 +856,7 @@ 0 6 - 34 + 36 8 0 0 @@ -844,7 +868,7 @@ 6 - 35 + 37 8 0 0 @@ -864,7 +888,7 @@ 0 7 - 36 + 38 1 0 0 @@ -876,7 +900,7 @@ 7 - 37 + 39 1 0 0 @@ -888,7 +912,7 @@ 7 - 38 + 40 1 0 0 @@ -900,7 +924,7 @@ 7 - 39 + 41 1 0 0 @@ -912,7 +936,7 @@ 7 - 40 + 42 8 0 0 @@ -924,7 +948,7 @@ 7 - 41 + 43 1 0 0 @@ -936,7 +960,7 @@ 7 - 42 + 44 1 0 0 @@ -948,7 +972,7 @@ 7 - 43 + 45 8 0 0 diff --git a/app/MDK-ARM/app.uvprojx b/app/MDK-ARM/app.uvprojx index 6c23be5..69a232d 100644 --- a/app/MDK-ARM/app.uvprojx +++ b/app/MDK-ARM/app.uvprojx @@ -1027,6 +1027,16 @@ 1 ..\..\dep\libiflytop_micro\stm32\basic\basic.c + + stm32_hal_res_manager.cpp + 8 + ..\..\dep\libiflytop_micro\stm32\basic\stm32_hal_res_manager.cpp + + + iflytop_can_client.cpp + 8 + ..\..\dep\libiflytop_micro\stm32\component\iflytop_can_client_v1\iflytop_can_client.cpp + diff --git a/dep/libiflytop_micro b/dep/libiflytop_micro index bf17a8f..59c26e1 160000 --- a/dep/libiflytop_micro +++ b/dep/libiflytop_micro @@ -1 +1 @@ -Subproject commit bf17a8fb71483b29390173bc035f135b33b58c6a +Subproject commit 59c26e1dcba6743ee3ed302bb14a110526c50aaf diff --git a/src/port.cpp b/src/port.cpp index 55b1c23..6ebba1d 100644 --- a/src/port.cpp +++ b/src/port.cpp @@ -2,11 +2,14 @@ #include #include "libiflytop_micro/stm32/basic/basic.h" +#include "libtrinamic/src/ic/tmc2160.hpp" +#include "libtrinamic\src\ic\tmc4361A.hpp" #include "main.h" #include "project_board.hpp" #include "spi.h" #include "tim.h" #include "usart.h" + /** * @brief printf 串口重定向 * @@ -15,13 +18,14 @@ * @return int */ extern "C" { -int fputc(int ch, FILE* stream) { +int fputc(int ch, FILE *stream) { uint8_t c = ch; HAL_UART_Transmit(&DEBUG_UART, &c, 1, 100); return ch; } } +namespace iflytop { void port_do_debug_light_state() { static uint32_t lastprocess = 0; if (sys_haspassedms(lastprocess) > 300) { @@ -30,11 +34,10 @@ void port_do_debug_light_state() { } } void port_delay_us(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); } - void port_spi_cs_select(bool select) { // HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, select ? GPIO_PIN_SET : GPIO_PIN_RESET); } -void port_tmc_motor_spi_write_and_read(int channel, uint8_t* data, size_t length) { +void port_tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length) { // if (channel == MOTOR_1_TMC4361A_CHANNEL) { port_spi_cs_select(false); @@ -43,7 +46,6 @@ void port_tmc_motor_spi_write_and_read(int channel, uint8_t* data, size_t length port_spi_cs_select(true); } } - void port_tmc_nFREEZE_pin_set_state(uint8_t channel, bool state) { if (channel == MOTOR_1_TMC4361A_CHANNEL) { HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, state ? GPIO_PIN_SET : GPIO_PIN_RESET); @@ -55,7 +57,6 @@ void port_tmc_ENN_pin_set_state(uint8_t channel, bool state) { } } void port_tmc_nRESET_pin_set_state(uint8_t channel, bool state) {} - void port_tmc_extern_clk_enable() { #if 1 /** @@ -129,3 +130,5 @@ void port_peltier_set_pwm(int pwm) { HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET); /*COLD_CTR*/ } } + +} // namespace iflytop diff --git a/src/port.hpp b/src/port.hpp index 7bcd42c..508034b 100644 --- a/src/port.hpp +++ b/src/port.hpp @@ -1,22 +1,64 @@ #include #include +#include "libiflytop_micro\stm32\basic\iflytop_micro_os.hpp" +namespace iflytop { void port_do_debug_light_state(); void port_delay_us(uint32_t us); /******************************************************************************* - * tmc芯片驱动相关 * + * IflytopMicroOS对接 * *******************************************************************************/ -void port_tmc_motor_spi_write_and_read(int channel, uint8_t* data, size_t length); -void port_tmc_extern_clk_enable(); - -void port_tmc_nFREEZE_pin_set_state(uint8_t channel, bool state); -void port_tmc_ENN_pin_set_state(uint8_t channel, bool state); -void port_tmc_nRESET_pin_set_state(uint8_t channel, bool state); - -int32_t port_tmc4361_get_version(uint8_t channel); +class IflytopMicroOSImpl : public IflytopMicroOS { + public: + virtual void sleepMS(int ms) { HAL_Delay(ms); }; + virtual uint32_t hasPassedMS(uint32_t ticket) { return sys_haspassedms(ticket); }; + virtual uint32_t getTicket() { return HAL_GetTick(); }; + virtual uint32_t getNowMS() { return HAL_GetTick(); }; +}; /******************************************************************************* * 帕尔贴驱动电路 * *******************************************************************************/ void port_peltier_set_pwm(int pwm); +/******************************************************************************* + * tmc芯片驱动相关 * + *******************************************************************************/ +void port_tmc_motor_spi_write_and_read(int channel, uint8_t *data, size_t length); +void port_tmc_extern_clk_enable(); +void port_tmc_nFREEZE_pin_set_state(uint8_t channel, bool state); +void port_tmc_ENN_pin_set_state(uint8_t channel, bool state); +void port_tmc_nRESET_pin_set_state(uint8_t channel, bool state); +int32_t port_tmc4361_get_version(uint8_t channel); +/** + * @brief 对接TMC4361和硬件的接口 + */ +class TMC4361AImpl : public TMC4361A { + protected: + virtual void setResetPinState(bool state) { port_tmc_nRESET_pin_set_state(m_channel, state); }; + virtual void setFREEZEPinState(bool state) { port_tmc_nFREEZE_pin_set_state(m_channel, state); }; + virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); }; + virtual bool getTargetReachedPinState() { return false; }; + virtual void sleepus(int32_t us) { port_delay_us(us); }; + virtual void readWriteArray(uint8_t *data, size_t length) { // + port_tmc_motor_spi_write_and_read(m_channel, data, length); + }; +}; +/** + * @brief 对接TMC2160和硬件的接口 + */ +class TMC2160Impl : public TMC2160 { + TMC4361A *m_tmc4361; + + public: + void initialize(uint8_t channel, TMC4361A *tmc4361) { + m_tmc4361 = tmc4361; + TMC2160::initialize(channel); + } + + protected: + virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); }; + virtual void sleepus(int32_t us) { port_delay_us(us); }; + virtual void readWriteArray(uint8_t *data, size_t length) { m_tmc4361->readWriteCover(data, length); }; +}; +} // namespace iflytop \ No newline at end of file diff --git a/src/project_board.hpp b/src/project_board.hpp index 2ee4eaf..82e08dd 100644 --- a/src/project_board.hpp +++ b/src/project_board.hpp @@ -1,6 +1,8 @@ #pragma once #define VERSION "v1.0" +// 设备ID +#define DEVICE_ID 0x02 // 调试串口 #define DEBUG_UART huart1 @@ -9,10 +11,10 @@ #define DEBUG_LIGHT_PORT GPIOE #define DEBUG_LIGHT_PIN GPIO_PIN_8 -//微秒延迟定时器,注意该延时定时器需要按照以下文档进行配置 -//http://192.168.1.3:3000/zwikipedia/iflytop_wikipedia/src/branch/master/doc/stm32cubemx_us_timer.md +// 微秒延迟定时器,注意该延时定时器需要按照以下文档进行配置 +// http://192.168.1.3:3000/zwikipedia/iflytop_wikipedia/src/branch/master/doc/stm32cubemx_us_timer.md #define DELAY_US_TIMER htim6 // 电机编号 #define MOTOR_1_TMC4361A_CHANNEL 1 -#define MOTOR_1_TMC2160_CHANNEL 2 \ No newline at end of file +#define MOTOR_1_TMC2160_CHANNEL 2 diff --git a/src/umain.cpp b/src/umain.cpp index c81168b..712062d 100644 --- a/src/umain.cpp +++ b/src/umain.cpp @@ -6,102 +6,83 @@ #include "libtrinamic\src\ic\tmc4361A.hpp" #include "port.hpp" #include "project_board.hpp" - -#define TAG "main" - // -// port_tmc_DRV_ENN_pin_set_state +#include "libiflytop_micro\common\zsignal.hpp" +#include "libiflytop_micro\stm32\component\iflytop_can_client_v1\iflytop_can_client.hpp" +#define TAG "main" using namespace iflytop; -class TMC4361AImpl : public TMC4361A { - protected: - virtual void setResetPinState(bool state) { port_tmc_nRESET_pin_set_state(m_channel, state); }; - virtual void setFREEZEPinState(bool state) { port_tmc_nFREEZE_pin_set_state(m_channel, state); }; - virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); }; - virtual bool getTargetReachedPinState() { return false; }; - virtual void sleepus(int32_t us) { port_delay_us(us); }; - virtual void readWriteArray(uint8_t *data, size_t length) { // - port_tmc_motor_spi_write_and_read(m_channel, data, length); - }; -}; -class TMC2160Impl : public TMC2160 { - TMC4361A *m_tmc4361; - +using namespace std; +class Main { public: - void initialize(uint8_t channel, TMC4361A *tmc4361) { - m_tmc4361 = tmc4361; - TMC2160::initialize(channel); + TMC4361AImpl tmc4361motor1; + TMC2160Impl tmc2160motor1; + IflytopCanClient canClient; + IflytopMicroOSImpl os; + + ZSLOT3(Main, onCanRxData, CAN_RxHeaderTypeDef *, uint8_t *, uint8_t); + void onCanRxData(CAN_RxHeaderTypeDef *rxMegHeader, uint8_t *data, uint8_t len) { + ZLOGI(TAG, "onCanRxData:"); + ZLOGI_HEX(TAG, data, len); } - protected: - virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); }; - virtual void sleepus(int32_t us) { port_delay_us(us); }; - virtual void readWriteArray(uint8_t *data, size_t length) { m_tmc4361->readWriteCover(data, length); }; -}; -static TMC4361AImpl tmc4361motor1; -static TMC2160Impl tmc2160motor1; - -void initmotor() { - port_tmc_extern_clk_enable(); - // tmc4361motor1.init(); - - TMC4361AImpl::TMC4361AConfig_t *tmc4361aconfig = TMC4361AImpl::createDeafultTMC4361AConfig(); - tmc4361aconfig->base_config.fs_per_rev = 200; - tmc4361aconfig->encoder_config.diff_enc_in_disable = false; - tmc4361aconfig->encoder_config.enc_in_res = 4000; - tmc4361aconfig->close_loop_config.enable_closed_loop = true; - - tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig); - tmc2160motor1.initialize(MOTOR_1_TMC2160_CHANNEL, &tmc4361motor1); - - // 2160初始化 - tmc2160motor1.setMaximumCurrent(3); - - HAL_Delay(100); - tmc4361motor1.enableIC(true); - tmc2160motor1.enableIC(true); - - /** - * @brief - * PPS = 1000000 - * RPS = 1000000/200/256 - * RPM = 1000000/200/256*60 - */ + void motorInitialize() { + port_tmc_extern_clk_enable(); + TMC4361AImpl::TMC4361AConfig_t *tmc4361aconfig = TMC4361AImpl::createDeafultTMC4361AConfig(); + tmc4361aconfig->base_config.fs_per_rev = 200; + tmc4361aconfig->encoder_config.diff_enc_in_disable = false; + tmc4361aconfig->encoder_config.enc_in_res = 4000; + tmc4361aconfig->close_loop_config.enable_closed_loop = true; + + tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160, tmc4361aconfig); + tmc2160motor1.initialize(MOTOR_1_TMC2160_CHANNEL, &tmc4361motor1); + + // 2160初始化 + tmc2160motor1.setMaximumCurrent(3); + + HAL_Delay(100); + tmc4361motor1.enableIC(true); + tmc2160motor1.enableIC(true); + /** + * @brief 通过读取Version寄存器来判断芯片是否正常 + */ + int32_t ic4361Version = tmc4361motor1.readICVersion(); + int32_t ic2160Version = tmc2160motor1.readICVersion(); + // 期望 4361Version:2 ic2160Version:30 + ZLOGI(TAG, "TMC4361Version:%x TMC2160VERSION:%x", ic4361Version, ic2160Version); + tmc4361motor1.setMaximumAcceleration(300000); + tmc4361motor1.setMaximumDeceleration(300000); + } - /** - * @brief 通过读取Version寄存器来判断芯片是否正常 - */ - int32_t ic4361Version = tmc4361motor1.readICVersion(); - int32_t ic2160Version = tmc2160motor1.readICVersion(); - // 期望 4361Version:2 ic2160Version:30 - ZLOGI(TAG, "TMC4361Version:%x TMC2160VERSION:%x", ic4361Version, ic2160Version); + void main(int argc, char const *argv[]) { + sys_loggger_enable(true); + ZLOGI(TAG, "VERSION:%s", VERSION); + // port_peltier_set_pwm(0); + + IflytopCanClient::iflytop_can_client_config_t *config = canClient.createDefaultConfig(DEVICE_ID); + canClient.initialize(&os, config); + canClient.onCanRxData.connect(this, &Main::onCanRxData); + + while (true) { + port_do_debug_light_state(); + #if 0 + static uint8_t tx[8] = {1, 2, 3, 4, 5, 6, 7, 8}; + canClient.translate(0x01, tx, 8, 2); + if (canClient.getLastTransmitStatus() == HAL_OK) { + ZLOGI(TAG, "send ok"); + } else { + ZLOGI(TAG, "send fail"); + } + HAL_Delay(1000); + #endif + } + } +}; - tmc4361motor1.setMaximumAcceleration(300000); - tmc4361motor1.setMaximumDeceleration(300000); - tmc4361motor1.moveTo(8000000, 1000000); -} +static Main mainObject; extern "C" { int umain(int argc, char const *argv[]) { -#if 1 - sys_loggger_enable(true); - ZLOGI(TAG, "VERSION:%s", VERSION); - - // port_peltier_set_pwm(30); - port_peltier_set_pwm(0); - - while (true) { - port_do_debug_light_state(); - // HAL_Delay(30); - // 打印电机当前位置 - // int32_t encpos = tmc4361motor1.getENC_POS(); - // int32_t xactual = tmc4361motor1.getXACTUAL(); - // ZLOGI(TAG, "encpos:%d xactual:%d %d", encpos, xactual, tmc4361motor1.getENC_POS_DEV()); - } -#endif - + mainObject.main(argc, argv); return 0; } } - - -