From f2e3d5422ce0e774435336e604689b591fa0b199 Mon Sep 17 00:00:00 2001 From: gaems Date: Tue, 13 Oct 2026 19:53:47 +0200 Subject: [PATCH] feat(u01): implement assignment --- UE/u01/Apus.uvguix.gaems | 256 +++++----- UE/u01/Apus.uvoptx | 20 +- UE/u01/CLAUDE.md | 28 ++ UE/u01/doc/psp.PNG | Bin 0 -> 127913 bytes UE/u01/doc/u01_dokumentation.typ | 448 +++++++++++++++++ UE/u01/listing/Apus.map | 808 +++++++++++++++++++----------- UE/u01/output/Apus.axf | Bin 80472 -> 88860 bytes UE/u01/output/Apus.build_log.htm | 38 +- UE/u01/output/Apus.htm | 472 ++++++++++------- UE/u01/output/Apus_Apus.dep | 45 +- UE/u01/output/main_1.o | Bin 4056 -> 5476 bytes UE/u01/output/systick.o | Bin 6008 -> 6524 bytes UE/u01/output/taskcounter.o | Bin 3064 -> 3040 bytes UE/u01/output/taskkey.d | 5 +- UE/u01/output/taskkey.o | Bin 2336 -> 7056 bytes UE/u01/output/taskled.d | 5 +- UE/u01/output/taskled.o | Bin 2344 -> 3608 bytes UE/u01/output/taskmandelbrot.d | 4 +- UE/u01/output/taskmandelbrot.o | Bin 4756 -> 5848 bytes UE/u01/output/taskpoti.d | 2 +- UE/u01/output/taskpoti.o | Bin 2348 -> 3320 bytes UE/u01/output/taskwatch.d | 20 +- UE/u01/output/taskwatch.o | Bin 2352 -> 3564 bytes UE/u01/output/tftdisplay.o | Bin 23240 -> 24960 bytes UE/u01/src/BSP/TftDisplay.c | 21 + UE/u01/src/BSP/TftDisplay.h | 11 + UE/u01/src/BSP/systick.c | 10 +- UE/u01/src/BSP/systick.h | 1 + UE/u01/src/Tasks/TaskCounter.c | 15 +- UE/u01/src/Tasks/TaskKey.c | 82 ++- UE/u01/src/Tasks/TaskLed.c | 68 ++- UE/u01/src/Tasks/TaskMandelbrot.c | 93 +++- UE/u01/src/Tasks/TaskPoti.c | 32 +- UE/u01/src/Tasks/TaskWatch.c | 66 ++- UE/u01/src/main.c | 57 ++- 35 files changed, 1828 insertions(+), 779 deletions(-) create mode 100644 UE/u01/CLAUDE.md create mode 100644 UE/u01/doc/psp.PNG create mode 100644 UE/u01/doc/u01_dokumentation.typ diff --git a/UE/u01/Apus.uvguix.gaems b/UE/u01/Apus.uvguix.gaems index 6811d5f..762fb2d 100644 --- a/UE/u01/Apus.uvguix.gaems +++ b/UE/u01/Apus.uvguix.gaems @@ -34,7 +34,7 @@ 38003 Registers - 140 100 + 140 90 346 @@ -89,7 +89,7 @@ 466 Source Browser 500 - 166 + 300 @@ -112,8 +112,8 @@ 2 3 - -1 - -1 + -32000 + -32000 -1 @@ -129,8 +129,8 @@ 0 - 1700 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000011000000000000000100000034433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF49433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C446576696365735C737461727475705F73746D3332663037322E730000000013737461727475705F73746D3332663037322E7300000000FFDC7800FFFFFFFF37433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C4253505C4B65792E6300000000054B65792E6300000000BECEA100FFFFFFFF3E433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C4253505C546674446973706C61792E63000000000C546674446973706C61792E6300000000F0A0A100FFFFFFFF41433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B436F756E7465722E63000000000D5461736B436F756E7465722E6300000000BCA8E100FFFFFFFF4B433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C73746D333266302D7374647065726970685C73746D3332663078785F7263632E63000000000F73746D3332663078785F7263632E6300000000F7B88600FFFFFFFF3B433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C4253505C7379737469636B2E6300000000097379737469636B2E6300000000A5C2D700FFFFFFFF35433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C44656275672E63000000000744656275672E6300000000D9ADC200FFFFFFFF35433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C44656275672E68000000000744656275672E6800000000A5C2D700FFFFFFFF37433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C4253505C4C65642E6300000000054C65642E6300000000B3A6BE00FFFFFFFF4C433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C73746D333266302D7374647065726970685C73746D3332663078785F6770696F2E68000000001073746D3332663078785F6770696F2E6800000000EAD6A300FFFFFFFF3D433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B4B65792E6300000000095461736B4B65792E6300000000F6FA7D00FFFFFFFF3D433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B4C65642E6300000000095461736B4C65642E6300000000B5E99D00FFFFFFFF3F433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B57617463682E63000000000B5461736B57617463682E63000000005FC3CF00FFFFFFFF3E433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B506F74692E63000000000A5461736B506F74692E6300000000C1838300FFFFFFFF44433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B4D616E64656C62726F742E6300000000105461736B4D616E64656C62726F742E6300000000CACAD500FFFFFFFF37433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C4253505C4164632E6800000000054164632E6800000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F40000006600000080070000D9020000 + 1570 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000F000000000000000100000034433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF3E433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B506F74692E63000000000A5461736B506F74692E6300000000FFDC7800FFFFFFFF37433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C4253505C4164632E6300000000054164632E6300000000BECEA100FFFFFFFF37433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C4253505C4164632E6800000000054164632E6800000000F0A0A100FFFFFFFF41433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B436F756E7465722E63000000000D5461736B436F756E7465722E6300000000BCA8E100FFFFFFFF4B433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C73746D333266302D7374647065726970685C73746D3332663078785F7263632E63000000000F73746D3332663078785F7263632E63000000009CC1B600FFFFFFFF49433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C446576696365735C737461727475705F73746D3332663037322E730000000013737461727475705F73746D3332663037322E7300000000F7B88600FFFFFFFF3F433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B57617463682E63000000000B5461736B57617463682E6300000000D9ADC200FFFFFFFF3B433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C4253505C7379737469636B2E6300000000097379737469636B2E6300000000A5C2D700FFFFFFFF44433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B4D616E64656C62726F742E6300000000105461736B4D616E64656C62726F742E6300000000B3A6BE00FFFFFFFF48433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C446576696365735C73797374656D5F73746D3332663078782E63000000001273797374656D5F73746D3332663078782E6300000000EAD6A300FFFFFFFF3D433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C5461736B735C5461736B4C65642E6300000000095461736B4C65642E6300000000F6FA7D00FFFFFFFF43433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C446576696365735C636F72655F636D46756E632E68000000000D636F72655F636D46756E632E6800000000B5E99D00FFFFFFFF35433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C7372635C44656275672E63000000000744656275672E63000000005FC3CF00FFFFFFFF4C433A5C55736572735C6761656D735C446F63756D656E74735C455344315C72746F315C55455C7530315C73746D333266302D7374647065726970685C73746D3332663078785F6770696F2E63000000001073746D3332663078785F6770696F2E6300000000C1838300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F40000006600000080070000D9020000 @@ -1841,7 +1841,7 @@ Build 968 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000441707573960000000000000001000441707573000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000441707573960000000000000001000441707573000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1857,7 +1857,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1910,7 +1910,7 @@ 0 16 - 0300000066000000ED000000EA020000 + 0300000066000000ED000000C3020000 16 @@ -1940,17 +1940,17 @@ 1465 1465 - 1 + 0 0 0 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -1960,17 +1960,17 @@ 1466 1466 - 0 + 1 0 0 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000CD030000 16 @@ -1986,11 +1986,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2006,11 +2006,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2070,7 +2070,7 @@ 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000CD030000 16 @@ -2086,11 +2086,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2106,11 +2106,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2126,11 +2126,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2146,11 +2146,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2166,11 +2166,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2186,11 +2186,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2270,7 +2270,7 @@ 0 16 - 0000000007030000C0030000E6030000 + 00000000E0020000C0030000E6030000 16 @@ -2386,11 +2386,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -2850,7 +2850,7 @@ 0 16 - 93060000660000007D070000EA020000 + 93060000660000007D070000C3020000 16 @@ -2870,7 +2870,7 @@ 0 16 - 93060000660000007D070000EA020000 + 93060000660000007D070000C3020000 16 @@ -2890,7 +2890,7 @@ 0 16 - 93060000660000007D070000EA020000 + 93060000660000007D070000C3020000 16 @@ -2910,7 +2910,7 @@ 0 16 - 0300000066000000ED000000EA020000 + 0300000066000000ED000000C3020000 16 @@ -2966,11 +2966,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000CD030000 16 @@ -2986,11 +2986,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000CD030000 16 @@ -3530,11 +3530,11 @@ 2 16 - 000000001C0000006F02000038000000 + 020000001C0000007102000038000000 16 - 0A0000000A0000006E0000006E000000 + 600000007D000000CC020000B5000000 @@ -3546,11 +3546,11 @@ 0 32767 0 - 4096 + 32768 0 16 - C70300001E0300007D070000CD030000 + C7030000F70200007D070000A6030000 16 @@ -3559,14 +3559,14 @@ 3327 - 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFF4000000F10000008C060000F5000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000F4000000660000008C06000008010000F40000004F0000008C060000F10000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFF8C0600004F0000009006000003030000010000000200001004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000010000009006000066000000800700001A030000900600004F000000800700000303000000000000404100562B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF054750494F43010000003F8C000001000000FFFFFFFFFFFFFFFF054750494F4101000000408C000001000000FFFFFFFFFFFFFFFF054750494F4201000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFF16000000000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F400000003030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F00000001A030000000000004F000000F0000000030300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000003030000800700000703000001000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000001000000C40300001E03000080070000FD030000C40300000703000080070000E603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7301000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727301000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFFC003000007030000C4030000E603000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000400300008007000044030000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000005B03000080070000FD030000000000004403000080070000E60300000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFF4000000F10000008C060000F5000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000F4000000660000008C06000008010000F40000004F0000008C060000F10000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFF8C0600004F00000090060000DC020000010000000200001004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000010000009006000066000000800700001A030000900600004F00000080070000DC02000000000000404100562B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF054750494F43010000003F8C000001000000FFFFFFFFFFFFFFFF054750494F4101000000408C000001000000FFFFFFFFFFFFFFFF054750494F4201000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFF16000000000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000DC020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F00000001A030000000000004F000000F0000000DC0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000DC02000080070000E002000001000000010000100400000001000000F7FDFFFF7A00000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000001000000C40300001E03000080070000FD030000C4030000E002000080070000E603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7301000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727301000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203201000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0B0000000000000001000000000000000100000001000000FFFFFFFFC0030000E0020000C4030000E603000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000400300008007000044030000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000005B03000080070000FD030000000000004403000080070000E60300000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File 2783 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000009444843505F696E69749600000000000000130009444843505F696E69740873656E645F7261770473656E640657353530305F0A646973636C61696D65720A47657456657273696F6E0673797374656D0C737461746963206661746673075344436172645F095350495F5374727563035350490F5472616E736D697373696F6E42697404746F646F075553455F4C464E085F5553455F4C464E09665F636F6E7665727407665F636C6F736504696E6974047465787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000009444843505F696E69749600000000000000130009444843505F696E69740873656E645F7261770473656E640657353530305F0A646973636C61696D65720A47657456657273696F6E0673797374656D0C737461746963206661746673075344436172645F095350495F5374727563035350490F5472616E736D697373696F6E42697404746F646F075553455F4C464E085F5553455F4C464E09665F636F6E7665727407665F636C6F736504696E6974047465787400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -3582,7 +3582,7 @@ Build 968 - 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000004001D000000000000000000000000000000000100000001000000018030800000000004001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000004006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000400000000000000000000000000000000000001000000010000009600000003002050000000000441707573960000000000000001000441707573000000000180EB880000000004002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000400230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000004001D000000000000000000000000000000000100000001000000018030800000000004001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000004006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000400000000000000000000000000000000000001000000010000009600000003002050000000000441707573960000000000000001000441707573000000000180EB880000000004002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000400230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3598,7 +3598,7 @@ Debug 2362 - 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000004002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000004002800000000000000000000000000000000010000000100000001801B80000000000400290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000004002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3625,45 +3625,45 @@ 0 .\src\main.c - 16 - 29 - 48 + 21 + 23 + 54 1 0 - .\src\Devices\startup_stm32f072.s - 0 - 122 - 131 + .\src\Tasks\TaskPoti.c + 47 + 1 + 28 1 0 - .\src\BSP\Key.c - 46 - 7 - 34 + .\src\BSP\Adc.c + 66 + 3 + 83 1 0 - .\src\BSP\TftDisplay.c - 34 - 368 - 131 + src\BSP\Adc.h + 37 + 14 + 51 1 0 .\src\Tasks\TaskCounter.c - 23 + 10 1 - 29 + 25 1 0 @@ -3678,100 +3678,82 @@ 0 - .\src\BSP\systick.c - 21 - 1 - 30 - 1 - - 0 - - - .\src\Debug.c - 30 - 1 - 19 - 1 - - 0 - - - src\debug.h - 6 - 1 - 23 - 1 - - 0 - - - .\src\BSP\Led.c - 7 - 34 - 46 - 1 - - 0 - - - stm32f0-stdperiph\stm32f0xx_gpio.h - 32 - 162 - 148 - 1 - - 0 - - - .\src\Tasks\TaskKey.c - 19 - 1 - 22 - 1 - - 0 - - - .\src\Tasks\TaskLed.c - 16 - 1 - 20 + .\src\Devices\startup_stm32f072.s + 0 + 120 + 131 1 0 .\src\Tasks\TaskWatch.c - 0 + 34 1 - 23 + 29 1 0 - .\src\Tasks\TaskPoti.c - 20 - 1 - 21 + .\src\BSP\systick.c + 0 + 13 + 49 1 0 .\src\Tasks\TaskMandelbrot.c - 26 - 1 - 60 + 0 + 41 + 50 1 0 - src\BSP\Adc.h + .\src\Devices\system_stm32f0xx.c + 0 + 224 + 233 + 1 + + 0 + + + .\src\Tasks\TaskLed.c + 0 + 9 + 46 + 1 + + 0 + + + src\Devices\core_cmFunc.h + 0 + 293 + 429 + 1 + + 0 + + + .\src\Debug.c 0 1 - 1 + 25 + 1 + + 0 + + + .\stm32f0-stdperiph\stm32f0xx_gpio.c + 0 + 449 + 457 1 0 diff --git a/UE/u01/Apus.uvoptx b/UE/u01/Apus.uvoptx index 32b00e1..0fc69cd 100644 --- a/UE/u01/Apus.uvoptx +++ b/UE/u01/Apus.uvoptx @@ -77,7 +77,7 @@ 0 1 - 0 + 18 0 1 @@ -149,6 +149,22 @@ + + + 1 + 256 + processStack + 0 + + + + + 2 + 0 + 0x20000440 + 0 + + 0 @@ -425,7 +441,7 @@ Tasks - 0 + 1 0 0 0 diff --git a/UE/u01/CLAUDE.md b/UE/u01/CLAUDE.md new file mode 100644 index 0000000..88151a0 --- /dev/null +++ b/UE/u01/CLAUDE.md @@ -0,0 +1,28 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Context + +University exercise (RTO, "UE u01") for an STM32F072VBTx (Cortex-M0) board. The git root is two levels up (`rto1/`); `UE/` holds exercises, `VO/` holds lecture slides (PDF). The exercise spec is [doc/u01.pdf](doc/u01.pdf). Code comments are partly German. + +## Build + +Keil µVision 5 project [Apus.uvprojx](Apus.uvprojx), target `Apus`, ARM Compiler 6 (armclang V6.23). There is no Makefile, linter, or test suite. Command-line build: + +``` +"C:/Users/gaems/AppData/Local/Keil_v5/UV4/UV4.exe" -b Apus.uvprojx -j0 -o build_log.txt +``` + +(`-r` for rebuild, `-f` to flash.) Output goes to `output/` (`Apus.axf`, `Apus.build_log.htm`), map file to `listing/`. These build artifacts and the `.uvguix.*` / `.uvoptx` IDE state files are committed to git, so they show up as modified after every build. + +- Global defines: `STM32F072,USE_STDPERIPH_DRIVER`. Include paths: `src`, `stm32f0-stdperiph`, `src/Devices`, `src/Tasks` — so BSP headers are included as `"BSP/Led.h"`, task headers directly. +- **New `.c` files must be added to the project's file groups in `Apus.uvprojx`** (or via the µVision IDE), otherwise they are not compiled. + +## Architecture + +- **Superloop, no RTOS (yet).** [src/main.c](src/main.c) initializes the BSP, then calls each task function (`TaskCounter`, `TaskKey`, `TaskLed`, `TaskWatch`, `TaskPoti`, `TaskMandelbrot`) once per loop iteration, clearing the TFT at the start of each iteration. Tasks are plain `void TaskX(void)` functions in [src/Tasks/](src/Tasks/) (aggregated by `TaskAll.h`) that keep state in `static` locals and draw their own row on the TFT (`Tft_DrawString(10, 18 + row*24, ...)`, 16x24 font). +- **Timing measurement via GPIO.** [src/Debug.c](src/Debug.c) drives GPIOB pins as logic-analyzer probes; `debug_t` maps each task (and the SysTick ISR) to a pin. `main.c` wraps every task call in `Debug_Set`/`Debug_Unset`; the double toggle on the `mandelbrot` pin at loop start measures the probe overhead. When adding a task, add an enum entry in `Debug.h` **and** its pin to the mask in `Debug_Init`. +- **SysTick** ([src/BSP/systick.c](src/BSP/systick.c)) fires every 1 ms and increments a private `msTicks` counter (also toggles the `systick` debug pin). +- **BSP** ([src/BSP/](src/BSP/)): `Key`, `Led`, `Adc` (potentiometer), `TftDisplay` — thin wrappers over the vendored ST Standard Peripheral Library in [stm32f0-stdperiph/](stm32f0-stdperiph/). Device/CMSIS/startup files live in [src/Devices/](src/Devices/). Don't modify vendored code. +- [src/StdDef.h](src/StdDef.h) provides `BOOL`/`TRUE`/`FALSE`/`NULL_PTR`; use these instead of ``. `assert()` failures land in `__aeabi_assert` in `main.c` (infinite loop for inspection in the debugger). diff --git a/UE/u01/doc/psp.PNG b/UE/u01/doc/psp.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a83b58ec71df233ed2e0dfec4de4fbc66b74e863 GIT binary patch literal 127913 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

Aw@zxT2tuNfX8ewwdu`{ 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 if y == 0 { luma(230) }) + +#align(center)[ + #text(size: 20pt, weight: "bold")[Übung 1 – RTO] + #v(2pt) + #text(size: 13pt)[Vorläufer von Betriebssystemen, kooperative Task-Weitergabe] + #v(10pt) + Markus Neumann s2610567004, Christian Gamsjäger s2610567014 \ + #datetime.today().display("[day].[month].[year]") +] + +#v(1em) +#outline() + +#pagebreak(weak: true) += Überblick + +*Programmstruktur:* Kooperative Superloop in `main.c`. Jeder Task ist eine Funktion `void TaskX(void)`, die pro Aufruf nur einen kurzen Arbeitsschritt erledigt und sofort zurückkehrt; der Zustand zwischen zwei Aufrufen liegt in `static`-Variablen. Gemeinsame Zeitbasis ist der SysTick-Interrupt mit 1 ms Periode. + +```c +while (1) +{ + Debug_Set(counter); + TaskCounter(); + Debug_Unset(counter); + Debug_Set(key); + TaskKey(); + Debug_Unset(key); + Debug_Set(led); + TaskLed(); + Debug_Unset(led); + Debug_Set(watch); + TaskWatch(); + Debug_Unset(watch); + Debug_Set(poti); + TaskPoti(); + Debug_Unset(poti); + Debug_Set(mandelbrot); + TaskMandelbrot(); + Debug_Unset(mandelbrot); +} +``` + +#pagebreak(weak: true) += Aufgabe A – Debug-Unit zur Timing-Messung + +== Implementierung + +Jedem Task und dem SysTick-Interrupt ist ein Ausgang von Port B zugeordnet (@tab-pins). Beim Start des Tasks wird die Leitung auf High, beim Ende auf Low gesetzt; die Pulsbreite am Logic-Analyzer entspricht damit der Laufzeit. + +#figure( + table( + columns: 3, + table.header([*Pin*], [*Signal*], [*Enum-Wert in* `Debug.h`]), + [PB0], [SystemTick], [`systick`], + [PB1], [TaskCounter], [`counter`], + [PB3], [TaskKey], [`key`], + [PB12], [TaskLed], [`led`], + [PB13], [TaskWatch], [`watch`], + [PB14], [TaskPoti], [`poti`], + [PB15], [TaskMandelbrot], [`mandelbrot`], + ), + caption: [Zuordnung der Debug-Pins], +) + +`Debug_Init()` aktiviert den Takt für GPIOB und konfiguriert die sieben Pins als Push-Pull-Ausgänge (50 MHz, ohne Pull-up/-down). Die Tasks werden in `main.c` von außen eingerahmt, sodass der Task-Code selbst frei von Messcode bleibt. Nur der SysTick-Handler setzt seinen Pin intern: + +```c +void SysTick_Handler (void){ + Debug_Set(systick); + msTicks++; + Debug_Unset(systick); +} +``` + +== Messergebnisse im Ausgangszustand + +Die folgenden Messungen zeigen den Ausgangszustand der Vorlage: Die Tasks geben nur ihre Beschriftung aus, Mandelbrot zeichnet das komplette Bild in einem Aufruf. + +#figure( + table( + columns: (auto, auto, 1fr), + align: (left, right, left), + table.header([*Signal*], [*Laufzeit*], [*Bemerkung*]), + [SysTick], [0,956 µs], [alle 1 ms], + [Counter], [2,864 ms], [„Cnt “ + Zählerwert], + [Key], [1,887 ms], [„Key “ (4 Zeichen)], + [Led], [1,889 ms], [„Led “ (4 Zeichen)], + [Watch], [2,832 ms], [„Watch “ (6 Zeichen)], + [Poti], [2,362 ms], [„Poti “ (5 Zeichen)], + [Mandelbrot], [16,164 s], [komplettes Bild, blockierend], + ), + caption: [Gemessene Laufzeiten im Ausgangszustand], +) + +#grid( + columns: 1, + gutter: 10pt, + [#figure(image("img/counter.png", width: 100%), caption: [TaskCounter: 2,864 ms]) ], + [#figure(image("img/key.png", width: 100%), caption: [TaskKey: 1,887 ms]) ], + [#figure(image("img/led.png", width: 100%), caption: [TaskLed: 1,889 ms]) ], + [#figure(image("img/watch.png", width: 100%), caption: [TaskWatch: 2,832 ms]) ], + [#figure(image("img/poti.png", width: 100%), caption: [TaskPoti: 2,362 ms]) ], + [#figure(image("img/mandelbrot.png", width: 100%), caption: [TaskMandelbrot: 16,164 s]) ], +) + +#figure(image("img/systick.png", width: 75%), caption: [SysTick-Interrupt: Pulsbreite 0,956 µs]) + +*Auswertung:* +- Die Laufzeit der Tasks wird fast vollständig von der Textausgabe bestimmt. Aus Led (4 Zeichen, 1,889 ms), Poti (5 Zeichen, 2,362 ms) und Watch (6 Zeichen, 2,832 ms) ergibt sich übereinstimmend *≈ 0,472 ms pro Zeichen*. Ein Zeichen des 16×24-Fonts hat 384 Pixel, also ≈ 1,23 µs bzw. ≈ 59 Takte pro Pixel, da jedes Pixel per Software über GPIO-Zugriffe an das Display übertragen wird. +- Mandelbrot blockiert die Superloop für 16,16 s. Damit beträgt die Zykluszeit aller Tasks ≈ 16,2 s; keine der Zeitanforderungen aus Aufgabe B ist so erfüllbar. +- Der SysTick-Puls ist 0,956 µs breit. Davon sind 0,748 µs Messoverhead (@sec-overhead), die eigentliche Arbeit (`msTicks++`) dauert also nur ≈ 0,21 µs ≈ 10 Takte. Hinzu kommen Ein- und Austritt in den Interrupt (Cortex-M0: 16 Takte Latenz), die am Pin nicht sichtbar sind. Die CPU-Last durch den SysTick liegt damit unter 0,2 %. + +== Overhead der Messroutine + +*Methode:* In `main.c` wurden `Debug_Set(mandelbrot)` und `Debug_Unset(mandelbrot)` ohne Code dazwischen direkt hintereinander aufgerufen. Die gemessene Pulsbreite entspricht dem Overhead, den eine Messung zur Laufzeit eines Tasks hinzufügt (@fig-overhead). + +#figure(image("img/overhead.png", width: 75%), caption: [Overhead-Messung: Pulsbreite 748 ns]) + +$ t_"Overhead" = 748 "ns" quad arrow.r.double quad 748 "ns" dot 48 "MHz" approx 36 "Takte" $ + +Der Puls umfasst den Rücksprung aus `GPIO_WriteBit` und `Debug_Set`, den Aufruf von `Debug_Unset` (Parameter laden, `BL`, `PUSH`) und den Aufruf von `GPIO_WriteBit` bis zum eigentlichen Schreibzugriff auf das Portregister. Die Flash-Wartezyklen bei 48 MHz verlängern die Ausführung zusätzlich. Disassembly von `Debug_Set`: + +``` +Debug_Set: + PUSH {r7,lr} + MOV r1,r0 ; Pin-Maske + LDR r0,=0x48000400 ; GPIOB + MOVS r2,#1 ; Bit_SET + BL GPIO_WriteBit + POP {r7,pc} +``` + +*Bedeutung:* Jede gemessene Pulsbreite ist um ≈ 0,75 µs zu lang. Für Tasks im Millisekundenbereich ist das vernachlässigbar, für sehr kurze Tasks (z. B. Led mit 1,9 µs in Aufgabe B) dagegen nicht; dort gilt $t_"netto" approx t_"gemessen" - "0,75 µs"$. Der Overhead ließe sich auf wenige Takte reduzieren, indem `Debug_Set`/`Debug_Unset` als `static inline`-Funktionen direkt in die Register `GPIOB->BSRR` bzw. `GPIOB->BRR` schreiben. + +#pagebreak(weak: true) += Aufgabe B – Reaktionszeit in einer Superloop-Architektur + +== Zeitbasis + +Alle zeitabhängigen Tasks verwenden den Millisekundenzähler des SysTick. Dafür wurde `systick.c` um eine Abfragefunktion erweitert; `msTicks` ist `volatile`, da er in der ISR verändert wird: + +```c +uint32_t Tick_GetMs(void){ + return msTicks; +} +``` + +Ein 32-Bit-Lesezugriff ist auf dem Cortex-M0 atomar. Zeitvergleiche erfolgen immer als vorzeichenlose Differenz (`Tick_GetMs() - start >= dauer`); diese bleibt auch beim Überlauf des Zählers nach ≈ 49,7 Tagen korrekt. Kein Task wartet aktiv auf eine Zeit, sondern prüft nur, ob sie abgelaufen ist. + +== Implementierung der Tasks + +/ Counter: Erhöht den Zähler bei jedem Aufruf um 1 und gibt ihn aus. + +/ Key: Liest die drei Tasten ein (+Flankenerkennung), USER-Taste aendert die Farbe (Schwarz → Blau → Grün → Schwarz) und gilt für alle danach gezeichneten Ausgaben. + +```c +static BOOL Key_GetDebounced (KeyType key, uint32_t now) +{ + ... + BOOL raw = Key_GetState(key); + if (raw != lastRaw[key]) { lastRaw[key] = raw; lastChange[key] = now; } + else if (now - lastChange[key] >= DEBOUNCE_MS) { stable[key] = raw; } + return stable[key]; +} +``` + +/ Led: Lauflicht über Led3, Led4 und Led5 als Zustandsautomat. Bei jedem Aufruf wird nur geprüft, ob seit dem letzten Wechsel 100 ms vergangen sind. Da der Zeitpunkt mit `lastSwitch += LED_PERIOD_MS` fortgeschrieben wird (statt auf die aktuelle Zeit gesetzt), entsteht keine Drift: Einzelne Umschaltungen können sich um höchstens einen Schleifendurchlauf verspäten, die mittlere Periode bleibt exakt 100 ms. + +```c +else if (Tick_GetMs() - lastSwitch >= LED_PERIOD_MS) +{ + Led_TurnOff(ledSeq[idx]); + idx = (idx + 1u) % LED_COUNT; + Led_TurnOn(ledSeq[idx]); + lastSwitch += LED_PERIOD_MS; +} +``` + +/ Poti: Liest den Potentiometer-Wert über den ADC (in mV) und gibt ihn mit fester Breite (`%4d`) aus, damit beim Kürzerwerden des Werts keine alten Ziffern stehen bleiben. + +/ Watch: Berechnet die Betriebszeit aus `Tick_GetMs()` und gibt sie im Format mm:ss aus. Da die Zeit aus dem SysTick abgeleitet wird und nicht aus der Anzahl der Aufrufe, ist sie unabhängig von der Schleifendauer exakt. + +/ Mandelbrot: Die Berechnung wurde zerlegt: Pro Aufruf werden Pixel berechnet, bis ein Zeitbudget von 5 ms verbraucht ist; die aktuelle Position (`curX`, `curY`) bleibt bis zum nächsten Aufruf erhalten. Nach dem letzten Pixel wird der Bildbereich zeilenweise (ebenfalls innerhalb des Zeitbudgets) gelöscht und das Bild neu gezeichnet. Dafür wurde der Display-Treiber um `Tft_ClearArea()` erweitert, das ein Rechteck in der Hintergrundfarbe füllt. + +```c +while (Tick_GetMs() - start < TIME_BUDGET_MS) +{ + if (clearing) { /* eine Bildzeile löschen, nach der letzten: clearing = FALSE */ } + else + { + MandelBrotPixel(curX, curY); + if (++curX >= ImageWidth) + { + curX = 0; + if (++curY >= ImageHeight) { curY = 0; clearing = TRUE; } + } + } +} +``` + +== Optimierung der Superloop + +Nach der Zerlegung des Mandelbrot-Tasks betrug die Zykluszeit noch 26–27 ms. Ursache war die Textausgabe (≈ 0,47 ms pro Zeichen): In jedem Durchlauf wurden alle Beschriftungen und Werte neu gezeichnet, insgesamt rund 59 Zeichen. Folgende Maßnahmen wurden umgesetzt: + ++ *Beschriftungen nur einmal zeichnen:* „Cnt“, „Key“, „Led“, „Watch“, „Poti“ und „ManBr“ werden nur beim ersten Aufruf des jeweiligen Tasks ausgegeben. ++ *Werte nur bei Änderung zeichnen:* Key bei Änderung eines entprellten Tastenzustands, Watch beim Sekundenwechsel, Poti bei einer Änderung von mehr als 10 mV gegenüber dem zuletzt angezeigten Wert (unterdrückt das Rauschen des ADC). Der Counter ändert sich bei jedem Aufruf und wird daher immer gezeichnet. ++ *Kein Löschen des ganzen Bildschirms:* `Tft_ClearScreen()` wird nur noch einmal vor der Superloop aufgerufen. + +#figure( + table( + columns: (1fr, auto), + align: (left, right), + table.header([*Stand*], [*Zykluszeit*]), + [Vorlage (Mandelbrot blockierend)], [≈ 16,2 s], + [Mandelbrot zerlegt, alle Ausgaben in jedem Durchlauf], [26–27 ms], + [Endstand (Maßnahmen 1–3)], [≈ 7,0 ms], + [Endstand, Durchlauf mit Sekundenwechsel (Watch)], [≈ 9,5 ms], + ), + caption: [Zykluszeit der Superloop], +) + +== Messergebnisse im Endstand + +#figure(image("img/task_runtimes.png", width: 100%), caption: [Laufzeiten aller Tasks im Endstand]) + +#figure( + table( + columns: (auto, auto, 1fr), + align: (left, right, left), + table.header([*Task*], [*Laufzeit*], [*Bemerkung*]), + [Counter], [1,949 ms], [Wert wird in jedem Durchlauf gezeichnet], + [Key], [7,7 µs], [ohne Änderung; mit Neuzeichnen ≈ 2,4 ms (5 Zeichen, abgeschätzt)], + [Led], [1,9 µs], [davon ≈ 0,75 µs Messoverhead], + [Watch], [2,439 ms], [nur beim Sekundenwechsel, sonst wenige µs], + [Poti], [18,0 µs], [ADC-Wandlung; mit Neuzeichnen ≈ 1,9 ms (4 Zeichen, abgeschätzt)], + [Mandelbrot], [5,035 ms], [Zeitbudget 5 ms], + ), + caption: [Gemessene Laufzeiten im Endstand (@fig-b)], +) + +Die Zykluszeiten in @tab-loop wurden aus dem Abstand zweier steigender Flanken von PB1 (Counter) in @fig-b abgelesen. #todo[Periodendauer von PB1 mit der Saleae-Messfunktion exakt nachmessen.] + +== Nachweis der Zeitanforderungen + +Der ungünstigste Durchlauf entsteht, wenn Key, Watch und Poti im selben Durchlauf neu zeichnen und Mandelbrot nach dem Löschen des Bildes zusätzlich die Beschriftung (6 Zeichen ≈ 2,8 ms) ausgibt: + +$ T_"Loop,max" approx ("1,95" + "2,4" + "2,44" + "1,9" + "5,04" + "2,83") "ms" approx "16,6 ms" $ + +Für die Reaktionszeit auf einen Tastendruck gilt: Der Druck wird spätestens nach einem Durchlauf erkannt, nach 20 ms Entprellzeit (+1 ms Auflösung des SysTick) beim nächsten Aufruf übernommen und im selben Aufruf angezeigt: + +$ t_"Reaktion,Key" <= T_"Loop,1" + 21 "ms" + T_"Loop,2" + t_"Anzeige" $ + +Da Watch nur einmal pro Sekunde und die Mandelbrot-Beschriftung nur einmal pro Bild neu gezeichnet werden, können zwei aufeinanderfolgende Durchläufe nicht beide den Maximalwert erreichen. Realistisch ungünstig ist $T_"Loop,1" approx "14,2 ms"$ (Watch, Poti, Beschriftung) und $T_"Loop,2" approx "8,9 ms"$ (Poti). + +#figure( + table( + columns: (auto, auto, 1fr, auto), + align: (left, right, left, center), + table.header([*Anforderung*], [*Grenze*], [*Ergebnis*], [*erfüllt*]), + [Counter Zykluszeit], [≤ 20 ms], [$T_"Loop"$: typ. 7,0 ms, max. ≈ 16,6 ms], [✓], + [Key Reaktionszeit], [≤ 50 ms], [typ. 7,0 + 21 + 7,0 + 2,4 ≈ 37 ms; ungünstig 14,2 + 21 + 8,9 + 2,4 ≈ 47 ms], [✓], + [Poti Reaktionszeit], [≤ 50 ms], [Abtastung in jedem Durchlauf: ≤ $T_"Loop,max"$ ≈ 17 ms], [✓], + [Watch Aktualisierung], [≤ 1 s], [jede Sekunde, Verzögerung ≤ $T_"Loop"$], [✓], + [Led Periode], [100 ms], [Mittelwert exakt, Jitter ≤ $T_"Loop"$], [✓], + ), + caption: [Vergleich mit den Zeitanforderungen], +) + +Der Preis der Zerlegung ist eine längere Gesamtdauer für das Mandelbrot-Bild: Bei 16,16 s Rechenzeit und 5 ms pro Aufruf sind ≈ 3 230 Aufrufe nötig, bei ≈ 7 ms Zykluszeit dauert ein Bild damit rechnerisch ≈ 23 s statt 16 s. Dafür reagieren alle anderen Tasks innerhalb ihrer Grenzen. + +#pagebreak(weak: true) += Aufgabe C – Process-Stack (PSP) und Main-Stack (MSP) + +== Implementierung + +Die Umschaltung erfolgt am Beginn von `main()`. Die Initialisierung und die Superloop liegen in einer eigenen Funktion, die erst nach der Umschaltung aufgerufen wird: + +```c +#define PS_SIZE 1024 +static char processStack[PS_SIZE] __attribute__((aligned(8))); + +static void Superloop(void) __attribute__((noinline, noreturn)); + +int main(void) +{ + __set_PSP((uint32_t)processStack + PS_SIZE); + __set_CONTROL(2); + __ISB(); + + Superloop(); +} +``` + +- `__set_PSP()` lädt den Process Stack Pointer mit dem Ende von `processStack` (0x20000478). Die Stacks des Cortex-M0 wachsen zu kleineren Adressen, und der Stack-Pointer zeigt auf das zuletzt belegte Wort (full descending); der erste `PUSH` schreibt daher auf 0x20000474. Das Array ist auf 8 Byte ausgerichtet, damit der Stack die von der ARM-Aufrufkonvention (AAPCS) geforderte 8-Byte-Ausrichtung hat. +- `__set_CONTROL(2)` setzt Bit 1 (SPSEL) im CONTROL-Register: Im Thread-Modus wird ab jetzt der PSP verwendet. Beim Cortex-M0 läuft der Thread-Modus immer privilegiert, nur SPSEL ist relevant. +- `__ISB()` (Instruction Synchronization Barrier) stellt sicher, dass alle folgenden Befehle bereits mit dem neuen Stack-Pointer ausgeführt werden. +- Im Handler-Modus (Interrupts) verwendet der Prozessor unabhängig von SPSEL immer den MSP. + +*Warum eine eigene Funktion?* Der Compiler legt den Stackframe einer Funktion beim Eintritt an. In der ersten Version lagen Umschaltung und Superloop direkt in `main`: `main` reservierte beim Eintritt mit `SUB sp,sp,#8` einen Platz auf dem *MSP*, schaltete dann auf den PSP um und griff danach mit `[sp,#4]` auf diesen Platz zu, der nun über den PSP adressiert wurde. Das Ergebnis lag außerhalb von `processStack` im Ausgabepuffer von TaskCounter und wurde von diesem überschrieben. Im Debugger (@fig-psp-alt) ist das sichtbar: R4 enthält 0x30343432, also den Text „2440“ des Zählers, und wurde als Pin-Maske an `Debug_Set(led)` übergeben (ODR von GPIOB = 0x3432). In der korrigierten Version hat `main` keinen Stackframe mehr; der Stackframe von `Superloop` entsteht bereits auf dem PSP. `noinline` verhindert, dass der Compiler `Superloop` wieder in `main` einfügt. + +#figure(image("psp.PNG", width: 100%), caption: [Erste Version: Zugriff von `main` über den falschen Stack (R4 = 0x30343432, ODR = 0x3432)]) + +== Stack-Layout + +Der SRAM liegt bei 0x20000000–0x20003FFF (16 KB). Die Lage der Bereiche stammt aus dem Map-File des Linkers (`listing/Apus.map`): + +#figure( + table( + columns: (auto, auto, 1fr), + align: (left, right, left), + table.header([*Adressbereich*], [*Größe*], [*Inhalt*]), + [0x20000000–0x20000077], [120 B], [globale/statische Variablen (u. a. `msTicks` bei 0x20000070), 4 B Füllbytes für die Ausrichtung], + [0x20000078–0x20000477], [1024 B], [`processStack` → *PSP*, Startwert 0x20000478], + [0x20000478–0x20000497], [32 B], [Ausgabepuffer von TaskCounter und TaskPoti, Füllbytes], + [0x20000498–0x20000897], [1024 B], [`STACK` aus der Startup-Datei → *MSP*, Startwert 0x20000898], + [0x20000898–0x20003FFF], [≈ 13,9 KB], [frei], + ), + caption: [Belegung des SRAM], +) + +Der Heap (512 B in der Startup-Datei) wird nicht verwendet und vom Linker entfernt. + +*Begründung der Aufteilung:* +- *Trennung:* Der Stackbedarf der Interrupts muss nicht im Task-Stack eingeplant werden, und ein Überlauf des Task-Stacks beschädigt nicht den Stack der Interrupts. In einem späteren RTOS mit eigenem Stack pro Task muss die Interrupt-Reserve so nur einmal (im MSP) statt in jedem Task-Stack vorgehalten werden. +- *MSP, 1 KB* (Vorgabe `Stack_Size EQU 0x400` der Startup-Datei): Vor der Umschaltung belegt der Startup-Code der C-Bibliothek 16 B (`PUSH {r2-r4,lr}` in `__scatterload`), deshalb steht der MSP in der Superloop auf 0x20000888. Danach verwendet ihn nur noch der SysTick-Handler: `PUSH {r4,lr}` (8 B), `Debug_Set` (8 B) und `GPIO_WriteBit`. Der Bedarf liegt deutlich unter 100 B. Da nur eine Interruptquelle ohne Verschachtelung aktiv ist, ist 1 KB großzügig und bietet Reserve für weitere Interrupts in den folgenden Übungen. +- *PSP, 1 KB:* Der gesamte Anwendungscode läuft auf dem PSP, darunter `snprintf` aus der C-Bibliothek und die Software-Gleitkommaroutinen für `double` im Mandelbrot-Task. Zusätzlich werden pro Interrupt 32 B für den Exception-Frame auf dem PSP abgelegt. #todo[Maximal genutzte PSP-Tiefe messen: Da `processStack` im mit 0 initialisierten `.bss` liegt, zeigt die niedrigste Adresse ungleich 0 im Memory-Fenster nach einigen Minuten Laufzeit den höchsten Füllstand.] +- *Risiko:* Der Cortex-M0 besitzt keine MPU. Ein Überlauf des PSP würde unbemerkt die darunterliegenden Variablen (u. a. `msTicks`) überschreiben, ein Überlauf des MSP die Ausgabepuffer. Abhilfe wären Stacks am Ende des RAM mit freiem Abstand oder ein Füllmuster, das zur Laufzeit geprüft wird. + +== Ablauf bei einem Interrupt + +Tritt der SysTick-Interrupt auf, während die Superloop im Thread-Modus mit PSP läuft, geschieht Folgendes: + ++ *Stacking (Hardware):* Der Prozessor legt 8 Register (32 Byte) auf dem *aktuellen* Stack ab, also auf dem PSP (@tab-frame). Der Frame wird immer auf 8 Byte ausgerichtet; falls nötig, wird ein Füllwort eingefügt und dies in Bit 9 des gesicherten xPSR vermerkt. ++ *Moduswechsel:* Der Prozessor wechselt in den Handler-Modus und verwendet ab jetzt den *MSP*. Das IPSR enthält die Exception-Nummer (SysTick = 15). ++ *Rücksprungwert:* Das LR wird mit dem Wert 0xFFFFFFFD geladen. Dieser `EXC_RETURN`-Wert kodiert, wohin und mit welchem Stack zurückgekehrt wird (@tab-excret). ++ *Handler (Software):* Der Compiler sichert im Prolog nur die vom Handler verwendeten Callee-saved-Register und das LR auf dem *MSP*, hier `PUSH {r4,lr}`. ++ *Rückkehr:* `POP {r4,pc}` lädt 0xFFFFFFFD in den PC. Der Prozessor erkennt den `EXC_RETURN`-Wert, holt die 8 Register vom PSP zurück (Unstacking, PSP + 32) und setzt das unterbrochene Programm im Thread-Modus fort. + +``` +SysTick_Handler: + PUSH {r4,lr} ; R4 und EXC_RETURN auf den MSP + MOVS r4,#1 + MOV r0,r4 + BL Debug_Set + LDR r0,=msTicks + LDR r1,[r0,#0] + ADDS r1,r1,#1 + STR r1,[r0,#0] + MOV r0,r4 + BL Debug_Unset + POP {r4,pc} ; PC = 0xFFFFFFFD -> Exception Return, Unstacking vom PSP +``` + +#grid( + columns: 2, + gutter: 14pt, + [#figure( + table( + columns: 2, + table.header([*Adresse*], [*Inhalt*]), + [PSP + 0x00], [R0], + [PSP + 0x04], [R1], + [PSP + 0x08], [R2], + [PSP + 0x0C], [R3], + [PSP + 0x10], [R12], + [PSP + 0x14], [LR (R14)], + [PSP + 0x18], [Rücksprungadresse (PC)], + [PSP + 0x1C], [xPSR], + ), + caption: [Exception-Frame auf dem PSP], + ) ], + [#figure( + table( + columns: 2, + table.header([`EXC_RETURN`], [*Rückkehr in*]), + [0xFFFFFFF1], [Handler-Modus, MSP], + [0xFFFFFFF9], [Thread-Modus, MSP], + [0xFFFFFFFD], [Thread-Modus, PSP], + ), + caption: [`EXC_RETURN`-Werte], + ) ], +) + +Die Hardware sichert nur die Register, die laut ARM-Aufrufkonvention (AAPCS) eine aufgerufene Funktion verändern darf (R0–R3, R12, LR) sowie PC und xPSR. R4–R11 sichert der Handler bei Bedarf selbst, wie jede andere C-Funktion. Dadurch können Interrupt-Handler als normale C-Funktionen geschrieben werden. + +== Analyse im µVision-Debugger + +#figure(fehlt("img/psp_superloop.png"), caption: [Thread-Modus in der Superloop]) + +In der Superloop (@fig-psp) läuft der Prozessor im Thread-Modus: R13 (SP) ist gleich dem PSP. Erwartet wird PSP = 0x20000470 (Startwert 0x20000478 minus 8 B Stackframe von `Superloop`) und MSP = 0x20000888. Das xPSR hat IPSR = 0 (Thread-Modus) und das Thumb-Bit gesetzt. + +#todo[Projekt neu übersetzen, Screenshots in der Superloop, mit Breakpoint auf der ersten Anweisung von `SysTick_Handler` (Register- und Memory-Fenster auf den PSP) und nach der Rückkehr einfügen, Werte in die Tabelle eintragen und die Adressen in @tab-ram mit `listing/Apus.map` vergleichen.] + +#grid( + columns: 2, + gutter: 10pt, + [#figure(fehlt("img/isr_entry.png"), caption: [Im SysTick-Handler, nach dem Stacking])], + [#figure(fehlt("img/isr_return.png"), caption: [Nach der Rückkehr in die Superloop])], +) + +#figure( + table( + columns: (auto, 1fr, 1fr, auto), + table.header([*Register*], [*vor dem Interrupt*], [*im Handler (erwartet)*], [*gemessen*]), + [R13 (SP)], [= PSP], [= MSP], [], + [PSP], [$p$ (in der Superloop 0x20000470)], [$p - "0x20"$ (Exception-Frame)], [], + [MSP], [0x20000888], [0x20000888, nach `PUSH` 0x20000880], [], + [LR], [beliebig], [0xFFFFFFFD], [], + [xPSR (IPSR)], [0], [15 (SysTick)], [], + ), + caption: [Erwartete Registerwerte beim Eintritt in den SysTick-Handler], +) + +== Funktion von PSP und MSP + +- *MSP:* Nach dem Reset aktiv; der Startwert wird aus dem ersten Eintrag der Vektortabelle geladen (`__initial_sp` = 0x20000898). Der Handler-Modus verwendet immer den MSP, also alle Interrupts und Exceptions und in einem RTOS auch der Kernel und der Scheduler. +- *PSP:* Wird nur im Thread-Modus verwendet, wenn SPSEL = 1 ist, also für den Anwendungs- bzw. Task-Code. In einem RTOS erhält jeder Task einen eigenen Stack. Der Kontextwechsel besteht dann im Wesentlichen darin, den PSP auf den Stack des nächsten Tasks umzusetzen: Die Hardware legt beim Interrupt R0–R3, R12, LR, PC und xPSR auf dem Stack des unterbrochenen Tasks ab, der Scheduler sichert R4–R11 zusätzlich dort. Damit liegt der komplette Kontext eines Tasks in seinem eigenen Stack. +- *Vorteil der Trennung:* Interrupts haben einen eigenen, zuverlässig verfügbaren Stack, dessen Bedarf nur einmal eingeplant werden muss, und Anwendungs- und Systemspeicher sind sauber getrennt. + +#pagebreak(weak: true) += Quellen + +- ARM: _Cortex-M0 Devices Generic User Guide_ (ARM DUI 0497A), Abschnitte „Stacks“, „Core registers“ (CONTROL-Register) und „Exception entry and return“. +- ARM: _Cortex-M0 Technical Reference Manual_ (ARM DDI 0432C), Exception-Modell und Interrupt-Latenz. +- STMicroelectronics: _RM0091 Reference Manual STM32F0x1/STM32F0x2/STM32F0x8_, Kapitel „Memory map“. +- STMicroelectronics: _Datenblatt STM32F072x8/xB_. +- J. Langer: _Übung 1 RTO_ (Angabe), 2026. diff --git a/UE/u01/listing/Apus.map b/UE/u01/listing/Apus.map index 70a6f2f..8cdcdde 100644 --- a/UE/u01/listing/Apus.map +++ b/UE/u01/listing/Apus.map @@ -44,6 +44,9 @@ Section Cross References tftdisplay.o(.text.Tft_DrawVLine) refers to tftdisplay.o(.text.Tft_SetWindow) for Tft_SetWindow tftdisplay.o(.text.Tft_DrawVLine) refers to tftdisplay.o(.bss.Tft_Cfg.1) for [Anonymous Symbol] tftdisplay.o(.ARM.exidx.text.Tft_DrawVLine) refers to tftdisplay.o(.text.Tft_DrawVLine) for [Anonymous Symbol] + tftdisplay.o(.text.Tft_ClearArea) refers to tftdisplay.o(.text.Tft_SetWindow) for Tft_SetWindow + tftdisplay.o(.text.Tft_ClearArea) refers to tftdisplay.o(.data.Tft_Cfg.0) for [Anonymous Symbol] + tftdisplay.o(.ARM.exidx.text.Tft_ClearArea) refers to tftdisplay.o(.text.Tft_ClearArea) for [Anonymous Symbol] tftdisplay.o(.text.Tft_DrawChar) refers to tftdisplay.o(.text.Tft_SetWindow) for Tft_SetWindow tftdisplay.o(.text.Tft_DrawChar) refers to tftdisplay.o(.bss.Tft_Cfg.2) for [Anonymous Symbol] tftdisplay.o(.text.Tft_DrawChar) refers to tftdisplay.o(.data.Tft_Cfg.0) for [Anonymous Symbol] @@ -69,24 +72,29 @@ Section Cross References systick.o(.text.Tick_InitSysTick) refers to uidiv_div0.o(.text) for __aeabi_uidiv systick.o(.text.Tick_InitSysTick) refers to system_stm32f0xx.o(.data.SystemCoreClock) for SystemCoreClock systick.o(.ARM.exidx.text.Tick_InitSysTick) refers to systick.o(.text.Tick_InitSysTick) for [Anonymous Symbol] - main_1.o(.text.main) refers to key.o(.text.Key_Init) for Key_Init - main_1.o(.text.main) refers to led.o(.text.Led_Init) for Led_Init - main_1.o(.text.main) refers to tftdisplay.o(.text.Tft_Init) for Tft_Init - main_1.o(.text.main) refers to tftdisplay.o(.text.Tft_SetFont) for Tft_SetFont - main_1.o(.text.main) refers to adc.o(.text.Adc_Init) for Adc_Init - main_1.o(.text.main) refers to systick.o(.text.Tick_InitSysTick) for Tick_InitSysTick - main_1.o(.text.main) refers to debug.o(.text.Debug_Init) for Debug_Init - main_1.o(.text.main) refers to tftdisplay.o(.text.Tft_ClearScreen) for Tft_ClearScreen - main_1.o(.text.main) refers to debug.o(.text.Debug_Set) for Debug_Set - main_1.o(.text.main) refers to debug.o(.text.Debug_Unset) for Debug_Unset - main_1.o(.text.main) refers to taskcounter.o(.text.TaskCounter) for TaskCounter - main_1.o(.text.main) refers to taskkey.o(.text.TaskKey) for TaskKey - main_1.o(.text.main) refers to taskled.o(.text.TaskLed) for TaskLed - main_1.o(.text.main) refers to taskwatch.o(.text.TaskWatch) for TaskWatch - main_1.o(.text.main) refers to taskpoti.o(.text.TaskPoti) for TaskPoti - main_1.o(.text.main) refers to taskmandelbrot.o(.text.TaskMandelbrot) for TaskMandelbrot - main_1.o(.text.main) refers to tftfont_16x24.o(.rodata.TftFont_16x24) for TftFont_16x24 + systick.o(.text.Tick_GetMs) refers to systick.o(.bss.msTicks) for [Anonymous Symbol] + systick.o(.ARM.exidx.text.Tick_GetMs) refers to systick.o(.text.Tick_GetMs) for [Anonymous Symbol] + main_1.o(.text.main) refers to main_1.o(.text.Superloop) for Superloop + main_1.o(.text.main) refers to main_1.o(.bss.processStack) for [Anonymous Symbol] main_1.o(.ARM.exidx.text.main) refers to main_1.o(.text.main) for [Anonymous Symbol] + main_1.o(.text.Superloop) refers to key.o(.text.Key_Init) for Key_Init + main_1.o(.text.Superloop) refers to led.o(.text.Led_Init) for Led_Init + main_1.o(.text.Superloop) refers to tftdisplay.o(.text.Tft_Init) for Tft_Init + main_1.o(.text.Superloop) refers to tftdisplay.o(.text.Tft_SetFont) for Tft_SetFont + main_1.o(.text.Superloop) refers to adc.o(.text.Adc_Init) for Adc_Init + main_1.o(.text.Superloop) refers to systick.o(.text.Tick_InitSysTick) for Tick_InitSysTick + main_1.o(.text.Superloop) refers to debug.o(.text.Debug_Init) for Debug_Init + main_1.o(.text.Superloop) refers to tftdisplay.o(.text.Tft_ClearScreen) for Tft_ClearScreen + main_1.o(.text.Superloop) refers to debug.o(.text.Debug_Set) for Debug_Set + main_1.o(.text.Superloop) refers to taskcounter.o(.text.TaskCounter) for TaskCounter + main_1.o(.text.Superloop) refers to debug.o(.text.Debug_Unset) for Debug_Unset + main_1.o(.text.Superloop) refers to taskkey.o(.text.TaskKey) for TaskKey + main_1.o(.text.Superloop) refers to taskled.o(.text.TaskLed) for TaskLed + main_1.o(.text.Superloop) refers to taskwatch.o(.text.TaskWatch) for TaskWatch + main_1.o(.text.Superloop) refers to taskpoti.o(.text.TaskPoti) for TaskPoti + main_1.o(.text.Superloop) refers to taskmandelbrot.o(.text.TaskMandelbrot) for TaskMandelbrot + main_1.o(.text.Superloop) refers to tftfont_16x24.o(.rodata.TftFont_16x24) for TftFont_16x24 + main_1.o(.ARM.exidx.text.Superloop) refers to main_1.o(.text.Superloop) for [Anonymous Symbol] main_1.o(.ARM.exidx.text.__aeabi_assert) refers to main_1.o(.text.__aeabi_assert) for [Anonymous Symbol] debug.o(.text.Debug_Init) refers to stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd) for RCC_AHBPeriphClockCmd debug.o(.text.Debug_Init) refers to stm32f0xx_gpio.o(.text.GPIO_StructInit) for GPIO_StructInit @@ -197,37 +205,69 @@ Section Cross References system_stm32f0xx.o(.ARM.exidx.text.SystemCoreClockUpdate) refers to system_stm32f0xx.o(.text.SystemCoreClockUpdate) for [Anonymous Symbol] tftfont_6x8.o(.rodata.TftFont_6x8) refers to tftfont_6x8.o(.rodata.Bitmaps_6x8) for [Anonymous Symbol] tftfont_16x24.o(.rodata.TftFont_16x24) refers to tftfont_16x24.o(.rodata.Bitmaps_16x24) for [Anonymous Symbol] - taskcounter.o(.text.TaskCounter) refers to debug.o(.text.Debug_Set) for Debug_Set - taskcounter.o(.text.TaskCounter) refers to printf1.o(i.__0snprintf$1) for __2snprintf taskcounter.o(.text.TaskCounter) refers to tftdisplay.o(.text.Tft_DrawString) for Tft_DrawString - taskcounter.o(.text.TaskCounter) refers to debug.o(.text.Debug_Unset) for Debug_Unset + taskcounter.o(.text.TaskCounter) refers to printf6.o(i.__0snprintf$6) for __2snprintf + taskcounter.o(.text.TaskCounter) refers to taskcounter.o(.bss.TaskCounter.initDone) for [Anonymous Symbol] taskcounter.o(.text.TaskCounter) refers to taskcounter.o(.bss.TaskCounter.counter) for [Anonymous Symbol] taskcounter.o(.text.TaskCounter) refers to taskcounter.o(.bss.tmpBuf) for [Anonymous Symbol] taskcounter.o(.ARM.exidx.text.TaskCounter) refers to taskcounter.o(.text.TaskCounter) for [Anonymous Symbol] - taskkey.o(.text.TaskKey) refers to debug.o(.text.Debug_Set) for Debug_Set + taskkey.o(.text.TaskKey) refers to systick.o(.text.Tick_GetMs) for Tick_GetMs + taskkey.o(.text.TaskKey) refers to key.o(.text.Key_GetState) for Key_GetState + taskkey.o(.text.TaskKey) refers to tftdisplay.o(.text.Tft_SetForegroundColourRgb16) for Tft_SetForegroundColourRgb16 taskkey.o(.text.TaskKey) refers to tftdisplay.o(.text.Tft_DrawString) for Tft_DrawString - taskkey.o(.text.TaskKey) refers to debug.o(.text.Debug_Unset) for Debug_Unset + taskkey.o(.text.TaskKey) refers to printf6.o(i.__0snprintf$6) for __2snprintf + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.lastRaw.0) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.lastChange.0) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.stable.0) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.lastRaw.1) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.lastChange.1) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.stable.1) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.lastRaw.2) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.lastChange.2) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.Key_GetDebounced.stable.2) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.TaskKey.userPrev) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.current_color) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.TaskKey.initDone) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.TaskKey.lastState) for [Anonymous Symbol] + taskkey.o(.text.TaskKey) refers to taskkey.o(.bss.TaskKey.tmpBuf) for [Anonymous Symbol] taskkey.o(.ARM.exidx.text.TaskKey) refers to taskkey.o(.text.TaskKey) for [Anonymous Symbol] - taskled.o(.text.TaskLed) refers to debug.o(.text.Debug_Set) for Debug_Set + taskled.o(.text.TaskLed) refers to systick.o(.text.Tick_GetMs) for Tick_GetMs + taskled.o(.text.TaskLed) refers to led.o(.text.Led_TurnOff) for Led_TurnOff + taskled.o(.text.TaskLed) refers to led.o(.text.Led_TurnOn) for Led_TurnOn taskled.o(.text.TaskLed) refers to tftdisplay.o(.text.Tft_DrawString) for Tft_DrawString - taskled.o(.text.TaskLed) refers to debug.o(.text.Debug_Unset) for Debug_Unset + taskled.o(.text.TaskLed) refers to taskled.o(.bss.TaskLed.initDone) for [Anonymous Symbol] + taskled.o(.text.TaskLed) refers to taskled.o(.bss.TaskLed.lastSwitch) for [Anonymous Symbol] + taskled.o(.text.TaskLed) refers to taskled.o(.bss.TaskLed.idx) for [Anonymous Symbol] + taskled.o(.text.TaskLed) refers to taskled.o(.rodata.ledSeq) for [Anonymous Symbol] taskled.o(.ARM.exidx.text.TaskLed) refers to taskled.o(.text.TaskLed) for [Anonymous Symbol] - taskmandelbrot.o(.text.TaskMandelbrot) refers to debug.o(.text.Debug_Set) for Debug_Set + taskmandelbrot.o(.text.TaskMandelbrot) refers to systick.o(.text.Tick_GetMs) for Tick_GetMs taskmandelbrot.o(.text.TaskMandelbrot) refers to tftdisplay.o(.text.Tft_DrawString) for Tft_DrawString + taskmandelbrot.o(.text.TaskMandelbrot) refers to tftdisplay.o(.text.Tft_ClearArea) for Tft_ClearArea taskmandelbrot.o(.text.TaskMandelbrot) refers to dfltui.o(.text) for __aeabi_ui2d taskmandelbrot.o(.text.TaskMandelbrot) refers to dmul.o(.text) for __aeabi_dmul - taskmandelbrot.o(.text.TaskMandelbrot) refers to dadd.o(.text) for __aeabi_dadd + taskmandelbrot.o(.text.TaskMandelbrot) refers to dadd.o(.text) for __aeabi_dsub taskmandelbrot.o(.text.TaskMandelbrot) refers to dcmpgt.o(.text) for __aeabi_dcmpgt taskmandelbrot.o(.text.TaskMandelbrot) refers to tftdisplay.o(.text.Tft_DrawPixel) for Tft_DrawPixel - taskmandelbrot.o(.text.TaskMandelbrot) refers to debug.o(.text.Debug_Unset) for Debug_Unset + taskmandelbrot.o(.text.TaskMandelbrot) refers to taskmandelbrot.o(.bss.TaskMandelbrot.initDone) for [Anonymous Symbol] + taskmandelbrot.o(.text.TaskMandelbrot) refers to taskmandelbrot.o(.rodata.str1.1) for [Anonymous Symbol] + taskmandelbrot.o(.text.TaskMandelbrot) refers to taskmandelbrot.o(.bss.curX) for [Anonymous Symbol] + taskmandelbrot.o(.text.TaskMandelbrot) refers to taskmandelbrot.o(.bss.clearing) for [Anonymous Symbol] + taskmandelbrot.o(.text.TaskMandelbrot) refers to taskmandelbrot.o(.bss.curY) for [Anonymous Symbol] taskmandelbrot.o(.ARM.exidx.text.TaskMandelbrot) refers to taskmandelbrot.o(.text.TaskMandelbrot) for [Anonymous Symbol] - taskpoti.o(.text.TaskPoti) refers to debug.o(.text.Debug_Set) for Debug_Set + taskpoti.o(.text.TaskPoti) refers to adc.o(.text.Adc_GetValue) for Adc_GetValue taskpoti.o(.text.TaskPoti) refers to tftdisplay.o(.text.Tft_DrawString) for Tft_DrawString - taskpoti.o(.text.TaskPoti) refers to debug.o(.text.Debug_Unset) for Debug_Unset + taskpoti.o(.text.TaskPoti) refers to printf6.o(i.__0snprintf$6) for __2snprintf + taskpoti.o(.text.TaskPoti) refers to taskpoti.o(.bss.TaskPoti.initDone) for [Anonymous Symbol] + taskpoti.o(.text.TaskPoti) refers to taskpoti.o(.bss.TaskPoti.lastValue) for [Anonymous Symbol] + taskpoti.o(.text.TaskPoti) refers to taskpoti.o(.bss.tmpBuf) for [Anonymous Symbol] taskpoti.o(.ARM.exidx.text.TaskPoti) refers to taskpoti.o(.text.TaskPoti) for [Anonymous Symbol] - taskwatch.o(.text.TaskWatch) refers to debug.o(.text.Debug_Set) for Debug_Set + taskwatch.o(.text.TaskWatch) refers to systick.o(.text.Tick_GetMs) for Tick_GetMs + taskwatch.o(.text.TaskWatch) refers to uidiv_div0.o(.text) for __aeabi_uidiv taskwatch.o(.text.TaskWatch) refers to tftdisplay.o(.text.Tft_DrawString) for Tft_DrawString - taskwatch.o(.text.TaskWatch) refers to debug.o(.text.Debug_Unset) for Debug_Unset + taskwatch.o(.text.TaskWatch) refers to printf6.o(i.__0snprintf$6) for __2snprintf + taskwatch.o(.text.TaskWatch) refers to taskwatch.o(.bss.TaskWatch.initDone) for [Anonymous Symbol] + taskwatch.o(.text.TaskWatch) refers to taskwatch.o(.bss.TaskWatch.lastSeconds) for [Anonymous Symbol] + taskwatch.o(.text.TaskWatch) refers to taskwatch.o(.bss.TaskWatch.tmpBuf) for [Anonymous Symbol] taskwatch.o(.ARM.exidx.text.TaskWatch) refers to taskwatch.o(.text.TaskWatch) for [Anonymous Symbol] entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$0000000F) for __rt_final_exit @@ -515,18 +555,13 @@ Removing Unused input sections from the image. Removing key.o(.text), (0 bytes). Removing key.o(.ARM.exidx.text.Key_Init), (8 bytes). - Removing key.o(.text.Key_GetState), (48 bytes). Removing key.o(.ARM.exidx.text.Key_GetState), (8 bytes). Removing led.o(.text), (0 bytes). Removing led.o(.ARM.exidx.text.Led_Init), (8 bytes). - Removing led.o(.text.Led_TurnOn), (36 bytes). Removing led.o(.ARM.exidx.text.Led_TurnOn), (8 bytes). - Removing led.o(.text.Led_TurnOff), (40 bytes). Removing led.o(.ARM.exidx.text.Led_TurnOff), (8 bytes). - Removing led.o(.rodata..Lswitch.table.Led_TurnOff), (12 bytes). Removing tftdisplay.o(.text), (0 bytes). Removing tftdisplay.o(.ARM.exidx.text.Tft_Init), (8 bytes). - Removing tftdisplay.o(.text.Tft_SetForegroundColourRgb16), (12 bytes). Removing tftdisplay.o(.ARM.exidx.text.Tft_SetForegroundColourRgb16), (8 bytes). Removing tftdisplay.o(.text.Tft_SetBackgroundColourRgb16), (12 bytes). Removing tftdisplay.o(.ARM.exidx.text.Tft_SetBackgroundColourRgb16), (8 bytes). @@ -538,19 +573,21 @@ Removing Unused input sections from the image. Removing tftdisplay.o(.ARM.exidx.text.Tft_DrawHLine), (8 bytes). Removing tftdisplay.o(.text.Tft_DrawVLine), (124 bytes). Removing tftdisplay.o(.ARM.exidx.text.Tft_DrawVLine), (8 bytes). + Removing tftdisplay.o(.ARM.exidx.text.Tft_ClearArea), (8 bytes). Removing tftdisplay.o(.ARM.exidx.text.Tft_DrawChar), (8 bytes). Removing tftdisplay.o(.ARM.exidx.text.Tft_DrawString), (8 bytes). Removing adc.o(.text), (0 bytes). Removing adc.o(.ARM.exidx.text.Adc_Init), (8 bytes). Removing adc.o(.text.Adc_SetChannel), (28 bytes). Removing adc.o(.ARM.exidx.text.Adc_SetChannel), (8 bytes). - Removing adc.o(.text.Adc_GetValue), (108 bytes). Removing adc.o(.ARM.exidx.text.Adc_GetValue), (8 bytes). Removing systick.o(.text), (0 bytes). Removing systick.o(.ARM.exidx.text.SysTick_Handler), (8 bytes). Removing systick.o(.ARM.exidx.text.Tick_InitSysTick), (8 bytes). + Removing systick.o(.ARM.exidx.text.Tick_GetMs), (8 bytes). Removing main_1.o(.text), (0 bytes). Removing main_1.o(.ARM.exidx.text.main), (8 bytes). + Removing main_1.o(.ARM.exidx.text.Superloop), (8 bytes). Removing main_1.o(.ARM.exidx.text.__aeabi_assert), (8 bytes). Removing main_1.o(.ARM.use_no_argv), (4 bytes). Removing debug.o(.text), (0 bytes). @@ -598,9 +635,7 @@ Removing Unused input sections from the image. Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_GetCalibrationFactor), (8 bytes). Removing stm32f0xx_adc.o(.text.ADC_StopOfConversion), (10 bytes). Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_StopOfConversion), (8 bytes). - Removing stm32f0xx_adc.o(.text.ADC_StartOfConversion), (10 bytes). Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_StartOfConversion), (8 bytes). - Removing stm32f0xx_adc.o(.text.ADC_GetConversionValue), (6 bytes). Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_GetConversionValue), (8 bytes). Removing stm32f0xx_adc.o(.text.ADC_DMACmd), (16 bytes). Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_DMACmd), (8 bytes). @@ -608,7 +643,6 @@ Removing Unused input sections from the image. Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_DMARequestModeConfig), (8 bytes). Removing stm32f0xx_adc.o(.text.ADC_ITConfig), (20 bytes). Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_ITConfig), (8 bytes). - Removing stm32f0xx_adc.o(.text.ADC_GetFlagStatus), (24 bytes). Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_GetFlagStatus), (8 bytes). Removing stm32f0xx_adc.o(.text.ADC_ClearFlag), (4 bytes). Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_ClearFlag), (8 bytes). @@ -623,7 +657,6 @@ Removing Unused input sections from the image. Removing stm32f0xx_gpio.o(.ARM.exidx.text.GPIO_StructInit), (8 bytes). Removing stm32f0xx_gpio.o(.text.GPIO_PinLockConfig), (36 bytes). Removing stm32f0xx_gpio.o(.ARM.exidx.text.GPIO_PinLockConfig), (8 bytes). - Removing stm32f0xx_gpio.o(.text.GPIO_ReadInputDataBit), (10 bytes). Removing stm32f0xx_gpio.o(.ARM.exidx.text.GPIO_ReadInputDataBit), (8 bytes). Removing stm32f0xx_gpio.o(.text.GPIO_ReadInputData), (4 bytes). Removing stm32f0xx_gpio.o(.ARM.exidx.text.GPIO_ReadInputData), (8 bytes). @@ -749,7 +782,7 @@ Removing Unused input sections from the image. Removing dfixul.o(.text), (64 bytes). Removing cdrcmple.o(.text), (40 bytes). -235 unused section(s) (total 5414 bytes) removed from the image. +228 unused section(s) (total 5132 bytes) removed from the image. ============================================================================== @@ -855,115 +888,231 @@ Image Symbol Table .text 0x080004b0 Section 48 init.o(.text) .text 0x080004e0 Section 0 llushr.o(.text) [Anonymous Symbol] 0x08000502 Section 0 stm32f0xx_adc.o(.text.ADC_Cmd) - [Anonymous Symbol] 0x08000514 Section 0 stm32f0xx_adc.o(.text.ADC_Init) - __arm_cp.1_0 0x08000538 Number 4 stm32f0xx_adc.o(.text.ADC_Init) - [Anonymous Symbol] 0x0800053c Section 0 adc.o(.text.Adc_Init) - __arm_cp.0_0 0x08000580 Number 4 adc.o(.text.Adc_Init) - [Anonymous Symbol] 0x08000584 Section 0 debug.o(.text.Debug_Init) - __arm_cp.0_0 0x080005ac Number 4 debug.o(.text.Debug_Init) - __arm_cp.0_1 0x080005b0 Number 4 debug.o(.text.Debug_Init) - [Anonymous Symbol] 0x080005b4 Section 0 debug.o(.text.Debug_Set) - [Anonymous Symbol] 0x080005c4 Section 0 debug.o(.text.Debug_Unset) - __arm_cp.2_0 0x080005d4 Number 4 debug.o(.text.Debug_Unset) - [Anonymous Symbol] 0x080005d8 Section 0 stm32f0xx_gpio.o(.text.GPIO_Init) - [Anonymous Symbol] 0x0800064c Section 0 stm32f0xx_gpio.o(.text.GPIO_StructInit) - __arm_cp.2_0 0x08000658 Number 4 stm32f0xx_gpio.o(.text.GPIO_StructInit) - [Anonymous Symbol] 0x0800065c Section 0 stm32f0xx_gpio.o(.text.GPIO_WriteBit) - [Anonymous Symbol] 0x08000668 Section 0 key.o(.text.Key_Init) - __arm_cp.0_0 0x080006a8 Number 4 key.o(.text.Key_Init) - [Anonymous Symbol] 0x080006ac Section 0 led.o(.text.Led_Init) - __arm_cp.0_0 0x080006e4 Number 4 led.o(.text.Led_Init) - [Anonymous Symbol] 0x080006e8 Section 0 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd) - __arm_cp.31_0 0x08000700 Number 4 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd) - [Anonymous Symbol] 0x08000704 Section 0 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd) - __arm_cp.32_0 0x0800071c Number 4 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd) - [Anonymous Symbol] 0x08000720 Section 0 systick.o(.text.SysTick_Handler) - __arm_cp.0_0 0x0800073c Number 4 systick.o(.text.SysTick_Handler) - [Anonymous Symbol] 0x08000740 Section 0 system_stm32f0xx.o(.text.SystemInit) - __arm_cp.0_0 0x08000814 Number 4 system_stm32f0xx.o(.text.SystemInit) - __arm_cp.0_1 0x08000818 Number 4 system_stm32f0xx.o(.text.SystemInit) - __arm_cp.0_2 0x0800081c Number 4 system_stm32f0xx.o(.text.SystemInit) - __arm_cp.0_3 0x08000820 Number 4 system_stm32f0xx.o(.text.SystemInit) - [Anonymous Symbol] 0x08000824 Section 0 taskcounter.o(.text.TaskCounter) - __arm_cp.0_0 0x08000860 Number 4 taskcounter.o(.text.TaskCounter) - __arm_cp.0_1 0x08000864 Number 4 taskcounter.o(.text.TaskCounter) - [Anonymous Symbol] 0x08000874 Section 0 taskkey.o(.text.TaskKey) - [Anonymous Symbol] 0x08000898 Section 0 taskled.o(.text.TaskLed) - [Anonymous Symbol] 0x080008c0 Section 0 taskmandelbrot.o(.text.TaskMandelbrot) - __arm_cp.0_1 0x08000a0c Number 4 taskmandelbrot.o(.text.TaskMandelbrot) - __arm_cp.0_2 0x08000a10 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) - __arm_cp.0_3 0x08000a14 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) - __arm_cp.0_4 0x08000a18 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) - __arm_cp.0_5 0x08000a1c Number 4 taskmandelbrot.o(.text.TaskMandelbrot) - __arm_cp.0_6 0x08000a20 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) - [Anonymous Symbol] 0x08000a24 Section 0 taskpoti.o(.text.TaskPoti) - [Anonymous Symbol] 0x08000a4c Section 0 taskwatch.o(.text.TaskWatch) - [Anonymous Symbol] 0x08000a74 Section 0 tftdisplay.o(.text.Tft_ClearScreen) - __arm_cp.3_1 0x08000af4 Number 4 tftdisplay.o(.text.Tft_ClearScreen) - __arm_cp.3_3 0x08000af8 Number 4 tftdisplay.o(.text.Tft_ClearScreen) - __arm_cp.3_4 0x08000afc Number 4 tftdisplay.o(.text.Tft_ClearScreen) - __arm_cp.3_5 0x08000b00 Number 4 tftdisplay.o(.text.Tft_ClearScreen) - __arm_cp.3_6 0x08000b04 Number 4 tftdisplay.o(.text.Tft_ClearScreen) - __arm_cp.3_9 0x08000b08 Number 4 tftdisplay.o(.text.Tft_ClearScreen) - [Anonymous Symbol] 0x08000b0c Section 0 tftdisplay.o(.text.Tft_DrawChar) - __arm_cp.9_3 0x08000c30 Number 4 tftdisplay.o(.text.Tft_DrawChar) - [Anonymous Symbol] 0x08000c34 Section 0 tftdisplay.o(.text.Tft_DrawPixel) - __arm_cp.6_1 0x08000c8c Number 4 tftdisplay.o(.text.Tft_DrawPixel) - __arm_cp.6_2 0x08000c90 Number 4 tftdisplay.o(.text.Tft_DrawPixel) - [Anonymous Symbol] 0x08000c94 Section 0 tftdisplay.o(.text.Tft_DrawString) - [Anonymous Symbol] 0x08000ce8 Section 0 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_0 0x08000d70 Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_1 0x08000d74 Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_2 0x08000d78 Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_3 0x08000d7c Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_4 0x08000d80 Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_5 0x08000d84 Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_6 0x08000d88 Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_7 0x08000d8c Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_8 0x08000d90 Number 4 tftdisplay.o(.text.Tft_Init) - __arm_cp.0_9 0x08000d94 Number 4 tftdisplay.o(.text.Tft_Init) - [Anonymous Symbol] 0x08000d98 Section 0 tftdisplay.o(.text.Tft_SetFont) - __arm_cp.5_0 0x08000dc8 Number 4 tftdisplay.o(.text.Tft_SetFont) - Tft_SetWindow 0x08000dcd Thumb Code 248 tftdisplay.o(.text.Tft_SetWindow) - [Anonymous Symbol] 0x08000dcc Section 0 tftdisplay.o(.text.Tft_SetWindow) - __arm_cp.4_1 0x08000ee0 Number 4 tftdisplay.o(.text.Tft_SetWindow) - __arm_cp.4_3 0x08000f00 Number 4 tftdisplay.o(.text.Tft_SetWindow) - __arm_cp.4_4 0x08000f04 Number 4 tftdisplay.o(.text.Tft_SetWindow) - __arm_cp.4_5 0x08000f08 Number 4 tftdisplay.o(.text.Tft_SetWindow) - __arm_cp.4_6 0x08000f0c Number 4 tftdisplay.o(.text.Tft_SetWindow) - [Anonymous Symbol] 0x08000f28 Section 0 systick.o(.text.Tick_InitSysTick) - __arm_cp.1_0 0x08000f5c Number 4 systick.o(.text.Tick_InitSysTick) - __arm_cp.1_1 0x08000f60 Number 4 systick.o(.text.Tick_InitSysTick) - __arm_cp.1_2 0x08000f64 Number 4 systick.o(.text.Tick_InitSysTick) - __arm_cp.1_3 0x08000f68 Number 4 systick.o(.text.Tick_InitSysTick) - [Anonymous Symbol] 0x08000f6c Section 0 main_1.o(.text.__aeabi_assert) - [Anonymous Symbol] 0x08000f9c Section 0 main_1.o(.text.main) - __arm_cp.0_0 0x08000ff8 Number 4 main_1.o(.text.main) - i.__0snprintf$1 0x08000ffc Section 0 printf1.o(i.__0snprintf$1) - i.__ARM_clz 0x08001034 Section 0 depilogue.o(i.__ARM_clz) - i.__scatterload_copy 0x08001062 Section 14 handlers.o(i.__scatterload_copy) - i.__scatterload_null 0x08001070 Section 2 handlers.o(i.__scatterload_null) - i.__scatterload_zeroinit 0x08001072 Section 14 handlers.o(i.__scatterload_zeroinit) - _printf_core 0x08001081 Thumb Code 332 printf1.o(i._printf_core) - i._printf_core 0x08001080 Section 0 printf1.o(i._printf_core) - _snputc 0x080011d1 Thumb Code 22 printf1.o(i._snputc) - i._snputc 0x080011d0 Section 0 printf1.o(i._snputc) - Bitmaps_16x24 0x080011e6 Data 5376 tftfont_16x24.o(.rodata.Bitmaps_16x24) - [Anonymous Symbol] 0x080011e6 Section 0 tftfont_16x24.o(.rodata.Bitmaps_16x24) - [Anonymous Symbol] 0x080026f8 Section 0 tftdisplay.o(.rodata.str1.1) + [Anonymous Symbol] 0x08000514 Section 0 stm32f0xx_adc.o(.text.ADC_GetConversionValue) + [Anonymous Symbol] 0x0800051a Section 0 stm32f0xx_adc.o(.text.ADC_GetFlagStatus) + [Anonymous Symbol] 0x08000534 Section 0 stm32f0xx_adc.o(.text.ADC_Init) + __arm_cp.1_0 0x08000558 Number 4 stm32f0xx_adc.o(.text.ADC_Init) + [Anonymous Symbol] 0x0800055c Section 0 stm32f0xx_adc.o(.text.ADC_StartOfConversion) + [Anonymous Symbol] 0x08000568 Section 0 adc.o(.text.Adc_GetValue) + __arm_cp.2_1 0x080005c4 Number 4 adc.o(.text.Adc_GetValue) + __arm_cp.2_2 0x080005c8 Number 4 adc.o(.text.Adc_GetValue) + __arm_cp.2_3 0x080005cc Number 4 adc.o(.text.Adc_GetValue) + [Anonymous Symbol] 0x080005d0 Section 0 adc.o(.text.Adc_Init) + __arm_cp.0_0 0x08000614 Number 4 adc.o(.text.Adc_Init) + [Anonymous Symbol] 0x08000618 Section 0 debug.o(.text.Debug_Init) + __arm_cp.0_0 0x08000640 Number 4 debug.o(.text.Debug_Init) + __arm_cp.0_1 0x08000644 Number 4 debug.o(.text.Debug_Init) + [Anonymous Symbol] 0x08000648 Section 0 debug.o(.text.Debug_Set) + [Anonymous Symbol] 0x08000658 Section 0 debug.o(.text.Debug_Unset) + __arm_cp.2_0 0x08000668 Number 4 debug.o(.text.Debug_Unset) + [Anonymous Symbol] 0x0800066c Section 0 stm32f0xx_gpio.o(.text.GPIO_Init) + [Anonymous Symbol] 0x080006e0 Section 0 stm32f0xx_gpio.o(.text.GPIO_ReadInputDataBit) + [Anonymous Symbol] 0x080006ec Section 0 stm32f0xx_gpio.o(.text.GPIO_StructInit) + __arm_cp.2_0 0x080006f8 Number 4 stm32f0xx_gpio.o(.text.GPIO_StructInit) + [Anonymous Symbol] 0x080006fc Section 0 stm32f0xx_gpio.o(.text.GPIO_WriteBit) + [Anonymous Symbol] 0x08000708 Section 0 key.o(.text.Key_GetState) + [Anonymous Symbol] 0x08000734 Section 0 key.o(.text.Key_Init) + __arm_cp.0_0 0x08000774 Number 4 key.o(.text.Key_Init) + [Anonymous Symbol] 0x08000778 Section 0 led.o(.text.Led_Init) + __arm_cp.0_0 0x080007b0 Number 4 led.o(.text.Led_Init) + [Anonymous Symbol] 0x080007b4 Section 0 led.o(.text.Led_TurnOff) + [Anonymous Symbol] 0x080007d4 Section 0 led.o(.text.Led_TurnOn) + __arm_cp.1_0 0x080007f0 Number 4 led.o(.text.Led_TurnOn) + __arm_cp.1_1 0x080007f4 Number 4 led.o(.text.Led_TurnOn) + [Anonymous Symbol] 0x080007f8 Section 0 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd) + __arm_cp.31_0 0x08000810 Number 4 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd) + [Anonymous Symbol] 0x08000814 Section 0 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd) + __arm_cp.32_0 0x0800082c Number 4 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd) + Superloop 0x08000831 Thumb Code 156 main_1.o(.text.Superloop) + [Anonymous Symbol] 0x08000830 Section 0 main_1.o(.text.Superloop) + __arm_cp.1_0 0x080008cc Number 4 main_1.o(.text.Superloop) + [Anonymous Symbol] 0x080008d0 Section 0 systick.o(.text.SysTick_Handler) + __arm_cp.0_0 0x080008ec Number 4 systick.o(.text.SysTick_Handler) + [Anonymous Symbol] 0x080008f0 Section 0 system_stm32f0xx.o(.text.SystemInit) + __arm_cp.0_0 0x080009c4 Number 4 system_stm32f0xx.o(.text.SystemInit) + __arm_cp.0_1 0x080009c8 Number 4 system_stm32f0xx.o(.text.SystemInit) + __arm_cp.0_2 0x080009cc Number 4 system_stm32f0xx.o(.text.SystemInit) + __arm_cp.0_3 0x080009d0 Number 4 system_stm32f0xx.o(.text.SystemInit) + [Anonymous Symbol] 0x080009d4 Section 0 taskcounter.o(.text.TaskCounter) + __arm_cp.0_0 0x08000a0c Number 4 taskcounter.o(.text.TaskCounter) + __arm_cp.0_2 0x08000a18 Number 4 taskcounter.o(.text.TaskCounter) + __arm_cp.0_3 0x08000a1c Number 4 taskcounter.o(.text.TaskCounter) + [Anonymous Symbol] 0x08000a24 Section 0 taskkey.o(.text.TaskKey) + __arm_cp.0_0 0x08000b4c Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_1 0x08000b50 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_2 0x08000b54 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_3 0x08000b58 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_4 0x08000b5c Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_5 0x08000b60 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_6 0x08000b64 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_7 0x08000b68 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_8 0x08000b6c Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_9 0x08000b70 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_10 0x08000b74 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_11 0x08000b78 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_13 0x08000b84 Number 4 taskkey.o(.text.TaskKey) + __arm_cp.0_14 0x08000b88 Number 4 taskkey.o(.text.TaskKey) + [Anonymous Symbol] 0x08000b98 Section 0 taskled.o(.text.TaskLed) + __arm_cp.0_0 0x08000c00 Number 4 taskled.o(.text.TaskLed) + __arm_cp.0_2 0x08000c0c Number 4 taskled.o(.text.TaskLed) + __arm_cp.0_3 0x08000c10 Number 4 taskled.o(.text.TaskLed) + __arm_cp.0_4 0x08000c14 Number 4 taskled.o(.text.TaskLed) + [Anonymous Symbol] 0x08000c18 Section 0 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_0 0x08000de4 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_1 0x08000de8 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_2 0x08000dec Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_3 0x08000df0 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_4 0x08000df4 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_5 0x08000df8 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_6 0x08000dfc Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_7 0x08000e00 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_8 0x08000e04 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + __arm_cp.0_9 0x08000e08 Number 4 taskmandelbrot.o(.text.TaskMandelbrot) + [Anonymous Symbol] 0x08000e0c Section 0 taskpoti.o(.text.TaskPoti) + __arm_cp.0_0 0x08000e60 Number 4 taskpoti.o(.text.TaskPoti) + __arm_cp.0_2 0x08000e6c Number 4 taskpoti.o(.text.TaskPoti) + __arm_cp.0_3 0x08000e70 Number 4 taskpoti.o(.text.TaskPoti) + [Anonymous Symbol] 0x08000e78 Section 0 taskwatch.o(.text.TaskWatch) + __arm_cp.0_0 0x08000ee8 Number 4 taskwatch.o(.text.TaskWatch) + __arm_cp.0_2 0x08000ef4 Number 4 taskwatch.o(.text.TaskWatch) + __arm_cp.0_3 0x08000ef8 Number 4 taskwatch.o(.text.TaskWatch) + __arm_cp.0_4 0x08000efc Number 4 taskwatch.o(.text.TaskWatch) + [Anonymous Symbol] 0x08000f0c Section 0 tftdisplay.o(.text.Tft_ClearArea) + [Anonymous Symbol] 0x08000f7c Section 0 tftdisplay.o(.text.Tft_ClearScreen) + __arm_cp.3_1 0x08000ffc Number 4 tftdisplay.o(.text.Tft_ClearScreen) + __arm_cp.3_3 0x08001000 Number 4 tftdisplay.o(.text.Tft_ClearScreen) + __arm_cp.3_4 0x08001004 Number 4 tftdisplay.o(.text.Tft_ClearScreen) + __arm_cp.3_5 0x08001008 Number 4 tftdisplay.o(.text.Tft_ClearScreen) + __arm_cp.3_6 0x0800100c Number 4 tftdisplay.o(.text.Tft_ClearScreen) + __arm_cp.3_9 0x08001010 Number 4 tftdisplay.o(.text.Tft_ClearScreen) + [Anonymous Symbol] 0x08001014 Section 0 tftdisplay.o(.text.Tft_DrawChar) + __arm_cp.10_3 0x08001138 Number 4 tftdisplay.o(.text.Tft_DrawChar) + [Anonymous Symbol] 0x0800113c Section 0 tftdisplay.o(.text.Tft_DrawPixel) + __arm_cp.6_1 0x08001194 Number 4 tftdisplay.o(.text.Tft_DrawPixel) + [Anonymous Symbol] 0x08001198 Section 0 tftdisplay.o(.text.Tft_DrawString) + [Anonymous Symbol] 0x080011ec Section 0 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_0 0x08001274 Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_1 0x08001278 Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_2 0x0800127c Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_3 0x08001280 Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_4 0x08001284 Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_5 0x08001288 Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_6 0x0800128c Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_7 0x08001290 Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_8 0x08001294 Number 4 tftdisplay.o(.text.Tft_Init) + __arm_cp.0_9 0x08001298 Number 4 tftdisplay.o(.text.Tft_Init) + [Anonymous Symbol] 0x0800129c Section 0 tftdisplay.o(.text.Tft_SetFont) + __arm_cp.5_0 0x080012cc Number 4 tftdisplay.o(.text.Tft_SetFont) + [Anonymous Symbol] 0x080012d0 Section 0 tftdisplay.o(.text.Tft_SetForegroundColourRgb16) + __arm_cp.1_0 0x080012d8 Number 4 tftdisplay.o(.text.Tft_SetForegroundColourRgb16) + Tft_SetWindow 0x080012dd Thumb Code 248 tftdisplay.o(.text.Tft_SetWindow) + [Anonymous Symbol] 0x080012dc Section 0 tftdisplay.o(.text.Tft_SetWindow) + __arm_cp.4_1 0x080013f0 Number 4 tftdisplay.o(.text.Tft_SetWindow) + __arm_cp.4_3 0x08001410 Number 4 tftdisplay.o(.text.Tft_SetWindow) + __arm_cp.4_4 0x08001414 Number 4 tftdisplay.o(.text.Tft_SetWindow) + __arm_cp.4_5 0x08001418 Number 4 tftdisplay.o(.text.Tft_SetWindow) + __arm_cp.4_6 0x0800141c Number 4 tftdisplay.o(.text.Tft_SetWindow) + [Anonymous Symbol] 0x08001438 Section 0 systick.o(.text.Tick_GetMs) + __arm_cp.2_0 0x08001440 Number 4 systick.o(.text.Tick_GetMs) + [Anonymous Symbol] 0x08001444 Section 0 systick.o(.text.Tick_InitSysTick) + __arm_cp.1_0 0x08001478 Number 4 systick.o(.text.Tick_InitSysTick) + __arm_cp.1_1 0x0800147c Number 4 systick.o(.text.Tick_InitSysTick) + __arm_cp.1_2 0x08001480 Number 4 systick.o(.text.Tick_InitSysTick) + __arm_cp.1_3 0x08001484 Number 4 systick.o(.text.Tick_InitSysTick) + [Anonymous Symbol] 0x08001488 Section 0 main_1.o(.text.__aeabi_assert) + [Anonymous Symbol] 0x080014b8 Section 0 main_1.o(.text.main) + __arm_cp.0_0 0x080014d4 Number 4 main_1.o(.text.main) + i.__0snprintf$6 0x080014d8 Section 0 printf6.o(i.__0snprintf$6) + i.__ARM_clz 0x08001510 Section 0 depilogue.o(i.__ARM_clz) + i.__scatterload_copy 0x0800153e Section 14 handlers.o(i.__scatterload_copy) + i.__scatterload_null 0x0800154c Section 2 handlers.o(i.__scatterload_null) + i.__scatterload_zeroinit 0x0800154e Section 14 handlers.o(i.__scatterload_zeroinit) + _printf_core 0x0800155d Thumb Code 768 printf6.o(i._printf_core) + i._printf_core 0x0800155c Section 0 printf6.o(i._printf_core) + _printf_post_padding 0x08001861 Thumb Code 32 printf6.o(i._printf_post_padding) + i._printf_post_padding 0x08001860 Section 0 printf6.o(i._printf_post_padding) + _printf_pre_padding 0x08001881 Thumb Code 44 printf6.o(i._printf_pre_padding) + i._printf_pre_padding 0x08001880 Section 0 printf6.o(i._printf_pre_padding) + _snputc 0x080018ad Thumb Code 22 printf6.o(i._snputc) + i._snputc 0x080018ac Section 0 printf6.o(i._snputc) + [Anonymous Symbol] 0x080018c2 Section 0 led.o(.rodata..Lswitch.table.Led_TurnOff) + Bitmaps_16x24 0x080018ce Data 5376 tftfont_16x24.o(.rodata.Bitmaps_16x24) + [Anonymous Symbol] 0x080018ce Section 0 tftfont_16x24.o(.rodata.Bitmaps_16x24) + ledSeq 0x08002de0 Data 3 taskled.o(.rodata.ledSeq) + [Anonymous Symbol] 0x08002de0 Section 0 taskled.o(.rodata.ledSeq) + [Anonymous Symbol] 0x08002de3 Section 0 tftdisplay.o(.rodata.str1.1) + [Anonymous Symbol] 0x08002df8 Section 0 taskmandelbrot.o(.rodata.str1.1) Tft_Cfg.0 0x20000004 Data 2 tftdisplay.o(.data.Tft_Cfg.0) [Anonymous Symbol] 0x20000004 Section 0 tftdisplay.o(.data.Tft_Cfg.0) - TaskCounter.counter 0x20000008 Data 4 taskcounter.o(.bss.TaskCounter.counter) - [Anonymous Symbol] 0x20000008 Section 0 taskcounter.o(.bss.TaskCounter.counter) - Tft_Cfg.1 0x2000000c Data 2 tftdisplay.o(.bss.Tft_Cfg.1) - [Anonymous Symbol] 0x2000000c Section 0 tftdisplay.o(.bss.Tft_Cfg.1) - Tft_Cfg.2 0x20000010 Data 4 tftdisplay.o(.bss.Tft_Cfg.2) - [Anonymous Symbol] 0x20000010 Section 0 tftdisplay.o(.bss.Tft_Cfg.2) - msTicks 0x20000014 Data 4 systick.o(.bss.msTicks) - [Anonymous Symbol] 0x20000014 Section 0 systick.o(.bss.msTicks) - tmpBuf 0x20000018 Data 14 taskcounter.o(.bss.tmpBuf) - [Anonymous Symbol] 0x20000018 Section 0 taskcounter.o(.bss.tmpBuf) - STACK 0x20000028 Section 1024 startup_stm32f072.o(STACK) + Key_GetDebounced.lastChange.0 0x20000008 Data 4 taskkey.o(.bss.Key_GetDebounced.lastChange.0) + [Anonymous Symbol] 0x20000008 Section 0 taskkey.o(.bss.Key_GetDebounced.lastChange.0) + Key_GetDebounced.lastChange.1 0x2000000c Data 4 taskkey.o(.bss.Key_GetDebounced.lastChange.1) + [Anonymous Symbol] 0x2000000c Section 0 taskkey.o(.bss.Key_GetDebounced.lastChange.1) + Key_GetDebounced.lastChange.2 0x20000010 Data 4 taskkey.o(.bss.Key_GetDebounced.lastChange.2) + [Anonymous Symbol] 0x20000010 Section 0 taskkey.o(.bss.Key_GetDebounced.lastChange.2) + Key_GetDebounced.lastRaw.0 0x20000014 Data 1 taskkey.o(.bss.Key_GetDebounced.lastRaw.0) + [Anonymous Symbol] 0x20000014 Section 0 taskkey.o(.bss.Key_GetDebounced.lastRaw.0) + Key_GetDebounced.lastRaw.1 0x20000015 Data 1 taskkey.o(.bss.Key_GetDebounced.lastRaw.1) + [Anonymous Symbol] 0x20000015 Section 0 taskkey.o(.bss.Key_GetDebounced.lastRaw.1) + Key_GetDebounced.lastRaw.2 0x20000016 Data 1 taskkey.o(.bss.Key_GetDebounced.lastRaw.2) + [Anonymous Symbol] 0x20000016 Section 0 taskkey.o(.bss.Key_GetDebounced.lastRaw.2) + Key_GetDebounced.stable.0 0x20000017 Data 1 taskkey.o(.bss.Key_GetDebounced.stable.0) + [Anonymous Symbol] 0x20000017 Section 0 taskkey.o(.bss.Key_GetDebounced.stable.0) + Key_GetDebounced.stable.1 0x20000018 Data 1 taskkey.o(.bss.Key_GetDebounced.stable.1) + [Anonymous Symbol] 0x20000018 Section 0 taskkey.o(.bss.Key_GetDebounced.stable.1) + Key_GetDebounced.stable.2 0x20000019 Data 1 taskkey.o(.bss.Key_GetDebounced.stable.2) + [Anonymous Symbol] 0x20000019 Section 0 taskkey.o(.bss.Key_GetDebounced.stable.2) + TaskCounter.counter 0x2000001c Data 4 taskcounter.o(.bss.TaskCounter.counter) + [Anonymous Symbol] 0x2000001c Section 0 taskcounter.o(.bss.TaskCounter.counter) + TaskCounter.initDone 0x20000020 Data 1 taskcounter.o(.bss.TaskCounter.initDone) + [Anonymous Symbol] 0x20000020 Section 0 taskcounter.o(.bss.TaskCounter.initDone) + TaskKey.initDone 0x20000021 Data 1 taskkey.o(.bss.TaskKey.initDone) + [Anonymous Symbol] 0x20000021 Section 0 taskkey.o(.bss.TaskKey.initDone) + TaskKey.lastState 0x20000022 Data 1 taskkey.o(.bss.TaskKey.lastState) + [Anonymous Symbol] 0x20000022 Section 0 taskkey.o(.bss.TaskKey.lastState) + TaskKey.tmpBuf 0x20000023 Data 14 taskkey.o(.bss.TaskKey.tmpBuf) + [Anonymous Symbol] 0x20000023 Section 0 taskkey.o(.bss.TaskKey.tmpBuf) + TaskKey.userPrev 0x20000031 Data 1 taskkey.o(.bss.TaskKey.userPrev) + [Anonymous Symbol] 0x20000031 Section 0 taskkey.o(.bss.TaskKey.userPrev) + TaskLed.idx 0x20000032 Data 1 taskled.o(.bss.TaskLed.idx) + [Anonymous Symbol] 0x20000032 Section 0 taskled.o(.bss.TaskLed.idx) + TaskLed.initDone 0x20000033 Data 1 taskled.o(.bss.TaskLed.initDone) + [Anonymous Symbol] 0x20000033 Section 0 taskled.o(.bss.TaskLed.initDone) + TaskLed.lastSwitch 0x20000034 Data 4 taskled.o(.bss.TaskLed.lastSwitch) + [Anonymous Symbol] 0x20000034 Section 0 taskled.o(.bss.TaskLed.lastSwitch) + TaskMandelbrot.initDone 0x20000038 Data 1 taskmandelbrot.o(.bss.TaskMandelbrot.initDone) + [Anonymous Symbol] 0x20000038 Section 0 taskmandelbrot.o(.bss.TaskMandelbrot.initDone) + TaskPoti.initDone 0x20000039 Data 1 taskpoti.o(.bss.TaskPoti.initDone) + [Anonymous Symbol] 0x20000039 Section 0 taskpoti.o(.bss.TaskPoti.initDone) + TaskPoti.lastValue 0x2000003c Data 4 taskpoti.o(.bss.TaskPoti.lastValue) + [Anonymous Symbol] 0x2000003c Section 0 taskpoti.o(.bss.TaskPoti.lastValue) + TaskWatch.initDone 0x20000040 Data 1 taskwatch.o(.bss.TaskWatch.initDone) + [Anonymous Symbol] 0x20000040 Section 0 taskwatch.o(.bss.TaskWatch.initDone) + TaskWatch.lastSeconds 0x20000044 Data 4 taskwatch.o(.bss.TaskWatch.lastSeconds) + [Anonymous Symbol] 0x20000044 Section 0 taskwatch.o(.bss.TaskWatch.lastSeconds) + TaskWatch.tmpBuf 0x20000048 Data 14 taskwatch.o(.bss.TaskWatch.tmpBuf) + [Anonymous Symbol] 0x20000048 Section 0 taskwatch.o(.bss.TaskWatch.tmpBuf) + Tft_Cfg.1 0x20000058 Data 2 tftdisplay.o(.bss.Tft_Cfg.1) + [Anonymous Symbol] 0x20000058 Section 0 tftdisplay.o(.bss.Tft_Cfg.1) + Tft_Cfg.2 0x2000005c Data 4 tftdisplay.o(.bss.Tft_Cfg.2) + [Anonymous Symbol] 0x2000005c Section 0 tftdisplay.o(.bss.Tft_Cfg.2) + clearing 0x20000060 Data 1 taskmandelbrot.o(.bss.clearing) + [Anonymous Symbol] 0x20000060 Section 0 taskmandelbrot.o(.bss.clearing) + curX 0x20000064 Data 4 taskmandelbrot.o(.bss.curX) + [Anonymous Symbol] 0x20000064 Section 0 taskmandelbrot.o(.bss.curX) + curY 0x20000068 Data 4 taskmandelbrot.o(.bss.curY) + [Anonymous Symbol] 0x20000068 Section 0 taskmandelbrot.o(.bss.curY) + current_color 0x2000006c Data 2 taskkey.o(.bss.current_color) + [Anonymous Symbol] 0x2000006c Section 0 taskkey.o(.bss.current_color) + msTicks 0x20000070 Data 4 systick.o(.bss.msTicks) + [Anonymous Symbol] 0x20000070 Section 0 systick.o(.bss.msTicks) + processStack 0x20000078 Data 1024 main_1.o(.bss.processStack) + [Anonymous Symbol] 0x20000078 Section 0 main_1.o(.bss.processStack) + tmpBuf 0x20000478 Data 14 taskcounter.o(.bss.tmpBuf) + [Anonymous Symbol] 0x20000478 Section 0 taskcounter.o(.bss.tmpBuf) + tmpBuf 0x20000486 Data 14 taskpoti.o(.bss.tmpBuf) + [Anonymous Symbol] 0x20000486 Section 0 taskpoti.o(.bss.tmpBuf) + STACK 0x20000498 Section 1024 startup_stm32f072.o(STACK) Global Symbols @@ -1085,47 +1234,58 @@ Image Symbol Table __aeabi_llsr 0x080004e1 Thumb Code 34 llushr.o(.text) _ll_ushift_r 0x080004e1 Thumb Code 0 llushr.o(.text) ADC_Cmd 0x08000503 Thumb Code 18 stm32f0xx_adc.o(.text.ADC_Cmd) - ADC_Init 0x08000515 Thumb Code 36 stm32f0xx_adc.o(.text.ADC_Init) - Adc_Init 0x0800053d Thumb Code 68 adc.o(.text.Adc_Init) - Debug_Init 0x08000585 Thumb Code 40 debug.o(.text.Debug_Init) - Debug_Set 0x080005b5 Thumb Code 16 debug.o(.text.Debug_Set) - Debug_Unset 0x080005c5 Thumb Code 16 debug.o(.text.Debug_Unset) - GPIO_Init 0x080005d9 Thumb Code 116 stm32f0xx_gpio.o(.text.GPIO_Init) - GPIO_StructInit 0x0800064d Thumb Code 12 stm32f0xx_gpio.o(.text.GPIO_StructInit) - GPIO_WriteBit 0x0800065d Thumb Code 12 stm32f0xx_gpio.o(.text.GPIO_WriteBit) - Key_Init 0x08000669 Thumb Code 64 key.o(.text.Key_Init) - Led_Init 0x080006ad Thumb Code 56 led.o(.text.Led_Init) - RCC_AHBPeriphClockCmd 0x080006e9 Thumb Code 24 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd) - RCC_APB2PeriphClockCmd 0x08000705 Thumb Code 24 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd) - SysTick_Handler 0x08000721 Thumb Code 28 systick.o(.text.SysTick_Handler) - SystemInit 0x08000741 Thumb Code 212 system_stm32f0xx.o(.text.SystemInit) - TaskCounter 0x08000825 Thumb Code 60 taskcounter.o(.text.TaskCounter) - TaskKey 0x08000875 Thumb Code 28 taskkey.o(.text.TaskKey) - TaskLed 0x08000899 Thumb Code 32 taskled.o(.text.TaskLed) - TaskMandelbrot 0x080008c1 Thumb Code 324 taskmandelbrot.o(.text.TaskMandelbrot) - TaskPoti 0x08000a25 Thumb Code 32 taskpoti.o(.text.TaskPoti) - TaskWatch 0x08000a4d Thumb Code 32 taskwatch.o(.text.TaskWatch) - Tft_ClearScreen 0x08000a75 Thumb Code 128 tftdisplay.o(.text.Tft_ClearScreen) - Tft_DrawChar 0x08000b0d Thumb Code 292 tftdisplay.o(.text.Tft_DrawChar) - Tft_DrawPixel 0x08000c35 Thumb Code 88 tftdisplay.o(.text.Tft_DrawPixel) - Tft_DrawString 0x08000c95 Thumb Code 84 tftdisplay.o(.text.Tft_DrawString) - Tft_Init 0x08000ce9 Thumb Code 136 tftdisplay.o(.text.Tft_Init) - Tft_SetFont 0x08000d99 Thumb Code 48 tftdisplay.o(.text.Tft_SetFont) - Tick_InitSysTick 0x08000f29 Thumb Code 52 systick.o(.text.Tick_InitSysTick) - __aeabi_assert 0x08000f6d Thumb Code 46 main_1.o(.text.__aeabi_assert) - main 0x08000f9d Thumb Code 92 main_1.o(.text.main) - __0snprintf$1 0x08000ffd Thumb Code 50 printf1.o(i.__0snprintf$1) - __1snprintf$1 0x08000ffd Thumb Code 0 printf1.o(i.__0snprintf$1) - __2snprintf 0x08000ffd Thumb Code 0 printf1.o(i.__0snprintf$1) - __ARM_clz 0x08001035 Thumb Code 46 depilogue.o(i.__ARM_clz) - __scatterload_copy 0x08001063 Thumb Code 14 handlers.o(i.__scatterload_copy) - __scatterload_null 0x08001071 Thumb Code 2 handlers.o(i.__scatterload_null) - __scatterload_zeroinit 0x08001073 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) - TftFont_16x24 0x080026e8 Data 16 tftfont_16x24.o(.rodata.TftFont_16x24) - Region$$Table$$Base 0x08002710 Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x08002730 Number 0 anon$$obj.o(Region$$Table) + ADC_GetConversionValue 0x08000515 Thumb Code 6 stm32f0xx_adc.o(.text.ADC_GetConversionValue) + ADC_GetFlagStatus 0x0800051b Thumb Code 24 stm32f0xx_adc.o(.text.ADC_GetFlagStatus) + ADC_Init 0x08000535 Thumb Code 36 stm32f0xx_adc.o(.text.ADC_Init) + ADC_StartOfConversion 0x0800055d Thumb Code 10 stm32f0xx_adc.o(.text.ADC_StartOfConversion) + Adc_GetValue 0x08000569 Thumb Code 92 adc.o(.text.Adc_GetValue) + Adc_Init 0x080005d1 Thumb Code 68 adc.o(.text.Adc_Init) + Debug_Init 0x08000619 Thumb Code 40 debug.o(.text.Debug_Init) + Debug_Set 0x08000649 Thumb Code 16 debug.o(.text.Debug_Set) + Debug_Unset 0x08000659 Thumb Code 16 debug.o(.text.Debug_Unset) + GPIO_Init 0x0800066d Thumb Code 116 stm32f0xx_gpio.o(.text.GPIO_Init) + GPIO_ReadInputDataBit 0x080006e1 Thumb Code 10 stm32f0xx_gpio.o(.text.GPIO_ReadInputDataBit) + GPIO_StructInit 0x080006ed Thumb Code 12 stm32f0xx_gpio.o(.text.GPIO_StructInit) + GPIO_WriteBit 0x080006fd Thumb Code 12 stm32f0xx_gpio.o(.text.GPIO_WriteBit) + Key_GetState 0x08000709 Thumb Code 44 key.o(.text.Key_GetState) + Key_Init 0x08000735 Thumb Code 64 key.o(.text.Key_Init) + Led_Init 0x08000779 Thumb Code 56 led.o(.text.Led_Init) + Led_TurnOff 0x080007b5 Thumb Code 32 led.o(.text.Led_TurnOff) + Led_TurnOn 0x080007d5 Thumb Code 28 led.o(.text.Led_TurnOn) + RCC_AHBPeriphClockCmd 0x080007f9 Thumb Code 24 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd) + RCC_APB2PeriphClockCmd 0x08000815 Thumb Code 24 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd) + SysTick_Handler 0x080008d1 Thumb Code 28 systick.o(.text.SysTick_Handler) + SystemInit 0x080008f1 Thumb Code 212 system_stm32f0xx.o(.text.SystemInit) + TaskCounter 0x080009d5 Thumb Code 56 taskcounter.o(.text.TaskCounter) + TaskKey 0x08000a25 Thumb Code 296 taskkey.o(.text.TaskKey) + TaskLed 0x08000b99 Thumb Code 104 taskled.o(.text.TaskLed) + TaskMandelbrot 0x08000c19 Thumb Code 460 taskmandelbrot.o(.text.TaskMandelbrot) + TaskPoti 0x08000e0d Thumb Code 84 taskpoti.o(.text.TaskPoti) + TaskWatch 0x08000e79 Thumb Code 112 taskwatch.o(.text.TaskWatch) + Tft_ClearArea 0x08000f0d Thumb Code 112 tftdisplay.o(.text.Tft_ClearArea) + Tft_ClearScreen 0x08000f7d Thumb Code 128 tftdisplay.o(.text.Tft_ClearScreen) + Tft_DrawChar 0x08001015 Thumb Code 292 tftdisplay.o(.text.Tft_DrawChar) + Tft_DrawPixel 0x0800113d Thumb Code 88 tftdisplay.o(.text.Tft_DrawPixel) + Tft_DrawString 0x08001199 Thumb Code 84 tftdisplay.o(.text.Tft_DrawString) + Tft_Init 0x080011ed Thumb Code 136 tftdisplay.o(.text.Tft_Init) + Tft_SetFont 0x0800129d Thumb Code 48 tftdisplay.o(.text.Tft_SetFont) + Tft_SetForegroundColourRgb16 0x080012d1 Thumb Code 8 tftdisplay.o(.text.Tft_SetForegroundColourRgb16) + Tick_GetMs 0x08001439 Thumb Code 8 systick.o(.text.Tick_GetMs) + Tick_InitSysTick 0x08001445 Thumb Code 52 systick.o(.text.Tick_InitSysTick) + __aeabi_assert 0x08001489 Thumb Code 46 main_1.o(.text.__aeabi_assert) + main 0x080014b9 Thumb Code 28 main_1.o(.text.main) + __0snprintf$6 0x080014d9 Thumb Code 50 printf6.o(i.__0snprintf$6) + __1snprintf$6 0x080014d9 Thumb Code 0 printf6.o(i.__0snprintf$6) + __2snprintf 0x080014d9 Thumb Code 0 printf6.o(i.__0snprintf$6) + __ARM_clz 0x08001511 Thumb Code 46 depilogue.o(i.__ARM_clz) + __scatterload_copy 0x0800153f Thumb Code 14 handlers.o(i.__scatterload_copy) + __scatterload_null 0x0800154d Thumb Code 2 handlers.o(i.__scatterload_null) + __scatterload_zeroinit 0x0800154f Thumb Code 14 handlers.o(i.__scatterload_zeroinit) + TftFont_16x24 0x08002dd0 Data 16 tftfont_16x24.o(.rodata.TftFont_16x24) + Region$$Table$$Base 0x08002e00 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x08002e20 Number 0 anon$$obj.o(Region$$Table) SystemCoreClock 0x20000000 Data 4 system_stm32f0xx.o(.data.SystemCoreClock) - __initial_sp 0x20000428 Data 0 startup_stm32f072.o(STACK) + __initial_sp 0x20000898 Data 0 startup_stm32f072.o(STACK) @@ -1135,97 +1295,153 @@ Memory Map of the image Image Entry point : 0x080000c1 - Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002738, Max: 0x00020000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00002e28, Max: 0x00020000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002730, Max: 0x00020000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00002e20, Max: 0x00020000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x08000000 0x08000000 0x000000c0 Data RO 311 RESET startup_stm32f072.o - 0x080000c0 0x080000c0 0x00000000 Code RO 397 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) - 0x080000c0 0x080000c0 0x00000004 Code RO 675 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) - 0x080000c4 0x080000c4 0x00000004 Code RO 678 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) - 0x080000c8 0x080000c8 0x00000000 Code RO 680 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) - 0x080000c8 0x080000c8 0x00000000 Code RO 682 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) - 0x080000c8 0x080000c8 0x00000008 Code RO 683 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) - 0x080000d0 0x080000d0 0x00000000 Code RO 685 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) - 0x080000d0 0x080000d0 0x00000000 Code RO 687 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) - 0x080000d0 0x080000d0 0x00000004 Code RO 676 .ARM.Collect$$$$00002712 mc_p.l(entry2.o) - 0x080000d4 0x080000d4 0x0000001c Code RO 312 .text startup_stm32f072.o - 0x080000f0 0x080000f0 0x00000164 Code RO 667 .text mf_p.l(dadd.o) - 0x08000254 0x08000254 0x000000d0 Code RO 669 .text mf_p.l(dmul.o) - 0x08000324 0x08000324 0x0000002c Code RO 671 .text mf_p.l(dcmpgt.o) - 0x08000350 0x08000350 0x0000001c Code RO 673 .text mf_p.l(dfltui.o) - 0x0800036c 0x0800036c 0x0000003e Code RO 698 .text mc_p.l(uidiv_div0.o) - 0x080003aa 0x080003aa 0x00000020 Code RO 706 .text mc_p.l(llshl.o) - 0x080003ca 0x080003ca 0x00000026 Code RO 708 .text mc_p.l(llsshr.o) - 0x080003f0 0x080003f0 0x00000000 Code RO 710 .text mc_p.l(iusefp.o) - 0x080003f0 0x080003f0 0x000000be Code RO 711 .text mf_p.l(depilogue.o) + 0x08000000 0x08000000 0x000000c0 Data RO 319 RESET startup_stm32f072.o + 0x080000c0 0x080000c0 0x00000000 Code RO 439 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) + 0x080000c0 0x080000c0 0x00000004 Code RO 717 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) + 0x080000c4 0x080000c4 0x00000004 Code RO 720 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) + 0x080000c8 0x080000c8 0x00000000 Code RO 722 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) + 0x080000c8 0x080000c8 0x00000000 Code RO 724 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) + 0x080000c8 0x080000c8 0x00000008 Code RO 725 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) + 0x080000d0 0x080000d0 0x00000000 Code RO 727 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) + 0x080000d0 0x080000d0 0x00000000 Code RO 729 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) + 0x080000d0 0x080000d0 0x00000004 Code RO 718 .ARM.Collect$$$$00002712 mc_p.l(entry2.o) + 0x080000d4 0x080000d4 0x0000001c Code RO 320 .text startup_stm32f072.o + 0x080000f0 0x080000f0 0x00000164 Code RO 709 .text mf_p.l(dadd.o) + 0x08000254 0x08000254 0x000000d0 Code RO 711 .text mf_p.l(dmul.o) + 0x08000324 0x08000324 0x0000002c Code RO 713 .text mf_p.l(dcmpgt.o) + 0x08000350 0x08000350 0x0000001c Code RO 715 .text mf_p.l(dfltui.o) + 0x0800036c 0x0800036c 0x0000003e Code RO 740 .text mc_p.l(uidiv_div0.o) + 0x080003aa 0x080003aa 0x00000020 Code RO 748 .text mc_p.l(llshl.o) + 0x080003ca 0x080003ca 0x00000026 Code RO 750 .text mc_p.l(llsshr.o) + 0x080003f0 0x080003f0 0x00000000 Code RO 752 .text mc_p.l(iusefp.o) + 0x080003f0 0x080003f0 0x000000be Code RO 753 .text mf_p.l(depilogue.o) 0x080004ae 0x080004ae 0x00000002 PAD - 0x080004b0 0x080004b0 0x00000030 Code RO 721 .text mc_p.l(init.o) - 0x080004e0 0x080004e0 0x00000022 Code RO 724 .text mc_p.l(llushr.o) - 0x08000502 0x08000502 0x00000012 Code RO 122 .text.ADC_Cmd stm32f0xx_adc.o - 0x08000514 0x08000514 0x00000028 Code RO 118 .text.ADC_Init stm32f0xx_adc.o - 0x0800053c 0x0800053c 0x00000048 Code RO 63 .text.Adc_Init adc.o - 0x08000584 0x08000584 0x00000030 Code RO 102 .text.Debug_Init debug.o - 0x080005b4 0x080005b4 0x00000010 Code RO 104 .text.Debug_Set debug.o - 0x080005c4 0x080005c4 0x00000014 Code RO 106 .text.Debug_Unset debug.o - 0x080005d8 0x080005d8 0x00000074 Code RO 186 .text.GPIO_Init stm32f0xx_gpio.o - 0x0800064c 0x0800064c 0x00000010 Code RO 188 .text.GPIO_StructInit stm32f0xx_gpio.o - 0x0800065c 0x0800065c 0x0000000c Code RO 204 .text.GPIO_WriteBit stm32f0xx_gpio.o - 0x08000668 0x08000668 0x00000044 Code RO 2 .text.Key_Init key.o - 0x080006ac 0x080006ac 0x0000003c Code RO 14 .text.Led_Init led.o - 0x080006e8 0x080006e8 0x0000001c Code RO 281 .text.RCC_AHBPeriphClockCmd stm32f0xx_rcc.o - 0x08000704 0x08000704 0x0000001c Code RO 283 .text.RCC_APB2PeriphClockCmd stm32f0xx_rcc.o - 0x08000720 0x08000720 0x00000020 Code RO 77 .text.SysTick_Handler systick.o - 0x08000740 0x08000740 0x000000e4 Code RO 319 .text.SystemInit system_stm32f0xx.o - 0x08000824 0x08000824 0x00000050 Code RO 347 .text.TaskCounter taskcounter.o - 0x08000874 0x08000874 0x00000024 Code RO 357 .text.TaskKey taskkey.o - 0x08000898 0x08000898 0x00000028 Code RO 365 .text.TaskLed taskled.o - 0x080008c0 0x080008c0 0x00000164 Code RO 373 .text.TaskMandelbrot taskmandelbrot.o - 0x08000a24 0x08000a24 0x00000028 Code RO 382 .text.TaskPoti taskpoti.o - 0x08000a4c 0x08000a4c 0x00000028 Code RO 390 .text.TaskWatch taskwatch.o - 0x08000a74 0x08000a74 0x00000098 Code RO 35 .text.Tft_ClearScreen tftdisplay.o - 0x08000b0c 0x08000b0c 0x00000128 Code RO 47 .text.Tft_DrawChar tftdisplay.o - 0x08000c34 0x08000c34 0x00000060 Code RO 41 .text.Tft_DrawPixel tftdisplay.o - 0x08000c94 0x08000c94 0x00000054 Code RO 49 .text.Tft_DrawString tftdisplay.o - 0x08000ce8 0x08000ce8 0x000000b0 Code RO 29 .text.Tft_Init tftdisplay.o - 0x08000d98 0x08000d98 0x00000034 Code RO 39 .text.Tft_SetFont tftdisplay.o - 0x08000dcc 0x08000dcc 0x0000015c Code RO 37 .text.Tft_SetWindow tftdisplay.o - 0x08000f28 0x08000f28 0x00000044 Code RO 79 .text.Tick_InitSysTick systick.o - 0x08000f6c 0x08000f6c 0x0000002e Code RO 92 .text.__aeabi_assert main_1.o - 0x08000f9a 0x08000f9a 0x00000002 PAD - 0x08000f9c 0x08000f9c 0x00000060 Code RO 90 .text.main main_1.o - 0x08000ffc 0x08000ffc 0x00000038 Code RO 452 i.__0snprintf$1 mc_p.l(printf1.o) - 0x08001034 0x08001034 0x0000002e Code RO 713 i.__ARM_clz mf_p.l(depilogue.o) - 0x08001062 0x08001062 0x0000000e Code RO 729 i.__scatterload_copy mc_p.l(handlers.o) - 0x08001070 0x08001070 0x00000002 Code RO 730 i.__scatterload_null mc_p.l(handlers.o) - 0x08001072 0x08001072 0x0000000e Code RO 731 i.__scatterload_zeroinit mc_p.l(handlers.o) - 0x08001080 0x08001080 0x00000150 Code RO 458 i._printf_core mc_p.l(printf1.o) - 0x080011d0 0x080011d0 0x00000016 Code RO 459 i._snputc mc_p.l(printf1.o) - 0x080011e6 0x080011e6 0x00001500 Data RO 340 .rodata.Bitmaps_16x24 tftfont_16x24.o - 0x080026e6 0x080026e6 0x00000002 PAD - 0x080026e8 0x080026e8 0x00000010 Data RO 341 .rodata.TftFont_16x24 tftfont_16x24.o - 0x080026f8 0x080026f8 0x00000015 Data RO 54 .rodata.str1.1 tftdisplay.o - 0x0800270d 0x0800270d 0x00000003 PAD - 0x08002710 0x08002710 0x00000020 Data RO 728 Region$$Table anon$$obj.o + 0x080004b0 0x080004b0 0x00000030 Code RO 763 .text mc_p.l(init.o) + 0x080004e0 0x080004e0 0x00000022 Code RO 766 .text mc_p.l(llushr.o) + 0x08000502 0x08000502 0x00000012 Code RO 130 .text.ADC_Cmd stm32f0xx_adc.o + 0x08000514 0x08000514 0x00000006 Code RO 168 .text.ADC_GetConversionValue stm32f0xx_adc.o + 0x0800051a 0x0800051a 0x00000018 Code RO 176 .text.ADC_GetFlagStatus stm32f0xx_adc.o + 0x08000532 0x08000532 0x00000002 PAD + 0x08000534 0x08000534 0x00000028 Code RO 126 .text.ADC_Init stm32f0xx_adc.o + 0x0800055c 0x0800055c 0x0000000a Code RO 166 .text.ADC_StartOfConversion stm32f0xx_adc.o + 0x08000566 0x08000566 0x00000002 PAD + 0x08000568 0x08000568 0x00000068 Code RO 69 .text.Adc_GetValue adc.o + 0x080005d0 0x080005d0 0x00000048 Code RO 65 .text.Adc_Init adc.o + 0x08000618 0x08000618 0x00000030 Code RO 110 .text.Debug_Init debug.o + 0x08000648 0x08000648 0x00000010 Code RO 112 .text.Debug_Set debug.o + 0x08000658 0x08000658 0x00000014 Code RO 114 .text.Debug_Unset debug.o + 0x0800066c 0x0800066c 0x00000074 Code RO 194 .text.GPIO_Init stm32f0xx_gpio.o + 0x080006e0 0x080006e0 0x0000000a Code RO 200 .text.GPIO_ReadInputDataBit stm32f0xx_gpio.o + 0x080006ea 0x080006ea 0x00000002 PAD + 0x080006ec 0x080006ec 0x00000010 Code RO 196 .text.GPIO_StructInit stm32f0xx_gpio.o + 0x080006fc 0x080006fc 0x0000000c Code RO 212 .text.GPIO_WriteBit stm32f0xx_gpio.o + 0x08000708 0x08000708 0x0000002c Code RO 4 .text.Key_GetState key.o + 0x08000734 0x08000734 0x00000044 Code RO 2 .text.Key_Init key.o + 0x08000778 0x08000778 0x0000003c Code RO 14 .text.Led_Init led.o + 0x080007b4 0x080007b4 0x00000020 Code RO 18 .text.Led_TurnOff led.o + 0x080007d4 0x080007d4 0x00000024 Code RO 16 .text.Led_TurnOn led.o + 0x080007f8 0x080007f8 0x0000001c Code RO 289 .text.RCC_AHBPeriphClockCmd stm32f0xx_rcc.o + 0x08000814 0x08000814 0x0000001c Code RO 291 .text.RCC_APB2PeriphClockCmd stm32f0xx_rcc.o + 0x08000830 0x08000830 0x000000a0 Code RO 96 .text.Superloop main_1.o + 0x080008d0 0x080008d0 0x00000020 Code RO 79 .text.SysTick_Handler systick.o + 0x080008f0 0x080008f0 0x000000e4 Code RO 327 .text.SystemInit system_stm32f0xx.o + 0x080009d4 0x080009d4 0x00000050 Code RO 355 .text.TaskCounter taskcounter.o + 0x08000a24 0x08000a24 0x00000174 Code RO 366 .text.TaskKey taskkey.o + 0x08000b98 0x08000b98 0x00000080 Code RO 390 .text.TaskLed taskled.o + 0x08000c18 0x08000c18 0x000001f4 Code RO 402 .text.TaskMandelbrot taskmandelbrot.o + 0x08000e0c 0x08000e0c 0x0000006c Code RO 416 .text.TaskPoti taskpoti.o + 0x08000e78 0x08000e78 0x00000094 Code RO 428 .text.TaskWatch taskwatch.o + 0x08000f0c 0x08000f0c 0x00000070 Code RO 47 .text.Tft_ClearArea tftdisplay.o + 0x08000f7c 0x08000f7c 0x00000098 Code RO 35 .text.Tft_ClearScreen tftdisplay.o + 0x08001014 0x08001014 0x00000128 Code RO 49 .text.Tft_DrawChar tftdisplay.o + 0x0800113c 0x0800113c 0x0000005c Code RO 41 .text.Tft_DrawPixel tftdisplay.o + 0x08001198 0x08001198 0x00000054 Code RO 51 .text.Tft_DrawString tftdisplay.o + 0x080011ec 0x080011ec 0x000000b0 Code RO 29 .text.Tft_Init tftdisplay.o + 0x0800129c 0x0800129c 0x00000034 Code RO 39 .text.Tft_SetFont tftdisplay.o + 0x080012d0 0x080012d0 0x0000000c Code RO 31 .text.Tft_SetForegroundColourRgb16 tftdisplay.o + 0x080012dc 0x080012dc 0x0000015c Code RO 37 .text.Tft_SetWindow tftdisplay.o + 0x08001438 0x08001438 0x0000000c Code RO 83 .text.Tick_GetMs systick.o + 0x08001444 0x08001444 0x00000044 Code RO 81 .text.Tick_InitSysTick systick.o + 0x08001488 0x08001488 0x0000002e Code RO 98 .text.__aeabi_assert main_1.o + 0x080014b6 0x080014b6 0x00000002 PAD + 0x080014b8 0x080014b8 0x00000020 Code RO 94 .text.main main_1.o + 0x080014d8 0x080014d8 0x00000038 Code RO 604 i.__0snprintf$6 mc_p.l(printf6.o) + 0x08001510 0x08001510 0x0000002e Code RO 755 i.__ARM_clz mf_p.l(depilogue.o) + 0x0800153e 0x0800153e 0x0000000e Code RO 771 i.__scatterload_copy mc_p.l(handlers.o) + 0x0800154c 0x0800154c 0x00000002 Code RO 772 i.__scatterload_null mc_p.l(handlers.o) + 0x0800154e 0x0800154e 0x0000000e Code RO 773 i.__scatterload_zeroinit mc_p.l(handlers.o) + 0x0800155c 0x0800155c 0x00000304 Code RO 610 i._printf_core mc_p.l(printf6.o) + 0x08001860 0x08001860 0x00000020 Code RO 611 i._printf_post_padding mc_p.l(printf6.o) + 0x08001880 0x08001880 0x0000002c Code RO 612 i._printf_pre_padding mc_p.l(printf6.o) + 0x080018ac 0x080018ac 0x00000016 Code RO 613 i._snputc mc_p.l(printf6.o) + 0x080018c2 0x080018c2 0x0000000c Data RO 20 .rodata..Lswitch.table.Led_TurnOff led.o + 0x080018ce 0x080018ce 0x00001500 Data RO 348 .rodata.Bitmaps_16x24 tftfont_16x24.o + 0x08002dce 0x08002dce 0x00000002 PAD + 0x08002dd0 0x08002dd0 0x00000010 Data RO 349 .rodata.TftFont_16x24 tftfont_16x24.o + 0x08002de0 0x08002de0 0x00000003 Data RO 395 .rodata.ledSeq taskled.o + 0x08002de3 0x08002de3 0x00000015 Data RO 56 .rodata.str1.1 tftdisplay.o + 0x08002df8 0x08002df8 0x00000007 Data RO 405 .rodata.str1.1 taskmandelbrot.o + 0x08002dff 0x08002dff 0x00000001 PAD + 0x08002e00 0x08002e00 0x00000020 Data RO 770 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002730, Size: 0x00000428, Max: 0x00004000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08002e20, Size: 0x00000898, Max: 0x00004000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000000 0x08002730 0x00000004 Data RW 323 .data.SystemCoreClock system_stm32f0xx.o - 0x20000004 0x08002734 0x00000002 Data RW 51 .data.Tft_Cfg.0 tftdisplay.o - 0x20000006 0x08002736 0x00000002 PAD - 0x20000008 - 0x00000004 Zero RW 349 .bss.TaskCounter.counter taskcounter.o - 0x2000000c - 0x00000002 Zero RW 52 .bss.Tft_Cfg.1 tftdisplay.o - 0x2000000e 0x08002736 0x00000002 PAD - 0x20000010 - 0x00000004 Zero RW 53 .bss.Tft_Cfg.2 tftdisplay.o - 0x20000014 - 0x00000004 Zero RW 81 .bss.msTicks systick.o - 0x20000018 - 0x0000000e Zero RW 350 .bss.tmpBuf taskcounter.o - 0x20000026 0x08002736 0x00000002 PAD - 0x20000028 - 0x00000400 Zero RW 309 STACK startup_stm32f072.o + 0x20000000 0x08002e20 0x00000004 Data RW 331 .data.SystemCoreClock system_stm32f0xx.o + 0x20000004 0x08002e24 0x00000002 Data RW 53 .data.Tft_Cfg.0 tftdisplay.o + 0x20000006 0x08002e26 0x00000002 PAD + 0x20000008 - 0x00000004 Zero RW 379 .bss.Key_GetDebounced.lastChange.0 taskkey.o + 0x2000000c - 0x00000004 Zero RW 380 .bss.Key_GetDebounced.lastChange.1 taskkey.o + 0x20000010 - 0x00000004 Zero RW 381 .bss.Key_GetDebounced.lastChange.2 taskkey.o + 0x20000014 - 0x00000001 Zero RW 373 .bss.Key_GetDebounced.lastRaw.0 taskkey.o + 0x20000015 - 0x00000001 Zero RW 374 .bss.Key_GetDebounced.lastRaw.1 taskkey.o + 0x20000016 - 0x00000001 Zero RW 375 .bss.Key_GetDebounced.lastRaw.2 taskkey.o + 0x20000017 - 0x00000001 Zero RW 376 .bss.Key_GetDebounced.stable.0 taskkey.o + 0x20000018 - 0x00000001 Zero RW 377 .bss.Key_GetDebounced.stable.1 taskkey.o + 0x20000019 - 0x00000001 Zero RW 378 .bss.Key_GetDebounced.stable.2 taskkey.o + 0x2000001a 0x08002e26 0x00000002 PAD + 0x2000001c - 0x00000004 Zero RW 357 .bss.TaskCounter.counter taskcounter.o + 0x20000020 - 0x00000001 Zero RW 358 .bss.TaskCounter.initDone taskcounter.o + 0x20000021 - 0x00000001 Zero RW 370 .bss.TaskKey.initDone taskkey.o + 0x20000022 - 0x00000001 Zero RW 371 .bss.TaskKey.lastState taskkey.o + 0x20000023 - 0x0000000e Zero RW 368 .bss.TaskKey.tmpBuf taskkey.o + 0x20000031 - 0x00000001 Zero RW 369 .bss.TaskKey.userPrev taskkey.o + 0x20000032 - 0x00000001 Zero RW 393 .bss.TaskLed.idx taskled.o + 0x20000033 - 0x00000001 Zero RW 392 .bss.TaskLed.initDone taskled.o + 0x20000034 - 0x00000004 Zero RW 394 .bss.TaskLed.lastSwitch taskled.o + 0x20000038 - 0x00000001 Zero RW 404 .bss.TaskMandelbrot.initDone taskmandelbrot.o + 0x20000039 - 0x00000001 Zero RW 418 .bss.TaskPoti.initDone taskpoti.o + 0x2000003a 0x08002e26 0x00000002 PAD + 0x2000003c - 0x00000004 Zero RW 419 .bss.TaskPoti.lastValue taskpoti.o + 0x20000040 - 0x00000001 Zero RW 431 .bss.TaskWatch.initDone taskwatch.o + 0x20000041 0x08002e26 0x00000003 PAD + 0x20000044 - 0x00000004 Zero RW 432 .bss.TaskWatch.lastSeconds taskwatch.o + 0x20000048 - 0x0000000e Zero RW 430 .bss.TaskWatch.tmpBuf taskwatch.o + 0x20000056 0x08002e26 0x00000002 PAD + 0x20000058 - 0x00000002 Zero RW 54 .bss.Tft_Cfg.1 tftdisplay.o + 0x2000005a 0x08002e26 0x00000002 PAD + 0x2000005c - 0x00000004 Zero RW 55 .bss.Tft_Cfg.2 tftdisplay.o + 0x20000060 - 0x00000001 Zero RW 406 .bss.clearing taskmandelbrot.o + 0x20000061 0x08002e26 0x00000003 PAD + 0x20000064 - 0x00000004 Zero RW 407 .bss.curX taskmandelbrot.o + 0x20000068 - 0x00000004 Zero RW 408 .bss.curY taskmandelbrot.o + 0x2000006c - 0x00000002 Zero RW 372 .bss.current_color taskkey.o + 0x2000006e 0x08002e26 0x00000002 PAD + 0x20000070 - 0x00000004 Zero RW 85 .bss.msTicks systick.o + 0x20000074 0x08002e26 0x00000004 PAD + 0x20000078 - 0x00000400 Zero RW 100 .bss.processStack main_1.o + 0x20000478 - 0x0000000e Zero RW 359 .bss.tmpBuf taskcounter.o + 0x20000486 - 0x0000000e Zero RW 420 .bss.tmpBuf taskpoti.o + 0x20000494 0x08002e26 0x00000004 PAD + 0x20000498 - 0x00000400 Zero RW 317 STACK startup_stm32f072.o ============================================================================== @@ -1235,30 +1451,30 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name - 72 4 0 0 0 2542 adc.o + 176 16 0 0 0 2542 adc.o 84 12 0 0 0 2230 debug.o - 68 4 0 0 0 2548 key.o - 60 4 0 0 0 2866 led.o - 142 4 0 0 0 1155 main_1.o + 112 4 0 0 0 2548 key.o + 128 12 12 0 0 2866 led.o + 238 8 0 0 1024 1719 main_1.o 28 8 192 0 1024 624 startup_stm32f072.o - 58 4 0 0 0 7487 stm32f0xx_adc.o - 144 4 0 0 0 4581 stm32f0xx_gpio.o + 98 4 0 0 0 7487 stm32f0xx_adc.o + 154 4 0 0 0 4581 stm32f0xx_gpio.o 56 8 0 0 0 10733 stm32f0xx_rcc.o 228 16 0 4 0 2208 system_stm32f0xx.o - 100 20 0 0 4 2727 systick.o - 80 20 0 0 18 876 taskcounter.o - 36 8 0 0 0 666 taskkey.o - 40 8 0 0 0 668 taskled.o - 356 32 0 0 0 1869 taskmandelbrot.o - 40 8 0 0 0 671 taskpoti.o - 40 8 0 0 0 674 taskwatch.o - 1204 180 21 2 6 11256 tftdisplay.o + 112 24 0 0 4 2836 systick.o + 80 24 0 0 19 811 taskcounter.o + 372 76 0 0 37 2218 taskkey.o + 128 24 3 0 6 1127 taskled.o + 500 40 7 0 10 2107 taskmandelbrot.o + 108 24 0 0 19 880 taskpoti.o + 148 36 0 0 19 914 taskwatch.o + 1324 180 21 2 6 12103 tftdisplay.o 0 0 5392 0 0 765 tftfont_16x24.o ---------------------------------------------------------------------- - 2838 352 5642 8 1056 57146 Object Totals + 4082 520 5662 8 2192 61299 Object Totals 0 0 32 0 0 0 (incl. Generated) - 2 0 5 2 4 0 (incl. Padding) + 8 0 3 2 24 0 (incl. Padding) ---------------------------------------------------------------------- @@ -1278,7 +1494,7 @@ Image component sizes 32 0 0 0 0 68 llshl.o 38 0 0 0 0 68 llsshr.o 34 0 0 0 0 68 llushr.o - 414 10 0 0 0 236 printf1.o + 926 10 0 0 0 392 printf6.o 62 0 0 0 0 72 uidiv_div0.o 356 4 0 0 0 140 dadd.o 44 0 0 0 0 68 dcmpgt.o @@ -1287,18 +1503,18 @@ Image component sizes 208 6 0 0 0 88 dmul.o ---------------------------------------------------------------------- - 1552 42 0 0 0 1160 Library Totals + 2064 42 0 0 0 1316 Library Totals 2 0 0 0 0 0 (incl. Padding) ---------------------------------------------------------------------- Code (inc. data) RO Data RW Data ZI Data Debug Library Name - 678 28 0 0 0 580 mc_p.l + 1190 28 0 0 0 736 mc_p.l 872 14 0 0 0 580 mf_p.l ---------------------------------------------------------------------- - 1552 42 0 0 0 1160 Library Totals + 2064 42 0 0 0 1316 Library Totals ---------------------------------------------------------------------- @@ -1307,15 +1523,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 4390 394 5642 8 1056 57610 Grand Totals - 4390 394 5642 8 1056 57610 ELF Image Totals - 4390 394 5642 8 0 0 ROM Totals + 6146 562 5662 8 2192 61831 Grand Totals + 6146 562 5662 8 2192 61831 ELF Image Totals + 6146 562 5662 8 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 10032 ( 9.80kB) - Total RW Size (RW Data + ZI Data) 1064 ( 1.04kB) - Total ROM Size (Code + RO Data + RW Data) 10040 ( 9.80kB) + Total RO Size (Code + RO Data) 11808 ( 11.53kB) + Total RW Size (RW Data + ZI Data) 2200 ( 2.15kB) + Total ROM Size (Code + RO Data + RW Data) 11816 ( 11.54kB) ============================================================================== diff --git a/UE/u01/output/Apus.axf b/UE/u01/output/Apus.axf index 21eb2b474f55d85b284741828a47ed7b89d3cd38..7388bcc74c8d1ed9567da50cb26d81645df0d804 100644 GIT binary patch literal 88860 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%0A;?7D7o)WlnTp|Ht`XvZNRtb3rt;z(uow)wx=1| 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 delta 29585 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: *** Using Compiler 'V6.23', folder: 'C:\Users\gaems\AppData\Local\Keil_v5\ARM\ARMCLANG\Bin' -Rebuild target 'Apus' +Build target 'Apus' Note: source file '.\src\main.c' - object file renamed from '.\output\main.o' to '.\output\main_1.o'. -compiling Key.c... -compiling Led.c... -compiling TftDisplay.c... -compiling Adc.c... -compiling systick.c... compiling main.c... -compiling Debug.c... -compiling stm32f0xx_adc.c... -compiling stm32f0xx_gpio.c... -compiling stm32f0xx_rcc.c... -assembling startup_stm32f072.s... -compiling system_stm32f0xx.c... -compiling TftFont_6x8.c... -compiling TftFont_16x24.c... -compiling TaskCounter.c... -compiling TaskKey.c... -compiling TaskLed.c... -compiling TaskMandelbrot.c... -compiling TaskPoti.c... -compiling TaskWatch.c... +src/main.c(16): warning: In file included from... +./stm32f0-stdperiph\stm32f0xx_gpio.h(38): warning: In file included from... +./src/Devices\stm32f0xx.h(357): warning: In file included from... +./src/Devices\core_cm0.h(149): warning: In file included from... +./src/Devices\core_cmFunc.h(429): warning: inline asm clobber list contains reserved registers: SP [-Winline-asm] + 429 | __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp"); + | ^ +./src/Devices\core_cmFunc.h(429): note: Reserved registers on the clobber list may not be preserved across the asm statement, and clobbering them may lead to undefined behaviour. +1 warning generated. linking... -Program Size: Code=4390 RO-data=5642 RW-data=8 ZI-data=1056 -".\output\Apus.axf" - 0 Error(s), 0 Warning(s). +Program Size: Code=6146 RO-data=5662 RW-data=8 ZI-data=2192 +".\output\Apus.axf" - 0 Error(s), 1 Warning(s).

Software Packages used:

@@ -66,7 +56,7 @@ Package Vendor: Keil C:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include

Collection of Component Files used:

-Build Time Elapsed: 00:00:04 +Build Time Elapsed: 00:00:01 diff --git a/UE/u01/output/Apus.htm b/UE/u01/output/Apus.htm index ee52c60..b4759d4 100644 --- a/UE/u01/output/Apus.htm +++ b/UE/u01/output/Apus.htm @@ -3,11 +3,11 @@ Static Call Graph - [.\output\Apus.axf]

Static Call Graph for image .\output\Apus.axf


-

#<CALLGRAPH># ARM Linker, 6230001: Last Updated: Thu Oct 8 12:54:30 2026 +

#<CALLGRAPH># ARM Linker, 6230001: Last Updated: Tue Oct 13 19:36:04 2026

-

Maximum Stack Usage = 380 bytes + Unknown(Cycles, Untraceable Function Pointers)

+

Maximum Stack Usage = 388 bytes + Unknown(Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

-main ⇒ TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert +main ⇒ Superloop ⇒ TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert

Mutually Recursive functions @@ -61,7 +61,7 @@ Function Pointers
  • USB_IRQHandler from startup_stm32f072.o(.text) referenced from startup_stm32f072.o(RESET)
  • WWDG_IRQHandler from startup_stm32f072.o(.text) referenced from startup_stm32f072.o(RESET)
  • __main from entry.o(.ARM.Collect$$$$00000000) referenced from startup_stm32f072.o(.text) -
  • _snputc from printf1.o(i._snputc) referenced from printf1.o(i.__0snprintf$1) +
  • _snputc from printf6.o(i._snputc) referenced from printf6.o(i.__0snprintf$6)
  • main from main_1.o(.text.main) referenced from entry9a.o(.ARM.Collect$$$$0000000B)

    @@ -71,7 +71,7 @@ Global Symbols

    __main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
    [Address Reference Count : 1]

    • startup_stm32f072.o(.text)
    -

    _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) +

    _main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))

    _main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))

    [Calls]

    • >>   __scatterload @@ -81,15 +81,15 @@ Global Symbols

      [Called By]
      • >>   __scatterload
      -

      _main_clock (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) +

      _main_clock (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) -

      _main_cpp_init (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) +

      _main_cpp_init (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) -

      _main_init (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) +

      _main_init (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) -

      __rt_final_cpp (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D)) +

      __rt_final_cpp (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D)) -

      __rt_final_exit (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F)) +

      __rt_final_exit (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))

      Reset_Handler (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f072.o(.text))
      [Address Reference Count : 1]

      • startup_stm32f072.o(RESET) @@ -231,7 +231,7 @@ Global Symbols
      • >>   _double_epilogue

      [Called By]
      • >>   __aeabi_dsub -
      • >>   TaskMandelbrot +
      • >>   TaskMandelbrot
      • >>   __aeabi_drsub
      @@ -240,7 +240,7 @@ Global Symbols

    [Calls]
    • >>   __aeabi_dadd
    -
    [Called By]
    • >>   TaskMandelbrot +
      [Called By]
      • >>   TaskMandelbrot

      __aeabi_drsub (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text), UNUSED) @@ -252,13 +252,13 @@ Global Symbols


    [Calls]
    • >>   _double_epilogue
    -
    [Called By]