feat(u01): implement assignment
This commit is contained in:
parent
5c84ba1823
commit
f2e3d5422c
35 changed files with 1828 additions and 779 deletions
File diff suppressed because one or more lines are too long
|
|
@ -77,7 +77,7 @@
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<IsCurrentTarget>1</IsCurrentTarget>
|
<IsCurrentTarget>1</IsCurrentTarget>
|
||||||
</OPTFL>
|
</OPTFL>
|
||||||
<CpuCode>0</CpuCode>
|
<CpuCode>18</CpuCode>
|
||||||
<DebugOpt>
|
<DebugOpt>
|
||||||
<uSim>0</uSim>
|
<uSim>0</uSim>
|
||||||
<uTrg>1</uTrg>
|
<uTrg>1</uTrg>
|
||||||
|
|
@ -149,6 +149,22 @@
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
<Breakpoint/>
|
<Breakpoint/>
|
||||||
|
<MemoryWindow1>
|
||||||
|
<Mm>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<SubType>256</SubType>
|
||||||
|
<ItemText>processStack</ItemText>
|
||||||
|
<AccSizeX>0</AccSizeX>
|
||||||
|
</Mm>
|
||||||
|
</MemoryWindow1>
|
||||||
|
<MemoryWindow2>
|
||||||
|
<Mm>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<SubType>0</SubType>
|
||||||
|
<ItemText>0x20000440</ItemText>
|
||||||
|
<AccSizeX>0</AccSizeX>
|
||||||
|
</Mm>
|
||||||
|
</MemoryWindow2>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
</Tracepoint>
|
</Tracepoint>
|
||||||
|
|
@ -425,7 +441,7 @@
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Tasks</GroupName>
|
<GroupName>Tasks</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
|
|
||||||
28
UE/u01/CLAUDE.md
Normal file
28
UE/u01/CLAUDE.md
Normal file
|
|
@ -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 `<stdbool.h>`. `assert()` failures land in `__aeabi_assert` in `main.c` (infinite loop for inspection in the debugger).
|
||||||
BIN
UE/u01/doc/psp.PNG
Normal file
BIN
UE/u01/doc/psp.PNG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 125 KiB |
448
UE/u01/doc/u01_dokumentation.typ
Normal file
448
UE/u01/doc/u01_dokumentation.typ
Normal file
|
|
@ -0,0 +1,448 @@
|
||||||
|
// Dokumentation Übung 1 RTO
|
||||||
|
// Kompilieren: typst compile u01_dokumentation.typ (im Ordner doc/)
|
||||||
|
|
||||||
|
#let todo(body) = box(
|
||||||
|
fill: rgb("#ffe0e0"), inset: (x: 3pt, y: 2pt), radius: 2pt,
|
||||||
|
)[#text(fill: rgb("#b00000"))[*TODO:* #body]]
|
||||||
|
|
||||||
|
#let fehlt(name) = rect(
|
||||||
|
width: 100%, height: 4.5cm,
|
||||||
|
stroke: (paint: rgb("#b00000"), thickness: 0.8pt, dash: "dashed"),
|
||||||
|
)[#align(center + horizon)[#text(fill: rgb("#b00000"))[Screenshot fehlt: #raw(name)]]]
|
||||||
|
|
||||||
|
#set document(title: "Übung 1 RTO – Dokumentation")
|
||||||
|
#set page(paper: "a4", margin: 2.2cm, numbering: "1")
|
||||||
|
#set text(lang: "de", size: 11pt)
|
||||||
|
#set par(justify: true)
|
||||||
|
#set heading(numbering: "1.1")
|
||||||
|
#show raw.where(block: true): set text(size: 8.5pt)
|
||||||
|
#show raw.where(block: true): block.with(fill: luma(245), inset: 8pt, radius: 3pt, width: 100%)
|
||||||
|
#show figure.where(kind: table): set figure.caption(position: top)
|
||||||
|
#set table(stroke: 0.5pt + luma(160), inset: 5pt, fill: (x, y) => 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],
|
||||||
|
) <tab-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],
|
||||||
|
) <tab-a>
|
||||||
|
|
||||||
|
#grid(
|
||||||
|
columns: 1,
|
||||||
|
gutter: 10pt,
|
||||||
|
[#figure(image("img/counter.png", width: 100%), caption: [TaskCounter: 2,864 ms]) <fig-a-counter>],
|
||||||
|
[#figure(image("img/key.png", width: 100%), caption: [TaskKey: 1,887 ms]) <fig-a-key>],
|
||||||
|
[#figure(image("img/led.png", width: 100%), caption: [TaskLed: 1,889 ms]) <fig-a-led>],
|
||||||
|
[#figure(image("img/watch.png", width: 100%), caption: [TaskWatch: 2,832 ms]) <fig-a-watch>],
|
||||||
|
[#figure(image("img/poti.png", width: 100%), caption: [TaskPoti: 2,362 ms]) <fig-a-poti>],
|
||||||
|
[#figure(image("img/mandelbrot.png", width: 100%), caption: [TaskMandelbrot: 16,164 s]) <fig-a-mandel>],
|
||||||
|
)
|
||||||
|
|
||||||
|
#figure(image("img/systick.png", width: 75%), caption: [SysTick-Interrupt: Pulsbreite 0,956 µs]) <fig-systick>
|
||||||
|
|
||||||
|
*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 <sec-overhead>
|
||||||
|
|
||||||
|
*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]) <fig-overhead>
|
||||||
|
|
||||||
|
$ 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],
|
||||||
|
) <tab-loop>
|
||||||
|
|
||||||
|
== Messergebnisse im Endstand
|
||||||
|
|
||||||
|
#figure(image("img/task_runtimes.png", width: 100%), caption: [Laufzeiten aller Tasks im Endstand]) <fig-b>
|
||||||
|
|
||||||
|
#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)],
|
||||||
|
) <tab-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],
|
||||||
|
) <tab-req>
|
||||||
|
|
||||||
|
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)]) <fig-psp-alt>
|
||||||
|
|
||||||
|
== 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],
|
||||||
|
) <tab-ram>
|
||||||
|
|
||||||
|
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],
|
||||||
|
) <tab-frame>],
|
||||||
|
[#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],
|
||||||
|
) <tab-excret>],
|
||||||
|
)
|
||||||
|
|
||||||
|
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]) <fig-psp>
|
||||||
|
|
||||||
|
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],
|
||||||
|
) <tab-dbg>
|
||||||
|
|
||||||
|
== 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.
|
||||||
|
|
@ -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(.text.Tft_SetWindow) for Tft_SetWindow
|
||||||
tftdisplay.o(.text.Tft_DrawVLine) refers to tftdisplay.o(.bss.Tft_Cfg.1) for [Anonymous Symbol]
|
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(.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(.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(.bss.Tft_Cfg.2) for [Anonymous Symbol]
|
||||||
tftdisplay.o(.text.Tft_DrawChar) refers to tftdisplay.o(.data.Tft_Cfg.0) 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 uidiv_div0.o(.text) for __aeabi_uidiv
|
||||||
systick.o(.text.Tick_InitSysTick) refers to system_stm32f0xx.o(.data.SystemCoreClock) for SystemCoreClock
|
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]
|
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
|
systick.o(.text.Tick_GetMs) refers to systick.o(.bss.msTicks) for [Anonymous Symbol]
|
||||||
main_1.o(.text.main) refers to led.o(.text.Led_Init) for Led_Init
|
systick.o(.ARM.exidx.text.Tick_GetMs) refers to systick.o(.text.Tick_GetMs) for [Anonymous Symbol]
|
||||||
main_1.o(.text.main) refers to tftdisplay.o(.text.Tft_Init) for Tft_Init
|
main_1.o(.text.main) refers to main_1.o(.text.Superloop) for Superloop
|
||||||
main_1.o(.text.main) refers to tftdisplay.o(.text.Tft_SetFont) for Tft_SetFont
|
main_1.o(.text.main) refers to main_1.o(.bss.processStack) for [Anonymous Symbol]
|
||||||
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
|
|
||||||
main_1.o(.ARM.exidx.text.main) refers to main_1.o(.text.main) 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]
|
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_rcc.o(.text.RCC_AHBPeriphClockCmd) for RCC_AHBPeriphClockCmd
|
||||||
debug.o(.text.Debug_Init) refers to stm32f0xx_gpio.o(.text.GPIO_StructInit) for GPIO_StructInit
|
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]
|
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_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]
|
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 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.TaskCounter.counter) for [Anonymous Symbol]
|
||||||
taskcounter.o(.text.TaskCounter) refers to taskcounter.o(.bss.tmpBuf) 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]
|
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 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]
|
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 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]
|
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_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 dfltui.o(.text) for __aeabi_ui2d
|
||||||
taskmandelbrot.o(.text.TaskMandelbrot) refers to dmul.o(.text) for __aeabi_dmul
|
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 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 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]
|
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 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]
|
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 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]
|
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 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
|
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(.text), (0 bytes).
|
||||||
Removing key.o(.ARM.exidx.text.Key_Init), (8 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 key.o(.ARM.exidx.text.Key_GetState), (8 bytes).
|
||||||
Removing led.o(.text), (0 bytes).
|
Removing led.o(.text), (0 bytes).
|
||||||
Removing led.o(.ARM.exidx.text.Led_Init), (8 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(.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(.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(.text), (0 bytes).
|
||||||
Removing tftdisplay.o(.ARM.exidx.text.Tft_Init), (8 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(.ARM.exidx.text.Tft_SetForegroundColourRgb16), (8 bytes).
|
||||||
Removing tftdisplay.o(.text.Tft_SetBackgroundColourRgb16), (12 bytes).
|
Removing tftdisplay.o(.text.Tft_SetBackgroundColourRgb16), (12 bytes).
|
||||||
Removing tftdisplay.o(.ARM.exidx.text.Tft_SetBackgroundColourRgb16), (8 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(.ARM.exidx.text.Tft_DrawHLine), (8 bytes).
|
||||||
Removing tftdisplay.o(.text.Tft_DrawVLine), (124 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_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_DrawChar), (8 bytes).
|
||||||
Removing tftdisplay.o(.ARM.exidx.text.Tft_DrawString), (8 bytes).
|
Removing tftdisplay.o(.ARM.exidx.text.Tft_DrawString), (8 bytes).
|
||||||
Removing adc.o(.text), (0 bytes).
|
Removing adc.o(.text), (0 bytes).
|
||||||
Removing adc.o(.ARM.exidx.text.Adc_Init), (8 bytes).
|
Removing adc.o(.ARM.exidx.text.Adc_Init), (8 bytes).
|
||||||
Removing adc.o(.text.Adc_SetChannel), (28 bytes).
|
Removing adc.o(.text.Adc_SetChannel), (28 bytes).
|
||||||
Removing adc.o(.ARM.exidx.text.Adc_SetChannel), (8 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 adc.o(.ARM.exidx.text.Adc_GetValue), (8 bytes).
|
||||||
Removing systick.o(.text), (0 bytes).
|
Removing systick.o(.text), (0 bytes).
|
||||||
Removing systick.o(.ARM.exidx.text.SysTick_Handler), (8 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_InitSysTick), (8 bytes).
|
||||||
|
Removing systick.o(.ARM.exidx.text.Tick_GetMs), (8 bytes).
|
||||||
Removing main_1.o(.text), (0 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.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.exidx.text.__aeabi_assert), (8 bytes).
|
||||||
Removing main_1.o(.ARM.use_no_argv), (4 bytes).
|
Removing main_1.o(.ARM.use_no_argv), (4 bytes).
|
||||||
Removing debug.o(.text), (0 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(.ARM.exidx.text.ADC_GetCalibrationFactor), (8 bytes).
|
||||||
Removing stm32f0xx_adc.o(.text.ADC_StopOfConversion), (10 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(.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(.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(.ARM.exidx.text.ADC_GetConversionValue), (8 bytes).
|
||||||
Removing stm32f0xx_adc.o(.text.ADC_DMACmd), (16 bytes).
|
Removing stm32f0xx_adc.o(.text.ADC_DMACmd), (16 bytes).
|
||||||
Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_DMACmd), (8 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(.ARM.exidx.text.ADC_DMARequestModeConfig), (8 bytes).
|
||||||
Removing stm32f0xx_adc.o(.text.ADC_ITConfig), (20 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(.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(.ARM.exidx.text.ADC_GetFlagStatus), (8 bytes).
|
||||||
Removing stm32f0xx_adc.o(.text.ADC_ClearFlag), (4 bytes).
|
Removing stm32f0xx_adc.o(.text.ADC_ClearFlag), (4 bytes).
|
||||||
Removing stm32f0xx_adc.o(.ARM.exidx.text.ADC_ClearFlag), (8 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(.ARM.exidx.text.GPIO_StructInit), (8 bytes).
|
||||||
Removing stm32f0xx_gpio.o(.text.GPIO_PinLockConfig), (36 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(.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(.ARM.exidx.text.GPIO_ReadInputDataBit), (8 bytes).
|
||||||
Removing stm32f0xx_gpio.o(.text.GPIO_ReadInputData), (4 bytes).
|
Removing stm32f0xx_gpio.o(.text.GPIO_ReadInputData), (4 bytes).
|
||||||
Removing stm32f0xx_gpio.o(.ARM.exidx.text.GPIO_ReadInputData), (8 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 dfixul.o(.text), (64 bytes).
|
||||||
Removing cdrcmple.o(.text), (40 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 0x080004b0 Section 48 init.o(.text)
|
||||||
.text 0x080004e0 Section 0 llushr.o(.text)
|
.text 0x080004e0 Section 0 llushr.o(.text)
|
||||||
[Anonymous Symbol] 0x08000502 Section 0 stm32f0xx_adc.o(.text.ADC_Cmd)
|
[Anonymous Symbol] 0x08000502 Section 0 stm32f0xx_adc.o(.text.ADC_Cmd)
|
||||||
[Anonymous Symbol] 0x08000514 Section 0 stm32f0xx_adc.o(.text.ADC_Init)
|
[Anonymous Symbol] 0x08000514 Section 0 stm32f0xx_adc.o(.text.ADC_GetConversionValue)
|
||||||
__arm_cp.1_0 0x08000538 Number 4 stm32f0xx_adc.o(.text.ADC_Init)
|
[Anonymous Symbol] 0x0800051a Section 0 stm32f0xx_adc.o(.text.ADC_GetFlagStatus)
|
||||||
[Anonymous Symbol] 0x0800053c Section 0 adc.o(.text.Adc_Init)
|
[Anonymous Symbol] 0x08000534 Section 0 stm32f0xx_adc.o(.text.ADC_Init)
|
||||||
__arm_cp.0_0 0x08000580 Number 4 adc.o(.text.Adc_Init)
|
__arm_cp.1_0 0x08000558 Number 4 stm32f0xx_adc.o(.text.ADC_Init)
|
||||||
[Anonymous Symbol] 0x08000584 Section 0 debug.o(.text.Debug_Init)
|
[Anonymous Symbol] 0x0800055c Section 0 stm32f0xx_adc.o(.text.ADC_StartOfConversion)
|
||||||
__arm_cp.0_0 0x080005ac Number 4 debug.o(.text.Debug_Init)
|
[Anonymous Symbol] 0x08000568 Section 0 adc.o(.text.Adc_GetValue)
|
||||||
__arm_cp.0_1 0x080005b0 Number 4 debug.o(.text.Debug_Init)
|
__arm_cp.2_1 0x080005c4 Number 4 adc.o(.text.Adc_GetValue)
|
||||||
[Anonymous Symbol] 0x080005b4 Section 0 debug.o(.text.Debug_Set)
|
__arm_cp.2_2 0x080005c8 Number 4 adc.o(.text.Adc_GetValue)
|
||||||
[Anonymous Symbol] 0x080005c4 Section 0 debug.o(.text.Debug_Unset)
|
__arm_cp.2_3 0x080005cc Number 4 adc.o(.text.Adc_GetValue)
|
||||||
__arm_cp.2_0 0x080005d4 Number 4 debug.o(.text.Debug_Unset)
|
[Anonymous Symbol] 0x080005d0 Section 0 adc.o(.text.Adc_Init)
|
||||||
[Anonymous Symbol] 0x080005d8 Section 0 stm32f0xx_gpio.o(.text.GPIO_Init)
|
__arm_cp.0_0 0x08000614 Number 4 adc.o(.text.Adc_Init)
|
||||||
[Anonymous Symbol] 0x0800064c Section 0 stm32f0xx_gpio.o(.text.GPIO_StructInit)
|
[Anonymous Symbol] 0x08000618 Section 0 debug.o(.text.Debug_Init)
|
||||||
__arm_cp.2_0 0x08000658 Number 4 stm32f0xx_gpio.o(.text.GPIO_StructInit)
|
__arm_cp.0_0 0x08000640 Number 4 debug.o(.text.Debug_Init)
|
||||||
[Anonymous Symbol] 0x0800065c Section 0 stm32f0xx_gpio.o(.text.GPIO_WriteBit)
|
__arm_cp.0_1 0x08000644 Number 4 debug.o(.text.Debug_Init)
|
||||||
[Anonymous Symbol] 0x08000668 Section 0 key.o(.text.Key_Init)
|
[Anonymous Symbol] 0x08000648 Section 0 debug.o(.text.Debug_Set)
|
||||||
__arm_cp.0_0 0x080006a8 Number 4 key.o(.text.Key_Init)
|
[Anonymous Symbol] 0x08000658 Section 0 debug.o(.text.Debug_Unset)
|
||||||
[Anonymous Symbol] 0x080006ac Section 0 led.o(.text.Led_Init)
|
__arm_cp.2_0 0x08000668 Number 4 debug.o(.text.Debug_Unset)
|
||||||
__arm_cp.0_0 0x080006e4 Number 4 led.o(.text.Led_Init)
|
[Anonymous Symbol] 0x0800066c Section 0 stm32f0xx_gpio.o(.text.GPIO_Init)
|
||||||
[Anonymous Symbol] 0x080006e8 Section 0 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd)
|
[Anonymous Symbol] 0x080006e0 Section 0 stm32f0xx_gpio.o(.text.GPIO_ReadInputDataBit)
|
||||||
__arm_cp.31_0 0x08000700 Number 4 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd)
|
[Anonymous Symbol] 0x080006ec Section 0 stm32f0xx_gpio.o(.text.GPIO_StructInit)
|
||||||
[Anonymous Symbol] 0x08000704 Section 0 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd)
|
__arm_cp.2_0 0x080006f8 Number 4 stm32f0xx_gpio.o(.text.GPIO_StructInit)
|
||||||
__arm_cp.32_0 0x0800071c Number 4 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd)
|
[Anonymous Symbol] 0x080006fc Section 0 stm32f0xx_gpio.o(.text.GPIO_WriteBit)
|
||||||
[Anonymous Symbol] 0x08000720 Section 0 systick.o(.text.SysTick_Handler)
|
[Anonymous Symbol] 0x08000708 Section 0 key.o(.text.Key_GetState)
|
||||||
__arm_cp.0_0 0x0800073c Number 4 systick.o(.text.SysTick_Handler)
|
[Anonymous Symbol] 0x08000734 Section 0 key.o(.text.Key_Init)
|
||||||
[Anonymous Symbol] 0x08000740 Section 0 system_stm32f0xx.o(.text.SystemInit)
|
__arm_cp.0_0 0x08000774 Number 4 key.o(.text.Key_Init)
|
||||||
__arm_cp.0_0 0x08000814 Number 4 system_stm32f0xx.o(.text.SystemInit)
|
[Anonymous Symbol] 0x08000778 Section 0 led.o(.text.Led_Init)
|
||||||
__arm_cp.0_1 0x08000818 Number 4 system_stm32f0xx.o(.text.SystemInit)
|
__arm_cp.0_0 0x080007b0 Number 4 led.o(.text.Led_Init)
|
||||||
__arm_cp.0_2 0x0800081c Number 4 system_stm32f0xx.o(.text.SystemInit)
|
[Anonymous Symbol] 0x080007b4 Section 0 led.o(.text.Led_TurnOff)
|
||||||
__arm_cp.0_3 0x08000820 Number 4 system_stm32f0xx.o(.text.SystemInit)
|
[Anonymous Symbol] 0x080007d4 Section 0 led.o(.text.Led_TurnOn)
|
||||||
[Anonymous Symbol] 0x08000824 Section 0 taskcounter.o(.text.TaskCounter)
|
__arm_cp.1_0 0x080007f0 Number 4 led.o(.text.Led_TurnOn)
|
||||||
__arm_cp.0_0 0x08000860 Number 4 taskcounter.o(.text.TaskCounter)
|
__arm_cp.1_1 0x080007f4 Number 4 led.o(.text.Led_TurnOn)
|
||||||
__arm_cp.0_1 0x08000864 Number 4 taskcounter.o(.text.TaskCounter)
|
[Anonymous Symbol] 0x080007f8 Section 0 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd)
|
||||||
[Anonymous Symbol] 0x08000874 Section 0 taskkey.o(.text.TaskKey)
|
__arm_cp.31_0 0x08000810 Number 4 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd)
|
||||||
[Anonymous Symbol] 0x08000898 Section 0 taskled.o(.text.TaskLed)
|
[Anonymous Symbol] 0x08000814 Section 0 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd)
|
||||||
[Anonymous Symbol] 0x080008c0 Section 0 taskmandelbrot.o(.text.TaskMandelbrot)
|
__arm_cp.32_0 0x0800082c Number 4 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd)
|
||||||
__arm_cp.0_1 0x08000a0c Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
Superloop 0x08000831 Thumb Code 156 main_1.o(.text.Superloop)
|
||||||
__arm_cp.0_2 0x08000a10 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
[Anonymous Symbol] 0x08000830 Section 0 main_1.o(.text.Superloop)
|
||||||
__arm_cp.0_3 0x08000a14 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
__arm_cp.1_0 0x080008cc Number 4 main_1.o(.text.Superloop)
|
||||||
__arm_cp.0_4 0x08000a18 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
[Anonymous Symbol] 0x080008d0 Section 0 systick.o(.text.SysTick_Handler)
|
||||||
__arm_cp.0_5 0x08000a1c Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
__arm_cp.0_0 0x080008ec Number 4 systick.o(.text.SysTick_Handler)
|
||||||
__arm_cp.0_6 0x08000a20 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
[Anonymous Symbol] 0x080008f0 Section 0 system_stm32f0xx.o(.text.SystemInit)
|
||||||
[Anonymous Symbol] 0x08000a24 Section 0 taskpoti.o(.text.TaskPoti)
|
__arm_cp.0_0 0x080009c4 Number 4 system_stm32f0xx.o(.text.SystemInit)
|
||||||
[Anonymous Symbol] 0x08000a4c Section 0 taskwatch.o(.text.TaskWatch)
|
__arm_cp.0_1 0x080009c8 Number 4 system_stm32f0xx.o(.text.SystemInit)
|
||||||
[Anonymous Symbol] 0x08000a74 Section 0 tftdisplay.o(.text.Tft_ClearScreen)
|
__arm_cp.0_2 0x080009cc Number 4 system_stm32f0xx.o(.text.SystemInit)
|
||||||
__arm_cp.3_1 0x08000af4 Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
__arm_cp.0_3 0x080009d0 Number 4 system_stm32f0xx.o(.text.SystemInit)
|
||||||
__arm_cp.3_3 0x08000af8 Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
[Anonymous Symbol] 0x080009d4 Section 0 taskcounter.o(.text.TaskCounter)
|
||||||
__arm_cp.3_4 0x08000afc Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
__arm_cp.0_0 0x08000a0c Number 4 taskcounter.o(.text.TaskCounter)
|
||||||
__arm_cp.3_5 0x08000b00 Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
__arm_cp.0_2 0x08000a18 Number 4 taskcounter.o(.text.TaskCounter)
|
||||||
__arm_cp.3_6 0x08000b04 Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
__arm_cp.0_3 0x08000a1c Number 4 taskcounter.o(.text.TaskCounter)
|
||||||
__arm_cp.3_9 0x08000b08 Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
[Anonymous Symbol] 0x08000a24 Section 0 taskkey.o(.text.TaskKey)
|
||||||
[Anonymous Symbol] 0x08000b0c Section 0 tftdisplay.o(.text.Tft_DrawChar)
|
__arm_cp.0_0 0x08000b4c Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.9_3 0x08000c30 Number 4 tftdisplay.o(.text.Tft_DrawChar)
|
__arm_cp.0_1 0x08000b50 Number 4 taskkey.o(.text.TaskKey)
|
||||||
[Anonymous Symbol] 0x08000c34 Section 0 tftdisplay.o(.text.Tft_DrawPixel)
|
__arm_cp.0_2 0x08000b54 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.6_1 0x08000c8c Number 4 tftdisplay.o(.text.Tft_DrawPixel)
|
__arm_cp.0_3 0x08000b58 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.6_2 0x08000c90 Number 4 tftdisplay.o(.text.Tft_DrawPixel)
|
__arm_cp.0_4 0x08000b5c Number 4 taskkey.o(.text.TaskKey)
|
||||||
[Anonymous Symbol] 0x08000c94 Section 0 tftdisplay.o(.text.Tft_DrawString)
|
__arm_cp.0_5 0x08000b60 Number 4 taskkey.o(.text.TaskKey)
|
||||||
[Anonymous Symbol] 0x08000ce8 Section 0 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_6 0x08000b64 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.0_0 0x08000d70 Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_7 0x08000b68 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.0_1 0x08000d74 Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_8 0x08000b6c Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.0_2 0x08000d78 Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_9 0x08000b70 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.0_3 0x08000d7c Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_10 0x08000b74 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.0_4 0x08000d80 Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_11 0x08000b78 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.0_5 0x08000d84 Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_13 0x08000b84 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.0_6 0x08000d88 Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_14 0x08000b88 Number 4 taskkey.o(.text.TaskKey)
|
||||||
__arm_cp.0_7 0x08000d8c Number 4 tftdisplay.o(.text.Tft_Init)
|
[Anonymous Symbol] 0x08000b98 Section 0 taskled.o(.text.TaskLed)
|
||||||
__arm_cp.0_8 0x08000d90 Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_0 0x08000c00 Number 4 taskled.o(.text.TaskLed)
|
||||||
__arm_cp.0_9 0x08000d94 Number 4 tftdisplay.o(.text.Tft_Init)
|
__arm_cp.0_2 0x08000c0c Number 4 taskled.o(.text.TaskLed)
|
||||||
[Anonymous Symbol] 0x08000d98 Section 0 tftdisplay.o(.text.Tft_SetFont)
|
__arm_cp.0_3 0x08000c10 Number 4 taskled.o(.text.TaskLed)
|
||||||
__arm_cp.5_0 0x08000dc8 Number 4 tftdisplay.o(.text.Tft_SetFont)
|
__arm_cp.0_4 0x08000c14 Number 4 taskled.o(.text.TaskLed)
|
||||||
Tft_SetWindow 0x08000dcd Thumb Code 248 tftdisplay.o(.text.Tft_SetWindow)
|
[Anonymous Symbol] 0x08000c18 Section 0 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
[Anonymous Symbol] 0x08000dcc Section 0 tftdisplay.o(.text.Tft_SetWindow)
|
__arm_cp.0_0 0x08000de4 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.4_1 0x08000ee0 Number 4 tftdisplay.o(.text.Tft_SetWindow)
|
__arm_cp.0_1 0x08000de8 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.4_3 0x08000f00 Number 4 tftdisplay.o(.text.Tft_SetWindow)
|
__arm_cp.0_2 0x08000dec Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.4_4 0x08000f04 Number 4 tftdisplay.o(.text.Tft_SetWindow)
|
__arm_cp.0_3 0x08000df0 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.4_5 0x08000f08 Number 4 tftdisplay.o(.text.Tft_SetWindow)
|
__arm_cp.0_4 0x08000df4 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.4_6 0x08000f0c Number 4 tftdisplay.o(.text.Tft_SetWindow)
|
__arm_cp.0_5 0x08000df8 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
[Anonymous Symbol] 0x08000f28 Section 0 systick.o(.text.Tick_InitSysTick)
|
__arm_cp.0_6 0x08000dfc Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.1_0 0x08000f5c Number 4 systick.o(.text.Tick_InitSysTick)
|
__arm_cp.0_7 0x08000e00 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.1_1 0x08000f60 Number 4 systick.o(.text.Tick_InitSysTick)
|
__arm_cp.0_8 0x08000e04 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.1_2 0x08000f64 Number 4 systick.o(.text.Tick_InitSysTick)
|
__arm_cp.0_9 0x08000e08 Number 4 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
__arm_cp.1_3 0x08000f68 Number 4 systick.o(.text.Tick_InitSysTick)
|
[Anonymous Symbol] 0x08000e0c Section 0 taskpoti.o(.text.TaskPoti)
|
||||||
[Anonymous Symbol] 0x08000f6c Section 0 main_1.o(.text.__aeabi_assert)
|
__arm_cp.0_0 0x08000e60 Number 4 taskpoti.o(.text.TaskPoti)
|
||||||
[Anonymous Symbol] 0x08000f9c Section 0 main_1.o(.text.main)
|
__arm_cp.0_2 0x08000e6c Number 4 taskpoti.o(.text.TaskPoti)
|
||||||
__arm_cp.0_0 0x08000ff8 Number 4 main_1.o(.text.main)
|
__arm_cp.0_3 0x08000e70 Number 4 taskpoti.o(.text.TaskPoti)
|
||||||
i.__0snprintf$1 0x08000ffc Section 0 printf1.o(i.__0snprintf$1)
|
[Anonymous Symbol] 0x08000e78 Section 0 taskwatch.o(.text.TaskWatch)
|
||||||
i.__ARM_clz 0x08001034 Section 0 depilogue.o(i.__ARM_clz)
|
__arm_cp.0_0 0x08000ee8 Number 4 taskwatch.o(.text.TaskWatch)
|
||||||
i.__scatterload_copy 0x08001062 Section 14 handlers.o(i.__scatterload_copy)
|
__arm_cp.0_2 0x08000ef4 Number 4 taskwatch.o(.text.TaskWatch)
|
||||||
i.__scatterload_null 0x08001070 Section 2 handlers.o(i.__scatterload_null)
|
__arm_cp.0_3 0x08000ef8 Number 4 taskwatch.o(.text.TaskWatch)
|
||||||
i.__scatterload_zeroinit 0x08001072 Section 14 handlers.o(i.__scatterload_zeroinit)
|
__arm_cp.0_4 0x08000efc Number 4 taskwatch.o(.text.TaskWatch)
|
||||||
_printf_core 0x08001081 Thumb Code 332 printf1.o(i._printf_core)
|
[Anonymous Symbol] 0x08000f0c Section 0 tftdisplay.o(.text.Tft_ClearArea)
|
||||||
i._printf_core 0x08001080 Section 0 printf1.o(i._printf_core)
|
[Anonymous Symbol] 0x08000f7c Section 0 tftdisplay.o(.text.Tft_ClearScreen)
|
||||||
_snputc 0x080011d1 Thumb Code 22 printf1.o(i._snputc)
|
__arm_cp.3_1 0x08000ffc Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
||||||
i._snputc 0x080011d0 Section 0 printf1.o(i._snputc)
|
__arm_cp.3_3 0x08001000 Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
||||||
Bitmaps_16x24 0x080011e6 Data 5376 tftfont_16x24.o(.rodata.Bitmaps_16x24)
|
__arm_cp.3_4 0x08001004 Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
||||||
[Anonymous Symbol] 0x080011e6 Section 0 tftfont_16x24.o(.rodata.Bitmaps_16x24)
|
__arm_cp.3_5 0x08001008 Number 4 tftdisplay.o(.text.Tft_ClearScreen)
|
||||||
[Anonymous Symbol] 0x080026f8 Section 0 tftdisplay.o(.rodata.str1.1)
|
__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)
|
Tft_Cfg.0 0x20000004 Data 2 tftdisplay.o(.data.Tft_Cfg.0)
|
||||||
[Anonymous Symbol] 0x20000004 Section 0 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)
|
Key_GetDebounced.lastChange.0 0x20000008 Data 4 taskkey.o(.bss.Key_GetDebounced.lastChange.0)
|
||||||
[Anonymous Symbol] 0x20000008 Section 0 taskcounter.o(.bss.TaskCounter.counter)
|
[Anonymous Symbol] 0x20000008 Section 0 taskkey.o(.bss.Key_GetDebounced.lastChange.0)
|
||||||
Tft_Cfg.1 0x2000000c Data 2 tftdisplay.o(.bss.Tft_Cfg.1)
|
Key_GetDebounced.lastChange.1 0x2000000c Data 4 taskkey.o(.bss.Key_GetDebounced.lastChange.1)
|
||||||
[Anonymous Symbol] 0x2000000c Section 0 tftdisplay.o(.bss.Tft_Cfg.1)
|
[Anonymous Symbol] 0x2000000c Section 0 taskkey.o(.bss.Key_GetDebounced.lastChange.1)
|
||||||
Tft_Cfg.2 0x20000010 Data 4 tftdisplay.o(.bss.Tft_Cfg.2)
|
Key_GetDebounced.lastChange.2 0x20000010 Data 4 taskkey.o(.bss.Key_GetDebounced.lastChange.2)
|
||||||
[Anonymous Symbol] 0x20000010 Section 0 tftdisplay.o(.bss.Tft_Cfg.2)
|
[Anonymous Symbol] 0x20000010 Section 0 taskkey.o(.bss.Key_GetDebounced.lastChange.2)
|
||||||
msTicks 0x20000014 Data 4 systick.o(.bss.msTicks)
|
Key_GetDebounced.lastRaw.0 0x20000014 Data 1 taskkey.o(.bss.Key_GetDebounced.lastRaw.0)
|
||||||
[Anonymous Symbol] 0x20000014 Section 0 systick.o(.bss.msTicks)
|
[Anonymous Symbol] 0x20000014 Section 0 taskkey.o(.bss.Key_GetDebounced.lastRaw.0)
|
||||||
tmpBuf 0x20000018 Data 14 taskcounter.o(.bss.tmpBuf)
|
Key_GetDebounced.lastRaw.1 0x20000015 Data 1 taskkey.o(.bss.Key_GetDebounced.lastRaw.1)
|
||||||
[Anonymous Symbol] 0x20000018 Section 0 taskcounter.o(.bss.tmpBuf)
|
[Anonymous Symbol] 0x20000015 Section 0 taskkey.o(.bss.Key_GetDebounced.lastRaw.1)
|
||||||
STACK 0x20000028 Section 1024 startup_stm32f072.o(STACK)
|
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
|
Global Symbols
|
||||||
|
|
||||||
|
|
@ -1085,47 +1234,58 @@ Image Symbol Table
|
||||||
__aeabi_llsr 0x080004e1 Thumb Code 34 llushr.o(.text)
|
__aeabi_llsr 0x080004e1 Thumb Code 34 llushr.o(.text)
|
||||||
_ll_ushift_r 0x080004e1 Thumb Code 0 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_Cmd 0x08000503 Thumb Code 18 stm32f0xx_adc.o(.text.ADC_Cmd)
|
||||||
ADC_Init 0x08000515 Thumb Code 36 stm32f0xx_adc.o(.text.ADC_Init)
|
ADC_GetConversionValue 0x08000515 Thumb Code 6 stm32f0xx_adc.o(.text.ADC_GetConversionValue)
|
||||||
Adc_Init 0x0800053d Thumb Code 68 adc.o(.text.Adc_Init)
|
ADC_GetFlagStatus 0x0800051b Thumb Code 24 stm32f0xx_adc.o(.text.ADC_GetFlagStatus)
|
||||||
Debug_Init 0x08000585 Thumb Code 40 debug.o(.text.Debug_Init)
|
ADC_Init 0x08000535 Thumb Code 36 stm32f0xx_adc.o(.text.ADC_Init)
|
||||||
Debug_Set 0x080005b5 Thumb Code 16 debug.o(.text.Debug_Set)
|
ADC_StartOfConversion 0x0800055d Thumb Code 10 stm32f0xx_adc.o(.text.ADC_StartOfConversion)
|
||||||
Debug_Unset 0x080005c5 Thumb Code 16 debug.o(.text.Debug_Unset)
|
Adc_GetValue 0x08000569 Thumb Code 92 adc.o(.text.Adc_GetValue)
|
||||||
GPIO_Init 0x080005d9 Thumb Code 116 stm32f0xx_gpio.o(.text.GPIO_Init)
|
Adc_Init 0x080005d1 Thumb Code 68 adc.o(.text.Adc_Init)
|
||||||
GPIO_StructInit 0x0800064d Thumb Code 12 stm32f0xx_gpio.o(.text.GPIO_StructInit)
|
Debug_Init 0x08000619 Thumb Code 40 debug.o(.text.Debug_Init)
|
||||||
GPIO_WriteBit 0x0800065d Thumb Code 12 stm32f0xx_gpio.o(.text.GPIO_WriteBit)
|
Debug_Set 0x08000649 Thumb Code 16 debug.o(.text.Debug_Set)
|
||||||
Key_Init 0x08000669 Thumb Code 64 key.o(.text.Key_Init)
|
Debug_Unset 0x08000659 Thumb Code 16 debug.o(.text.Debug_Unset)
|
||||||
Led_Init 0x080006ad Thumb Code 56 led.o(.text.Led_Init)
|
GPIO_Init 0x0800066d Thumb Code 116 stm32f0xx_gpio.o(.text.GPIO_Init)
|
||||||
RCC_AHBPeriphClockCmd 0x080006e9 Thumb Code 24 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd)
|
GPIO_ReadInputDataBit 0x080006e1 Thumb Code 10 stm32f0xx_gpio.o(.text.GPIO_ReadInputDataBit)
|
||||||
RCC_APB2PeriphClockCmd 0x08000705 Thumb Code 24 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd)
|
GPIO_StructInit 0x080006ed Thumb Code 12 stm32f0xx_gpio.o(.text.GPIO_StructInit)
|
||||||
SysTick_Handler 0x08000721 Thumb Code 28 systick.o(.text.SysTick_Handler)
|
GPIO_WriteBit 0x080006fd Thumb Code 12 stm32f0xx_gpio.o(.text.GPIO_WriteBit)
|
||||||
SystemInit 0x08000741 Thumb Code 212 system_stm32f0xx.o(.text.SystemInit)
|
Key_GetState 0x08000709 Thumb Code 44 key.o(.text.Key_GetState)
|
||||||
TaskCounter 0x08000825 Thumb Code 60 taskcounter.o(.text.TaskCounter)
|
Key_Init 0x08000735 Thumb Code 64 key.o(.text.Key_Init)
|
||||||
TaskKey 0x08000875 Thumb Code 28 taskkey.o(.text.TaskKey)
|
Led_Init 0x08000779 Thumb Code 56 led.o(.text.Led_Init)
|
||||||
TaskLed 0x08000899 Thumb Code 32 taskled.o(.text.TaskLed)
|
Led_TurnOff 0x080007b5 Thumb Code 32 led.o(.text.Led_TurnOff)
|
||||||
TaskMandelbrot 0x080008c1 Thumb Code 324 taskmandelbrot.o(.text.TaskMandelbrot)
|
Led_TurnOn 0x080007d5 Thumb Code 28 led.o(.text.Led_TurnOn)
|
||||||
TaskPoti 0x08000a25 Thumb Code 32 taskpoti.o(.text.TaskPoti)
|
RCC_AHBPeriphClockCmd 0x080007f9 Thumb Code 24 stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd)
|
||||||
TaskWatch 0x08000a4d Thumb Code 32 taskwatch.o(.text.TaskWatch)
|
RCC_APB2PeriphClockCmd 0x08000815 Thumb Code 24 stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd)
|
||||||
Tft_ClearScreen 0x08000a75 Thumb Code 128 tftdisplay.o(.text.Tft_ClearScreen)
|
SysTick_Handler 0x080008d1 Thumb Code 28 systick.o(.text.SysTick_Handler)
|
||||||
Tft_DrawChar 0x08000b0d Thumb Code 292 tftdisplay.o(.text.Tft_DrawChar)
|
SystemInit 0x080008f1 Thumb Code 212 system_stm32f0xx.o(.text.SystemInit)
|
||||||
Tft_DrawPixel 0x08000c35 Thumb Code 88 tftdisplay.o(.text.Tft_DrawPixel)
|
TaskCounter 0x080009d5 Thumb Code 56 taskcounter.o(.text.TaskCounter)
|
||||||
Tft_DrawString 0x08000c95 Thumb Code 84 tftdisplay.o(.text.Tft_DrawString)
|
TaskKey 0x08000a25 Thumb Code 296 taskkey.o(.text.TaskKey)
|
||||||
Tft_Init 0x08000ce9 Thumb Code 136 tftdisplay.o(.text.Tft_Init)
|
TaskLed 0x08000b99 Thumb Code 104 taskled.o(.text.TaskLed)
|
||||||
Tft_SetFont 0x08000d99 Thumb Code 48 tftdisplay.o(.text.Tft_SetFont)
|
TaskMandelbrot 0x08000c19 Thumb Code 460 taskmandelbrot.o(.text.TaskMandelbrot)
|
||||||
Tick_InitSysTick 0x08000f29 Thumb Code 52 systick.o(.text.Tick_InitSysTick)
|
TaskPoti 0x08000e0d Thumb Code 84 taskpoti.o(.text.TaskPoti)
|
||||||
__aeabi_assert 0x08000f6d Thumb Code 46 main_1.o(.text.__aeabi_assert)
|
TaskWatch 0x08000e79 Thumb Code 112 taskwatch.o(.text.TaskWatch)
|
||||||
main 0x08000f9d Thumb Code 92 main_1.o(.text.main)
|
Tft_ClearArea 0x08000f0d Thumb Code 112 tftdisplay.o(.text.Tft_ClearArea)
|
||||||
__0snprintf$1 0x08000ffd Thumb Code 50 printf1.o(i.__0snprintf$1)
|
Tft_ClearScreen 0x08000f7d Thumb Code 128 tftdisplay.o(.text.Tft_ClearScreen)
|
||||||
__1snprintf$1 0x08000ffd Thumb Code 0 printf1.o(i.__0snprintf$1)
|
Tft_DrawChar 0x08001015 Thumb Code 292 tftdisplay.o(.text.Tft_DrawChar)
|
||||||
__2snprintf 0x08000ffd Thumb Code 0 printf1.o(i.__0snprintf$1)
|
Tft_DrawPixel 0x0800113d Thumb Code 88 tftdisplay.o(.text.Tft_DrawPixel)
|
||||||
__ARM_clz 0x08001035 Thumb Code 46 depilogue.o(i.__ARM_clz)
|
Tft_DrawString 0x08001199 Thumb Code 84 tftdisplay.o(.text.Tft_DrawString)
|
||||||
__scatterload_copy 0x08001063 Thumb Code 14 handlers.o(i.__scatterload_copy)
|
Tft_Init 0x080011ed Thumb Code 136 tftdisplay.o(.text.Tft_Init)
|
||||||
__scatterload_null 0x08001071 Thumb Code 2 handlers.o(i.__scatterload_null)
|
Tft_SetFont 0x0800129d Thumb Code 48 tftdisplay.o(.text.Tft_SetFont)
|
||||||
__scatterload_zeroinit 0x08001073 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
|
Tft_SetForegroundColourRgb16 0x080012d1 Thumb Code 8 tftdisplay.o(.text.Tft_SetForegroundColourRgb16)
|
||||||
TftFont_16x24 0x080026e8 Data 16 tftfont_16x24.o(.rodata.TftFont_16x24)
|
Tick_GetMs 0x08001439 Thumb Code 8 systick.o(.text.Tick_GetMs)
|
||||||
Region$$Table$$Base 0x08002710 Number 0 anon$$obj.o(Region$$Table)
|
Tick_InitSysTick 0x08001445 Thumb Code 52 systick.o(.text.Tick_InitSysTick)
|
||||||
Region$$Table$$Limit 0x08002730 Number 0 anon$$obj.o(Region$$Table)
|
__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)
|
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
|
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
|
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
|
||||||
|
|
||||||
0x08000000 0x08000000 0x000000c0 Data RO 311 RESET startup_stm32f072.o
|
0x08000000 0x08000000 0x000000c0 Data RO 319 RESET startup_stm32f072.o
|
||||||
0x080000c0 0x080000c0 0x00000000 Code RO 397 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
|
0x080000c0 0x080000c0 0x00000000 Code RO 439 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
|
||||||
0x080000c0 0x080000c0 0x00000004 Code RO 675 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
|
0x080000c0 0x080000c0 0x00000004 Code RO 717 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
|
||||||
0x080000c4 0x080000c4 0x00000004 Code RO 678 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
|
0x080000c4 0x080000c4 0x00000004 Code RO 720 .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 722 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
|
||||||
0x080000c8 0x080000c8 0x00000000 Code RO 682 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
|
0x080000c8 0x080000c8 0x00000000 Code RO 724 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
|
||||||
0x080000c8 0x080000c8 0x00000008 Code RO 683 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
|
0x080000c8 0x080000c8 0x00000008 Code RO 725 .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 727 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
|
||||||
0x080000d0 0x080000d0 0x00000000 Code RO 687 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
|
0x080000d0 0x080000d0 0x00000000 Code RO 729 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
|
||||||
0x080000d0 0x080000d0 0x00000004 Code RO 676 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
|
0x080000d0 0x080000d0 0x00000004 Code RO 718 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
|
||||||
0x080000d4 0x080000d4 0x0000001c Code RO 312 .text startup_stm32f072.o
|
0x080000d4 0x080000d4 0x0000001c Code RO 320 .text startup_stm32f072.o
|
||||||
0x080000f0 0x080000f0 0x00000164 Code RO 667 .text mf_p.l(dadd.o)
|
0x080000f0 0x080000f0 0x00000164 Code RO 709 .text mf_p.l(dadd.o)
|
||||||
0x08000254 0x08000254 0x000000d0 Code RO 669 .text mf_p.l(dmul.o)
|
0x08000254 0x08000254 0x000000d0 Code RO 711 .text mf_p.l(dmul.o)
|
||||||
0x08000324 0x08000324 0x0000002c Code RO 671 .text mf_p.l(dcmpgt.o)
|
0x08000324 0x08000324 0x0000002c Code RO 713 .text mf_p.l(dcmpgt.o)
|
||||||
0x08000350 0x08000350 0x0000001c Code RO 673 .text mf_p.l(dfltui.o)
|
0x08000350 0x08000350 0x0000001c Code RO 715 .text mf_p.l(dfltui.o)
|
||||||
0x0800036c 0x0800036c 0x0000003e Code RO 698 .text mc_p.l(uidiv_div0.o)
|
0x0800036c 0x0800036c 0x0000003e Code RO 740 .text mc_p.l(uidiv_div0.o)
|
||||||
0x080003aa 0x080003aa 0x00000020 Code RO 706 .text mc_p.l(llshl.o)
|
0x080003aa 0x080003aa 0x00000020 Code RO 748 .text mc_p.l(llshl.o)
|
||||||
0x080003ca 0x080003ca 0x00000026 Code RO 708 .text mc_p.l(llsshr.o)
|
0x080003ca 0x080003ca 0x00000026 Code RO 750 .text mc_p.l(llsshr.o)
|
||||||
0x080003f0 0x080003f0 0x00000000 Code RO 710 .text mc_p.l(iusefp.o)
|
0x080003f0 0x080003f0 0x00000000 Code RO 752 .text mc_p.l(iusefp.o)
|
||||||
0x080003f0 0x080003f0 0x000000be Code RO 711 .text mf_p.l(depilogue.o)
|
0x080003f0 0x080003f0 0x000000be Code RO 753 .text mf_p.l(depilogue.o)
|
||||||
0x080004ae 0x080004ae 0x00000002 PAD
|
0x080004ae 0x080004ae 0x00000002 PAD
|
||||||
0x080004b0 0x080004b0 0x00000030 Code RO 721 .text mc_p.l(init.o)
|
0x080004b0 0x080004b0 0x00000030 Code RO 763 .text mc_p.l(init.o)
|
||||||
0x080004e0 0x080004e0 0x00000022 Code RO 724 .text mc_p.l(llushr.o)
|
0x080004e0 0x080004e0 0x00000022 Code RO 766 .text mc_p.l(llushr.o)
|
||||||
0x08000502 0x08000502 0x00000012 Code RO 122 .text.ADC_Cmd stm32f0xx_adc.o
|
0x08000502 0x08000502 0x00000012 Code RO 130 .text.ADC_Cmd stm32f0xx_adc.o
|
||||||
0x08000514 0x08000514 0x00000028 Code RO 118 .text.ADC_Init stm32f0xx_adc.o
|
0x08000514 0x08000514 0x00000006 Code RO 168 .text.ADC_GetConversionValue stm32f0xx_adc.o
|
||||||
0x0800053c 0x0800053c 0x00000048 Code RO 63 .text.Adc_Init adc.o
|
0x0800051a 0x0800051a 0x00000018 Code RO 176 .text.ADC_GetFlagStatus stm32f0xx_adc.o
|
||||||
0x08000584 0x08000584 0x00000030 Code RO 102 .text.Debug_Init debug.o
|
0x08000532 0x08000532 0x00000002 PAD
|
||||||
0x080005b4 0x080005b4 0x00000010 Code RO 104 .text.Debug_Set debug.o
|
0x08000534 0x08000534 0x00000028 Code RO 126 .text.ADC_Init stm32f0xx_adc.o
|
||||||
0x080005c4 0x080005c4 0x00000014 Code RO 106 .text.Debug_Unset debug.o
|
0x0800055c 0x0800055c 0x0000000a Code RO 166 .text.ADC_StartOfConversion stm32f0xx_adc.o
|
||||||
0x080005d8 0x080005d8 0x00000074 Code RO 186 .text.GPIO_Init stm32f0xx_gpio.o
|
0x08000566 0x08000566 0x00000002 PAD
|
||||||
0x0800064c 0x0800064c 0x00000010 Code RO 188 .text.GPIO_StructInit stm32f0xx_gpio.o
|
0x08000568 0x08000568 0x00000068 Code RO 69 .text.Adc_GetValue adc.o
|
||||||
0x0800065c 0x0800065c 0x0000000c Code RO 204 .text.GPIO_WriteBit stm32f0xx_gpio.o
|
0x080005d0 0x080005d0 0x00000048 Code RO 65 .text.Adc_Init adc.o
|
||||||
0x08000668 0x08000668 0x00000044 Code RO 2 .text.Key_Init key.o
|
0x08000618 0x08000618 0x00000030 Code RO 110 .text.Debug_Init debug.o
|
||||||
0x080006ac 0x080006ac 0x0000003c Code RO 14 .text.Led_Init led.o
|
0x08000648 0x08000648 0x00000010 Code RO 112 .text.Debug_Set debug.o
|
||||||
0x080006e8 0x080006e8 0x0000001c Code RO 281 .text.RCC_AHBPeriphClockCmd stm32f0xx_rcc.o
|
0x08000658 0x08000658 0x00000014 Code RO 114 .text.Debug_Unset debug.o
|
||||||
0x08000704 0x08000704 0x0000001c Code RO 283 .text.RCC_APB2PeriphClockCmd stm32f0xx_rcc.o
|
0x0800066c 0x0800066c 0x00000074 Code RO 194 .text.GPIO_Init stm32f0xx_gpio.o
|
||||||
0x08000720 0x08000720 0x00000020 Code RO 77 .text.SysTick_Handler systick.o
|
0x080006e0 0x080006e0 0x0000000a Code RO 200 .text.GPIO_ReadInputDataBit stm32f0xx_gpio.o
|
||||||
0x08000740 0x08000740 0x000000e4 Code RO 319 .text.SystemInit system_stm32f0xx.o
|
0x080006ea 0x080006ea 0x00000002 PAD
|
||||||
0x08000824 0x08000824 0x00000050 Code RO 347 .text.TaskCounter taskcounter.o
|
0x080006ec 0x080006ec 0x00000010 Code RO 196 .text.GPIO_StructInit stm32f0xx_gpio.o
|
||||||
0x08000874 0x08000874 0x00000024 Code RO 357 .text.TaskKey taskkey.o
|
0x080006fc 0x080006fc 0x0000000c Code RO 212 .text.GPIO_WriteBit stm32f0xx_gpio.o
|
||||||
0x08000898 0x08000898 0x00000028 Code RO 365 .text.TaskLed taskled.o
|
0x08000708 0x08000708 0x0000002c Code RO 4 .text.Key_GetState key.o
|
||||||
0x080008c0 0x080008c0 0x00000164 Code RO 373 .text.TaskMandelbrot taskmandelbrot.o
|
0x08000734 0x08000734 0x00000044 Code RO 2 .text.Key_Init key.o
|
||||||
0x08000a24 0x08000a24 0x00000028 Code RO 382 .text.TaskPoti taskpoti.o
|
0x08000778 0x08000778 0x0000003c Code RO 14 .text.Led_Init led.o
|
||||||
0x08000a4c 0x08000a4c 0x00000028 Code RO 390 .text.TaskWatch taskwatch.o
|
0x080007b4 0x080007b4 0x00000020 Code RO 18 .text.Led_TurnOff led.o
|
||||||
0x08000a74 0x08000a74 0x00000098 Code RO 35 .text.Tft_ClearScreen tftdisplay.o
|
0x080007d4 0x080007d4 0x00000024 Code RO 16 .text.Led_TurnOn led.o
|
||||||
0x08000b0c 0x08000b0c 0x00000128 Code RO 47 .text.Tft_DrawChar tftdisplay.o
|
0x080007f8 0x080007f8 0x0000001c Code RO 289 .text.RCC_AHBPeriphClockCmd stm32f0xx_rcc.o
|
||||||
0x08000c34 0x08000c34 0x00000060 Code RO 41 .text.Tft_DrawPixel tftdisplay.o
|
0x08000814 0x08000814 0x0000001c Code RO 291 .text.RCC_APB2PeriphClockCmd stm32f0xx_rcc.o
|
||||||
0x08000c94 0x08000c94 0x00000054 Code RO 49 .text.Tft_DrawString tftdisplay.o
|
0x08000830 0x08000830 0x000000a0 Code RO 96 .text.Superloop main_1.o
|
||||||
0x08000ce8 0x08000ce8 0x000000b0 Code RO 29 .text.Tft_Init tftdisplay.o
|
0x080008d0 0x080008d0 0x00000020 Code RO 79 .text.SysTick_Handler systick.o
|
||||||
0x08000d98 0x08000d98 0x00000034 Code RO 39 .text.Tft_SetFont tftdisplay.o
|
0x080008f0 0x080008f0 0x000000e4 Code RO 327 .text.SystemInit system_stm32f0xx.o
|
||||||
0x08000dcc 0x08000dcc 0x0000015c Code RO 37 .text.Tft_SetWindow tftdisplay.o
|
0x080009d4 0x080009d4 0x00000050 Code RO 355 .text.TaskCounter taskcounter.o
|
||||||
0x08000f28 0x08000f28 0x00000044 Code RO 79 .text.Tick_InitSysTick systick.o
|
0x08000a24 0x08000a24 0x00000174 Code RO 366 .text.TaskKey taskkey.o
|
||||||
0x08000f6c 0x08000f6c 0x0000002e Code RO 92 .text.__aeabi_assert main_1.o
|
0x08000b98 0x08000b98 0x00000080 Code RO 390 .text.TaskLed taskled.o
|
||||||
0x08000f9a 0x08000f9a 0x00000002 PAD
|
0x08000c18 0x08000c18 0x000001f4 Code RO 402 .text.TaskMandelbrot taskmandelbrot.o
|
||||||
0x08000f9c 0x08000f9c 0x00000060 Code RO 90 .text.main main_1.o
|
0x08000e0c 0x08000e0c 0x0000006c Code RO 416 .text.TaskPoti taskpoti.o
|
||||||
0x08000ffc 0x08000ffc 0x00000038 Code RO 452 i.__0snprintf$1 mc_p.l(printf1.o)
|
0x08000e78 0x08000e78 0x00000094 Code RO 428 .text.TaskWatch taskwatch.o
|
||||||
0x08001034 0x08001034 0x0000002e Code RO 713 i.__ARM_clz mf_p.l(depilogue.o)
|
0x08000f0c 0x08000f0c 0x00000070 Code RO 47 .text.Tft_ClearArea tftdisplay.o
|
||||||
0x08001062 0x08001062 0x0000000e Code RO 729 i.__scatterload_copy mc_p.l(handlers.o)
|
0x08000f7c 0x08000f7c 0x00000098 Code RO 35 .text.Tft_ClearScreen tftdisplay.o
|
||||||
0x08001070 0x08001070 0x00000002 Code RO 730 i.__scatterload_null mc_p.l(handlers.o)
|
0x08001014 0x08001014 0x00000128 Code RO 49 .text.Tft_DrawChar tftdisplay.o
|
||||||
0x08001072 0x08001072 0x0000000e Code RO 731 i.__scatterload_zeroinit mc_p.l(handlers.o)
|
0x0800113c 0x0800113c 0x0000005c Code RO 41 .text.Tft_DrawPixel tftdisplay.o
|
||||||
0x08001080 0x08001080 0x00000150 Code RO 458 i._printf_core mc_p.l(printf1.o)
|
0x08001198 0x08001198 0x00000054 Code RO 51 .text.Tft_DrawString tftdisplay.o
|
||||||
0x080011d0 0x080011d0 0x00000016 Code RO 459 i._snputc mc_p.l(printf1.o)
|
0x080011ec 0x080011ec 0x000000b0 Code RO 29 .text.Tft_Init tftdisplay.o
|
||||||
0x080011e6 0x080011e6 0x00001500 Data RO 340 .rodata.Bitmaps_16x24 tftfont_16x24.o
|
0x0800129c 0x0800129c 0x00000034 Code RO 39 .text.Tft_SetFont tftdisplay.o
|
||||||
0x080026e6 0x080026e6 0x00000002 PAD
|
0x080012d0 0x080012d0 0x0000000c Code RO 31 .text.Tft_SetForegroundColourRgb16 tftdisplay.o
|
||||||
0x080026e8 0x080026e8 0x00000010 Data RO 341 .rodata.TftFont_16x24 tftfont_16x24.o
|
0x080012dc 0x080012dc 0x0000015c Code RO 37 .text.Tft_SetWindow tftdisplay.o
|
||||||
0x080026f8 0x080026f8 0x00000015 Data RO 54 .rodata.str1.1 tftdisplay.o
|
0x08001438 0x08001438 0x0000000c Code RO 83 .text.Tick_GetMs systick.o
|
||||||
0x0800270d 0x0800270d 0x00000003 PAD
|
0x08001444 0x08001444 0x00000044 Code RO 81 .text.Tick_InitSysTick systick.o
|
||||||
0x08002710 0x08002710 0x00000020 Data RO 728 Region$$Table anon$$obj.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
|
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
|
||||||
|
|
||||||
0x20000000 0x08002730 0x00000004 Data RW 323 .data.SystemCoreClock system_stm32f0xx.o
|
0x20000000 0x08002e20 0x00000004 Data RW 331 .data.SystemCoreClock system_stm32f0xx.o
|
||||||
0x20000004 0x08002734 0x00000002 Data RW 51 .data.Tft_Cfg.0 tftdisplay.o
|
0x20000004 0x08002e24 0x00000002 Data RW 53 .data.Tft_Cfg.0 tftdisplay.o
|
||||||
0x20000006 0x08002736 0x00000002 PAD
|
0x20000006 0x08002e26 0x00000002 PAD
|
||||||
0x20000008 - 0x00000004 Zero RW 349 .bss.TaskCounter.counter taskcounter.o
|
0x20000008 - 0x00000004 Zero RW 379 .bss.Key_GetDebounced.lastChange.0 taskkey.o
|
||||||
0x2000000c - 0x00000002 Zero RW 52 .bss.Tft_Cfg.1 tftdisplay.o
|
0x2000000c - 0x00000004 Zero RW 380 .bss.Key_GetDebounced.lastChange.1 taskkey.o
|
||||||
0x2000000e 0x08002736 0x00000002 PAD
|
0x20000010 - 0x00000004 Zero RW 381 .bss.Key_GetDebounced.lastChange.2 taskkey.o
|
||||||
0x20000010 - 0x00000004 Zero RW 53 .bss.Tft_Cfg.2 tftdisplay.o
|
0x20000014 - 0x00000001 Zero RW 373 .bss.Key_GetDebounced.lastRaw.0 taskkey.o
|
||||||
0x20000014 - 0x00000004 Zero RW 81 .bss.msTicks systick.o
|
0x20000015 - 0x00000001 Zero RW 374 .bss.Key_GetDebounced.lastRaw.1 taskkey.o
|
||||||
0x20000018 - 0x0000000e Zero RW 350 .bss.tmpBuf taskcounter.o
|
0x20000016 - 0x00000001 Zero RW 375 .bss.Key_GetDebounced.lastRaw.2 taskkey.o
|
||||||
0x20000026 0x08002736 0x00000002 PAD
|
0x20000017 - 0x00000001 Zero RW 376 .bss.Key_GetDebounced.stable.0 taskkey.o
|
||||||
0x20000028 - 0x00000400 Zero RW 309 STACK startup_stm32f072.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
|
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
|
84 12 0 0 0 2230 debug.o
|
||||||
68 4 0 0 0 2548 key.o
|
112 4 0 0 0 2548 key.o
|
||||||
60 4 0 0 0 2866 led.o
|
128 12 12 0 0 2866 led.o
|
||||||
142 4 0 0 0 1155 main_1.o
|
238 8 0 0 1024 1719 main_1.o
|
||||||
28 8 192 0 1024 624 startup_stm32f072.o
|
28 8 192 0 1024 624 startup_stm32f072.o
|
||||||
58 4 0 0 0 7487 stm32f0xx_adc.o
|
98 4 0 0 0 7487 stm32f0xx_adc.o
|
||||||
144 4 0 0 0 4581 stm32f0xx_gpio.o
|
154 4 0 0 0 4581 stm32f0xx_gpio.o
|
||||||
56 8 0 0 0 10733 stm32f0xx_rcc.o
|
56 8 0 0 0 10733 stm32f0xx_rcc.o
|
||||||
228 16 0 4 0 2208 system_stm32f0xx.o
|
228 16 0 4 0 2208 system_stm32f0xx.o
|
||||||
100 20 0 0 4 2727 systick.o
|
112 24 0 0 4 2836 systick.o
|
||||||
80 20 0 0 18 876 taskcounter.o
|
80 24 0 0 19 811 taskcounter.o
|
||||||
36 8 0 0 0 666 taskkey.o
|
372 76 0 0 37 2218 taskkey.o
|
||||||
40 8 0 0 0 668 taskled.o
|
128 24 3 0 6 1127 taskled.o
|
||||||
356 32 0 0 0 1869 taskmandelbrot.o
|
500 40 7 0 10 2107 taskmandelbrot.o
|
||||||
40 8 0 0 0 671 taskpoti.o
|
108 24 0 0 19 880 taskpoti.o
|
||||||
40 8 0 0 0 674 taskwatch.o
|
148 36 0 0 19 914 taskwatch.o
|
||||||
1204 180 21 2 6 11256 tftdisplay.o
|
1324 180 21 2 6 12103 tftdisplay.o
|
||||||
0 0 5392 0 0 765 tftfont_16x24.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)
|
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
|
32 0 0 0 0 68 llshl.o
|
||||||
38 0 0 0 0 68 llsshr.o
|
38 0 0 0 0 68 llsshr.o
|
||||||
34 0 0 0 0 68 llushr.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
|
62 0 0 0 0 72 uidiv_div0.o
|
||||||
356 4 0 0 0 140 dadd.o
|
356 4 0 0 0 140 dadd.o
|
||||||
44 0 0 0 0 68 dcmpgt.o
|
44 0 0 0 0 68 dcmpgt.o
|
||||||
|
|
@ -1287,18 +1503,18 @@ Image component sizes
|
||||||
208 6 0 0 0 88 dmul.o
|
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)
|
2 0 0 0 0 0 (incl. Padding)
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Code (inc. data) RO Data RW Data ZI Data Debug Library Name
|
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
|
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
|
Code (inc. data) RO Data RW Data ZI Data Debug
|
||||||
|
|
||||||
4390 394 5642 8 1056 57610 Grand Totals
|
6146 562 5662 8 2192 61831 Grand Totals
|
||||||
4390 394 5642 8 1056 57610 ELF Image Totals
|
6146 562 5662 8 2192 61831 ELF Image Totals
|
||||||
4390 394 5642 8 0 0 ROM Totals
|
6146 562 5662 8 0 0 ROM Totals
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
Total RO Size (Code + RO Data) 10032 ( 9.80kB)
|
Total RO Size (Code + RO Data) 11808 ( 11.53kB)
|
||||||
Total RW Size (RW Data + ZI Data) 1064 ( 1.04kB)
|
Total RW Size (RW Data + ZI Data) 2200 ( 2.15kB)
|
||||||
Total ROM Size (Code + RO Data + RW Data) 10040 ( 9.80kB)
|
Total ROM Size (Code + RO Data + RW Data) 11816 ( 11.54kB)
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -8,7 +8,7 @@ Copyright (C) 2025 ARM Ltd and ARM Germany GmbH. All rights reserved.
|
||||||
License Information: Christian Gamsjaeger
|
License Information: Christian Gamsjaeger
|
||||||
FHOOE
|
FHOOE
|
||||||
User-based license: Keil MDK Community (non-commercial free of charge)
|
User-based license: Keil MDK Community (non-commercial free of charge)
|
||||||
Valid until: Jun 1 2033. Cached until: Oct 15 2026
|
Valid until: Jun 1 2033. Cached until: Oct 20 2026
|
||||||
|
|
||||||
Tool Versions:
|
Tool Versions:
|
||||||
Toolchain: Keil MDK Community (non-commercial free of charge Version: 5.42.0.0
|
Toolchain: Keil MDK Community (non-commercial free of charge Version: 5.42.0.0
|
||||||
|
|
@ -29,31 +29,21 @@ Project File Date: 10/08/2026
|
||||||
|
|
||||||
<h2>Output:</h2>
|
<h2>Output:</h2>
|
||||||
*** Using Compiler 'V6.23', folder: 'C:\Users\gaems\AppData\Local\Keil_v5\ARM\ARMCLANG\Bin'
|
*** 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'.
|
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 main.c...
|
||||||
compiling Debug.c...
|
src/main.c(16): warning: In file included from...
|
||||||
compiling stm32f0xx_adc.c...
|
./stm32f0-stdperiph\stm32f0xx_gpio.h(38): warning: In file included from...
|
||||||
compiling stm32f0xx_gpio.c...
|
./src/Devices\stm32f0xx.h(357): warning: In file included from...
|
||||||
compiling stm32f0xx_rcc.c...
|
./src/Devices\core_cm0.h(149): warning: In file included from...
|
||||||
assembling startup_stm32f072.s...
|
./src/Devices\core_cmFunc.h(429): warning: inline asm clobber list contains reserved registers: SP [-Winline-asm]
|
||||||
compiling system_stm32f0xx.c...
|
429 | __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) : "sp");
|
||||||
compiling TftFont_6x8.c...
|
| ^
|
||||||
compiling TftFont_16x24.c...
|
./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.
|
||||||
compiling TaskCounter.c...
|
1 warning generated.
|
||||||
compiling TaskKey.c...
|
|
||||||
compiling TaskLed.c...
|
|
||||||
compiling TaskMandelbrot.c...
|
|
||||||
compiling TaskPoti.c...
|
|
||||||
compiling TaskWatch.c...
|
|
||||||
linking...
|
linking...
|
||||||
Program Size: Code=4390 RO-data=5642 RW-data=8 ZI-data=1056
|
Program Size: Code=6146 RO-data=5662 RW-data=8 ZI-data=2192
|
||||||
".\output\Apus.axf" - 0 Error(s), 0 Warning(s).
|
".\output\Apus.axf" - 0 Error(s), 1 Warning(s).
|
||||||
|
|
||||||
<h2>Software Packages used:</h2>
|
<h2>Software Packages used:</h2>
|
||||||
|
|
||||||
|
|
@ -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
|
C:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
|
||||||
|
|
||||||
<h2>Collection of Component Files used:</h2>
|
<h2>Collection of Component Files used:</h2>
|
||||||
Build Time Elapsed: 00:00:04
|
Build Time Elapsed: 00:00:01
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
<title>Static Call Graph - [.\output\Apus.axf]</title></head>
|
<title>Static Call Graph - [.\output\Apus.axf]</title></head>
|
||||||
<body><HR>
|
<body><HR>
|
||||||
<H1>Static Call Graph for image .\output\Apus.axf</H1><HR>
|
<H1>Static Call Graph for image .\output\Apus.axf</H1><HR>
|
||||||
<BR><P>#<CALLGRAPH># ARM Linker, 6230001: Last Updated: Thu Oct 8 12:54:30 2026
|
<BR><P>#<CALLGRAPH># ARM Linker, 6230001: Last Updated: Tue Oct 13 19:36:04 2026
|
||||||
<BR><P>
|
<BR><P>
|
||||||
<H3>Maximum Stack Usage = 380 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
|
<H3>Maximum Stack Usage = 388 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
|
||||||
Call chain for Maximum Stack Depth:</H3>
|
Call chain for Maximum Stack Depth:</H3>
|
||||||
main ⇒ TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
main ⇒ Superloop ⇒ TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
<P>
|
<P>
|
||||||
<H3>
|
<H3>
|
||||||
Mutually Recursive functions
|
Mutually Recursive functions
|
||||||
|
|
@ -61,7 +61,7 @@ Function Pointers
|
||||||
<LI><a href="#[25]">USB_IRQHandler</a> from startup_stm32f072.o(.text) referenced from startup_stm32f072.o(RESET)
|
<LI><a href="#[25]">USB_IRQHandler</a> from startup_stm32f072.o(.text) referenced from startup_stm32f072.o(RESET)
|
||||||
<LI><a href="#[6]">WWDG_IRQHandler</a> from startup_stm32f072.o(.text) referenced from startup_stm32f072.o(RESET)
|
<LI><a href="#[6]">WWDG_IRQHandler</a> from startup_stm32f072.o(.text) referenced from startup_stm32f072.o(RESET)
|
||||||
<LI><a href="#[28]">__main</a> from entry.o(.ARM.Collect$$$$00000000) referenced from startup_stm32f072.o(.text)
|
<LI><a href="#[28]">__main</a> from entry.o(.ARM.Collect$$$$00000000) referenced from startup_stm32f072.o(.text)
|
||||||
<LI><a href="#[29]">_snputc</a> from printf1.o(i._snputc) referenced from printf1.o(i.__0snprintf$1)
|
<LI><a href="#[29]">_snputc</a> from printf6.o(i._snputc) referenced from printf6.o(i.__0snprintf$6)
|
||||||
<LI><a href="#[26]">main</a> from main_1.o(.text.main) referenced from entry9a.o(.ARM.Collect$$$$0000000B)
|
<LI><a href="#[26]">main</a> from main_1.o(.text.main) referenced from entry9a.o(.ARM.Collect$$$$0000000B)
|
||||||
</UL>
|
</UL>
|
||||||
<P>
|
<P>
|
||||||
|
|
@ -71,7 +71,7 @@ Global Symbols
|
||||||
<P><STRONG><a name="[28]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
|
<P><STRONG><a name="[28]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072.o(.text)
|
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072.o(.text)
|
||||||
</UL>
|
</UL>
|
||||||
<P><STRONG><a name="[5a]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
|
<P><STRONG><a name="[68]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
|
||||||
|
|
||||||
<P><STRONG><a name="[2a]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
|
<P><STRONG><a name="[2a]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
|
||||||
<BR><BR>[Calls]<UL><LI><a href="#[2b]">>></a> __scatterload
|
<BR><BR>[Calls]<UL><LI><a href="#[2b]">>></a> __scatterload
|
||||||
|
|
@ -81,15 +81,15 @@ Global Symbols
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[2b]">>></a> __scatterload
|
<BR><BR>[Called By]<UL><LI><a href="#[2b]">>></a> __scatterload
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[5b]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
|
<P><STRONG><a name="[69]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
|
||||||
|
|
||||||
<P><STRONG><a name="[5c]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
|
<P><STRONG><a name="[6a]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
|
||||||
|
|
||||||
<P><STRONG><a name="[5d]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
|
<P><STRONG><a name="[6b]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
|
||||||
|
|
||||||
<P><STRONG><a name="[5e]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
|
<P><STRONG><a name="[6c]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
|
||||||
|
|
||||||
<P><STRONG><a name="[5f]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
|
<P><STRONG><a name="[6d]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
|
||||||
|
|
||||||
<P><STRONG><a name="[0]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f072.o(.text))
|
<P><STRONG><a name="[0]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_stm32f072.o(.text))
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072.o(RESET)
|
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072.o(RESET)
|
||||||
|
|
@ -231,7 +231,7 @@ Global Symbols
|
||||||
<LI><a href="#[2f]">>></a> _double_epilogue
|
<LI><a href="#[2f]">>></a> _double_epilogue
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[31]">>></a> __aeabi_dsub
|
<BR>[Called By]<UL><LI><a href="#[31]">>></a> __aeabi_dsub
|
||||||
<LI><a href="#[4a]">>></a> TaskMandelbrot
|
<LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
<LI><a href="#[32]">>></a> __aeabi_drsub
|
<LI><a href="#[32]">>></a> __aeabi_drsub
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
|
|
@ -240,7 +240,7 @@ Global Symbols
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[2c]">>></a> __aeabi_dadd
|
<BR>[Calls]<UL><LI><a href="#[2c]">>></a> __aeabi_dadd
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Called By]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[32]"></a>__aeabi_drsub</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text), UNUSED)
|
<P><STRONG><a name="[32]"></a>__aeabi_drsub</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text), UNUSED)
|
||||||
|
|
@ -252,13 +252,13 @@ Global Symbols
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[2f]">>></a> _double_epilogue
|
<BR>[Calls]<UL><LI><a href="#[2f]">>></a> _double_epilogue
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Called By]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[4b]"></a>__aeabi_dcmpgt</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, dcmpgt.o(.text))
|
<P><STRONG><a name="[5e]"></a>__aeabi_dcmpgt</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, dcmpgt.o(.text))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_dcmpgt
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_dcmpgt
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Called By]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[34]"></a>__aeabi_ui2d</STRONG> (Thumb, 24 bytes, Stack size 16 bytes, dfltui.o(.text))
|
<P><STRONG><a name="[34]"></a>__aeabi_ui2d</STRONG> (Thumb, 24 bytes, Stack size 16 bytes, dfltui.o(.text))
|
||||||
|
|
@ -266,17 +266,22 @@ Global Symbols
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[2f]">>></a> _double_epilogue
|
<BR>[Calls]<UL><LI><a href="#[2f]">>></a> _double_epilogue
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Called By]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[54]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 16 bytes, uidiv_div0.o(.text))
|
<P><STRONG><a name="[3c]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 16 bytes, uidiv_div0.o(.text))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = __aeabi_uidiv
|
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = __aeabi_uidiv
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[53]">>></a> Tick_InitSysTick
|
<BR>[Called By]<UL><LI><a href="#[56]">>></a> TaskWatch
|
||||||
|
<LI><a href="#[51]">>></a> Tick_InitSysTick
|
||||||
|
<LI><a href="#[38]">>></a> Adc_GetValue
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[59]"></a>__aeabi_uidivmod</STRONG> (Thumb, 62 bytes, Stack size 16 bytes, uidiv_div0.o(.text), UNUSED)
|
<P><STRONG><a name="[60]"></a>__aeabi_uidivmod</STRONG> (Thumb, 62 bytes, Stack size 16 bytes, uidiv_div0.o(.text))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[58]">>></a> _printf_core
|
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = __aeabi_uidivmod
|
||||||
|
</UL>
|
||||||
|
<BR>[Called By]<UL><LI><a href="#[56]">>></a> TaskWatch
|
||||||
|
<LI><a href="#[65]">>></a> _printf_core
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[2d]"></a>__aeabi_llsl</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, llshl.o(.text))
|
<P><STRONG><a name="[2d]"></a>__aeabi_llsl</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, llshl.o(.text))
|
||||||
|
|
@ -286,7 +291,7 @@ Global Symbols
|
||||||
<LI><a href="#[2f]">>></a> _double_epilogue
|
<LI><a href="#[2f]">>></a> _double_epilogue
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[60]"></a>_ll_shift_l</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llshl.o(.text), UNUSED)
|
<P><STRONG><a name="[6e]"></a>_ll_shift_l</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llshl.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[2e]"></a>__aeabi_lasr</STRONG> (Thumb, 38 bytes, Stack size 8 bytes, llsshr.o(.text))
|
<P><STRONG><a name="[2e]"></a>__aeabi_lasr</STRONG> (Thumb, 38 bytes, Stack size 8 bytes, llsshr.o(.text))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_lasr
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_lasr
|
||||||
|
|
@ -294,9 +299,9 @@ Global Symbols
|
||||||
<BR>[Called By]<UL><LI><a href="#[2c]">>></a> __aeabi_dadd
|
<BR>[Called By]<UL><LI><a href="#[2c]">>></a> __aeabi_dadd
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[61]"></a>_ll_sshift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llsshr.o(.text), UNUSED)
|
<P><STRONG><a name="[6f]"></a>_ll_sshift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llsshr.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[62]"></a>__I$use$fp</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, iusefp.o(.text), UNUSED)
|
<P><STRONG><a name="[70]"></a>__I$use$fp</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, iusefp.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[30]"></a>_double_round</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, depilogue.o(.text))
|
<P><STRONG><a name="[30]"></a>_double_round</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, depilogue.o(.text))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = _double_round
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = _double_round
|
||||||
|
|
@ -324,7 +329,7 @@ Global Symbols
|
||||||
<BR>[Called By]<UL><LI><a href="#[2a]">>></a> _main_scatterload
|
<BR>[Called By]<UL><LI><a href="#[2a]">>></a> _main_scatterload
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[63]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
|
<P><STRONG><a name="[71]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[36]"></a>__aeabi_llsr</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, llushr.o(.text))
|
<P><STRONG><a name="[36]"></a>__aeabi_llsr</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, llushr.o(.text))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_llsr
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_llsr
|
||||||
|
|
@ -332,125 +337,166 @@ Global Symbols
|
||||||
<BR>[Called By]<UL><LI><a href="#[2f]">>></a> _double_epilogue
|
<BR>[Called By]<UL><LI><a href="#[2f]">>></a> _double_epilogue
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[64]"></a>_ll_ushift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llushr.o(.text), UNUSED)
|
<P><STRONG><a name="[72]"></a>_ll_ushift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llushr.o(.text), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[3b]"></a>ADC_Cmd</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, stm32f0xx_adc.o(.text.ADC_Cmd))
|
<P><STRONG><a name="[40]"></a>ADC_Cmd</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, stm32f0xx_adc.o(.text.ADC_Cmd))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[38]">>></a> Adc_Init
|
<BR><BR>[Called By]<UL><LI><a href="#[3d]">>></a> Adc_Init
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[3a]"></a>ADC_Init</STRONG> (Thumb, 36 bytes, Stack size 16 bytes, stm32f0xx_adc.o(.text.ADC_Init))
|
<P><STRONG><a name="[3b]"></a>ADC_GetConversionValue</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, stm32f0xx_adc.o(.text.ADC_GetConversionValue))
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[38]">>></a> Adc_GetValue
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[39]"></a>ADC_GetFlagStatus</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, stm32f0xx_adc.o(.text.ADC_GetFlagStatus))
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[38]">>></a> Adc_GetValue
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[3f]"></a>ADC_Init</STRONG> (Thumb, 36 bytes, Stack size 16 bytes, stm32f0xx_adc.o(.text.ADC_Init))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = ADC_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = ADC_Init
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[38]">>></a> Adc_Init
|
<BR>[Called By]<UL><LI><a href="#[3d]">>></a> Adc_Init
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[38]"></a>Adc_Init</STRONG> (Thumb, 68 bytes, Stack size 48 bytes, adc.o(.text.Adc_Init))
|
<P><STRONG><a name="[3a]"></a>ADC_StartOfConversion</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_adc.o(.text.ADC_StartOfConversion))
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[38]">>></a> Adc_GetValue
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[38]"></a>Adc_GetValue</STRONG> (Thumb, 92 bytes, Stack size 24 bytes, adc.o(.text.Adc_GetValue))
|
||||||
|
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = Adc_GetValue ⇒ __aeabi_uidiv
|
||||||
|
</UL>
|
||||||
|
<BR>[Calls]<UL><LI><a href="#[3b]">>></a> ADC_GetConversionValue
|
||||||
|
<LI><a href="#[3a]">>></a> ADC_StartOfConversion
|
||||||
|
<LI><a href="#[39]">>></a> ADC_GetFlagStatus
|
||||||
|
<LI><a href="#[3c]">>></a> __aeabi_uidiv
|
||||||
|
</UL>
|
||||||
|
<BR>[Called By]<UL><LI><a href="#[57]">>></a> TaskPoti
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[3d]"></a>Adc_Init</STRONG> (Thumb, 68 bytes, Stack size 48 bytes, adc.o(.text.Adc_Init))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = Adc_Init ⇒ ADC_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = Adc_Init ⇒ ADC_Init
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[3b]">>></a> ADC_Cmd
|
<BR>[Calls]<UL><LI><a href="#[40]">>></a> ADC_Cmd
|
||||||
<LI><a href="#[3a]">>></a> ADC_Init
|
<LI><a href="#[3f]">>></a> ADC_Init
|
||||||
<LI><a href="#[39]">>></a> RCC_APB2PeriphClockCmd
|
<LI><a href="#[3e]">>></a> RCC_APB2PeriphClockCmd
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[3c]"></a>Debug_Init</STRONG> (Thumb, 40 bytes, Stack size 16 bytes, debug.o(.text.Debug_Init))
|
<P><STRONG><a name="[41]"></a>Debug_Init</STRONG> (Thumb, 40 bytes, Stack size 16 bytes, debug.o(.text.Debug_Init))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = Debug_Init ⇒ GPIO_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = Debug_Init ⇒ GPIO_Init
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[3f]">>></a> GPIO_Init
|
<BR>[Calls]<UL><LI><a href="#[44]">>></a> GPIO_Init
|
||||||
<LI><a href="#[3e]">>></a> GPIO_StructInit
|
<LI><a href="#[43]">>></a> GPIO_StructInit
|
||||||
<LI><a href="#[3d]">>></a> RCC_AHBPeriphClockCmd
|
<LI><a href="#[42]">>></a> RCC_AHBPeriphClockCmd
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[40]"></a>Debug_Set</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, debug.o(.text.Debug_Set))
|
<P><STRONG><a name="[45]"></a>Debug_Set</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, debug.o(.text.Debug_Set))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Debug_Set
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Debug_Set
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[41]">>></a> GPIO_WriteBit
|
<BR>[Calls]<UL><LI><a href="#[46]">>></a> GPIO_WriteBit
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
<LI><a href="#[4d]">>></a> TaskPoti
|
|
||||||
<LI><a href="#[4e]">>></a> TaskWatch
|
|
||||||
<LI><a href="#[49]">>></a> TaskLed
|
|
||||||
<LI><a href="#[48]">>></a> TaskKey
|
|
||||||
<LI><a href="#[45]">>></a> TaskCounter
|
|
||||||
<LI><a href="#[26]">>></a> main
|
|
||||||
<LI><a href="#[5]">>></a> SysTick_Handler
|
<LI><a href="#[5]">>></a> SysTick_Handler
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[42]"></a>Debug_Unset</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, debug.o(.text.Debug_Unset))
|
<P><STRONG><a name="[47]"></a>Debug_Unset</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, debug.o(.text.Debug_Unset))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Debug_Unset
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Debug_Unset
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[41]">>></a> GPIO_WriteBit
|
<BR>[Calls]<UL><LI><a href="#[46]">>></a> GPIO_WriteBit
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
<LI><a href="#[4d]">>></a> TaskPoti
|
|
||||||
<LI><a href="#[4e]">>></a> TaskWatch
|
|
||||||
<LI><a href="#[49]">>></a> TaskLed
|
|
||||||
<LI><a href="#[48]">>></a> TaskKey
|
|
||||||
<LI><a href="#[45]">>></a> TaskCounter
|
|
||||||
<LI><a href="#[26]">>></a> main
|
|
||||||
<LI><a href="#[5]">>></a> SysTick_Handler
|
<LI><a href="#[5]">>></a> SysTick_Handler
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[3f]"></a>GPIO_Init</STRONG> (Thumb, 116 bytes, Stack size 24 bytes, stm32f0xx_gpio.o(.text.GPIO_Init))
|
<P><STRONG><a name="[44]"></a>GPIO_Init</STRONG> (Thumb, 116 bytes, Stack size 24 bytes, stm32f0xx_gpio.o(.text.GPIO_Init))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = GPIO_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = GPIO_Init
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[3c]">>></a> Debug_Init
|
<BR>[Called By]<UL><LI><a href="#[41]">>></a> Debug_Init
|
||||||
<LI><a href="#[51]">>></a> Tft_Init
|
<LI><a href="#[4f]">>></a> Tft_Init
|
||||||
<LI><a href="#[44]">>></a> Led_Init
|
<LI><a href="#[4b]">>></a> Led_Init
|
||||||
<LI><a href="#[43]">>></a> Key_Init
|
<LI><a href="#[4a]">>></a> Key_Init
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[3e]"></a>GPIO_StructInit</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f0xx_gpio.o(.text.GPIO_StructInit))
|
<P><STRONG><a name="[49]"></a>GPIO_ReadInputDataBit</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, stm32f0xx_gpio.o(.text.GPIO_ReadInputDataBit))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[3c]">>></a> Debug_Init
|
<BR><BR>[Called By]<UL><LI><a href="#[48]">>></a> Key_GetState
|
||||||
<LI><a href="#[51]">>></a> Tft_Init
|
|
||||||
<LI><a href="#[44]">>></a> Led_Init
|
|
||||||
<LI><a href="#[43]">>></a> Key_Init
|
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[41]"></a>GPIO_WriteBit</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f0xx_gpio.o(.text.GPIO_WriteBit))
|
<P><STRONG><a name="[43]"></a>GPIO_StructInit</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f0xx_gpio.o(.text.GPIO_StructInit))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[42]">>></a> Debug_Unset
|
<BR><BR>[Called By]<UL><LI><a href="#[41]">>></a> Debug_Init
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
<LI><a href="#[4f]">>></a> Tft_Init
|
||||||
|
<LI><a href="#[4b]">>></a> Led_Init
|
||||||
|
<LI><a href="#[4a]">>></a> Key_Init
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[43]"></a>Key_Init</STRONG> (Thumb, 64 bytes, Stack size 24 bytes, key.o(.text.Key_Init))
|
<P><STRONG><a name="[46]"></a>GPIO_WriteBit</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, stm32f0xx_gpio.o(.text.GPIO_WriteBit))
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[47]">>></a> Debug_Unset
|
||||||
|
<LI><a href="#[45]">>></a> Debug_Set
|
||||||
|
<LI><a href="#[4c]">>></a> Led_TurnOff
|
||||||
|
<LI><a href="#[4d]">>></a> Led_TurnOn
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[48]"></a>Key_GetState</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, key.o(.text.Key_GetState))
|
||||||
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Key_GetState
|
||||||
|
</UL>
|
||||||
|
<BR>[Calls]<UL><LI><a href="#[49]">>></a> GPIO_ReadInputDataBit
|
||||||
|
</UL>
|
||||||
|
<BR>[Called By]<UL><LI><a href="#[54]">>></a> TaskKey
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[4a]"></a>Key_Init</STRONG> (Thumb, 64 bytes, Stack size 24 bytes, key.o(.text.Key_Init))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = Key_Init ⇒ GPIO_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = Key_Init ⇒ GPIO_Init
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[3f]">>></a> GPIO_Init
|
<BR>[Calls]<UL><LI><a href="#[44]">>></a> GPIO_Init
|
||||||
<LI><a href="#[3e]">>></a> GPIO_StructInit
|
<LI><a href="#[43]">>></a> GPIO_StructInit
|
||||||
<LI><a href="#[3d]">>></a> RCC_AHBPeriphClockCmd
|
<LI><a href="#[42]">>></a> RCC_AHBPeriphClockCmd
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[44]"></a>Led_Init</STRONG> (Thumb, 56 bytes, Stack size 32 bytes, led.o(.text.Led_Init))
|
<P><STRONG><a name="[4b]"></a>Led_Init</STRONG> (Thumb, 56 bytes, Stack size 32 bytes, led.o(.text.Led_Init))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = Led_Init ⇒ GPIO_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = Led_Init ⇒ GPIO_Init
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[3f]">>></a> GPIO_Init
|
<BR>[Calls]<UL><LI><a href="#[44]">>></a> GPIO_Init
|
||||||
<LI><a href="#[3e]">>></a> GPIO_StructInit
|
<LI><a href="#[43]">>></a> GPIO_StructInit
|
||||||
<LI><a href="#[3d]">>></a> RCC_AHBPeriphClockCmd
|
<LI><a href="#[42]">>></a> RCC_AHBPeriphClockCmd
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[3d]"></a>RCC_AHBPeriphClockCmd</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd))
|
<P><STRONG><a name="[4c]"></a>Led_TurnOff</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, led.o(.text.Led_TurnOff))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[3c]">>></a> Debug_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Led_TurnOff
|
||||||
<LI><a href="#[51]">>></a> Tft_Init
|
</UL>
|
||||||
<LI><a href="#[44]">>></a> Led_Init
|
<BR>[Calls]<UL><LI><a href="#[46]">>></a> GPIO_WriteBit
|
||||||
<LI><a href="#[43]">>></a> Key_Init
|
</UL>
|
||||||
|
<BR>[Called By]<UL><LI><a href="#[55]">>></a> TaskLed
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[39]"></a>RCC_APB2PeriphClockCmd</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd))
|
<P><STRONG><a name="[4d]"></a>Led_TurnOn</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, led.o(.text.Led_TurnOn))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[38]">>></a> Adc_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Led_TurnOn
|
||||||
|
</UL>
|
||||||
|
<BR>[Calls]<UL><LI><a href="#[46]">>></a> GPIO_WriteBit
|
||||||
|
</UL>
|
||||||
|
<BR>[Called By]<UL><LI><a href="#[55]">>></a> TaskLed
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[42]"></a>RCC_AHBPeriphClockCmd</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, stm32f0xx_rcc.o(.text.RCC_AHBPeriphClockCmd))
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[41]">>></a> Debug_Init
|
||||||
|
<LI><a href="#[4f]">>></a> Tft_Init
|
||||||
|
<LI><a href="#[4b]">>></a> Led_Init
|
||||||
|
<LI><a href="#[4a]">>></a> Key_Init
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[3e]"></a>RCC_APB2PeriphClockCmd</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, stm32f0xx_rcc.o(.text.RCC_APB2PeriphClockCmd))
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[3d]">>></a> Adc_Init
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[5]"></a>SysTick_Handler</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, systick.o(.text.SysTick_Handler))
|
<P><STRONG><a name="[5]"></a>SysTick_Handler</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, systick.o(.text.SysTick_Handler))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = SysTick_Handler ⇒ Debug_Unset
|
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = SysTick_Handler ⇒ Debug_Unset
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[42]">>></a> Debug_Unset
|
<BR>[Calls]<UL><LI><a href="#[47]">>></a> Debug_Unset
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
<LI><a href="#[45]">>></a> Debug_Set
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072.o(RESET)
|
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072.o(RESET)
|
||||||
</UL>
|
</UL>
|
||||||
|
|
@ -459,200 +505,244 @@ Global Symbols
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072.o(.text)
|
<BR>[Address Reference Count : 1]<UL><LI> startup_stm32f072.o(.text)
|
||||||
</UL>
|
</UL>
|
||||||
<P><STRONG><a name="[45]"></a>TaskCounter</STRONG> (Thumb, 60 bytes, Stack size 16 bytes, taskcounter.o(.text.TaskCounter))
|
<P><STRONG><a name="[53]"></a>TaskCounter</STRONG> (Thumb, 56 bytes, Stack size 8 bytes, taskcounter.o(.text.TaskCounter))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 300<LI>Call Chain = TaskCounter ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 292<LI>Call Chain = TaskCounter ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[46]">>></a> __2snprintf
|
<BR>[Calls]<UL><LI><a href="#[59]">>></a> Tft_DrawString
|
||||||
<LI><a href="#[42]">>></a> Debug_Unset
|
<LI><a href="#[5a]">>></a> __2snprintf
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
|
||||||
<LI><a href="#[47]">>></a> Tft_DrawString
|
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[48]"></a>TaskKey</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, taskkey.o(.text.TaskKey))
|
<P><STRONG><a name="[54]"></a>TaskKey</STRONG> (Thumb, 296 bytes, Stack size 48 bytes, taskkey.o(.text.TaskKey))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 292<LI>Call Chain = TaskKey ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 332<LI>Call Chain = TaskKey ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[42]">>></a> Debug_Unset
|
<BR>[Calls]<UL><LI><a href="#[5b]">>></a> Tick_GetMs
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
<LI><a href="#[59]">>></a> Tft_DrawString
|
||||||
<LI><a href="#[47]">>></a> Tft_DrawString
|
<LI><a href="#[5c]">>></a> Tft_SetForegroundColourRgb16
|
||||||
|
<LI><a href="#[48]">>></a> Key_GetState
|
||||||
|
<LI><a href="#[5a]">>></a> __2snprintf
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[49]"></a>TaskLed</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, taskled.o(.text.TaskLed))
|
<P><STRONG><a name="[55]"></a>TaskLed</STRONG> (Thumb, 104 bytes, Stack size 16 bytes, taskled.o(.text.TaskLed))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 292<LI>Call Chain = TaskLed ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 300<LI>Call Chain = TaskLed ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[42]">>></a> Debug_Unset
|
<BR>[Calls]<UL><LI><a href="#[5b]">>></a> Tick_GetMs
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
<LI><a href="#[59]">>></a> Tft_DrawString
|
||||||
<LI><a href="#[47]">>></a> Tft_DrawString
|
<LI><a href="#[4c]">>></a> Led_TurnOff
|
||||||
|
<LI><a href="#[4d]">>></a> Led_TurnOn
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[4a]"></a>TaskMandelbrot</STRONG> (Thumb, 324 bytes, Stack size 96 bytes, taskmandelbrot.o(.text.TaskMandelbrot))
|
<P><STRONG><a name="[58]"></a>TaskMandelbrot</STRONG> (Thumb, 460 bytes, Stack size 96 bytes, taskmandelbrot.o(.text.TaskMandelbrot))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 380<LI>Call Chain = TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 380<LI>Call Chain = TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[31]">>></a> __aeabi_dsub
|
<BR>[Calls]<UL><LI><a href="#[5e]">>></a> __aeabi_dcmpgt
|
||||||
<LI><a href="#[4b]">>></a> __aeabi_dcmpgt
|
|
||||||
<LI><a href="#[2c]">>></a> __aeabi_dadd
|
<LI><a href="#[2c]">>></a> __aeabi_dadd
|
||||||
|
<LI><a href="#[31]">>></a> __aeabi_dsub
|
||||||
<LI><a href="#[33]">>></a> __aeabi_dmul
|
<LI><a href="#[33]">>></a> __aeabi_dmul
|
||||||
<LI><a href="#[34]">>></a> __aeabi_ui2d
|
<LI><a href="#[34]">>></a> __aeabi_ui2d
|
||||||
<LI><a href="#[42]">>></a> Debug_Unset
|
<LI><a href="#[5b]">>></a> Tick_GetMs
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
<LI><a href="#[59]">>></a> Tft_DrawString
|
||||||
<LI><a href="#[47]">>></a> Tft_DrawString
|
<LI><a href="#[5d]">>></a> Tft_ClearArea
|
||||||
<LI><a href="#[4c]">>></a> Tft_DrawPixel
|
<LI><a href="#[5f]">>></a> Tft_DrawPixel
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[4d]"></a>TaskPoti</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, taskpoti.o(.text.TaskPoti))
|
<P><STRONG><a name="[57]"></a>TaskPoti</STRONG> (Thumb, 84 bytes, Stack size 16 bytes, taskpoti.o(.text.TaskPoti))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 292<LI>Call Chain = TaskPoti ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 300<LI>Call Chain = TaskPoti ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[42]">>></a> Debug_Unset
|
<BR>[Calls]<UL><LI><a href="#[38]">>></a> Adc_GetValue
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
<LI><a href="#[59]">>></a> Tft_DrawString
|
||||||
<LI><a href="#[47]">>></a> Tft_DrawString
|
<LI><a href="#[5a]">>></a> __2snprintf
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[4e]"></a>TaskWatch</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, taskwatch.o(.text.TaskWatch))
|
<P><STRONG><a name="[56]"></a>TaskWatch</STRONG> (Thumb, 112 bytes, Stack size 24 bytes, taskwatch.o(.text.TaskWatch))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 292<LI>Call Chain = TaskWatch ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 308<LI>Call Chain = TaskWatch ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[42]">>></a> Debug_Unset
|
<BR>[Calls]<UL><LI><a href="#[5b]">>></a> Tick_GetMs
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
<LI><a href="#[59]">>></a> Tft_DrawString
|
||||||
<LI><a href="#[47]">>></a> Tft_DrawString
|
<LI><a href="#[60]">>></a> __aeabi_uidivmod
|
||||||
|
<LI><a href="#[3c]">>></a> __aeabi_uidiv
|
||||||
|
<LI><a href="#[5a]">>></a> __2snprintf
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[56]"></a>Tft_ClearScreen</STRONG> (Thumb, 128 bytes, Stack size 16 bytes, tftdisplay.o(.text.Tft_ClearScreen))
|
<P><STRONG><a name="[5d]"></a>Tft_ClearArea</STRONG> (Thumb, 112 bytes, Stack size 24 bytes, tftdisplay.o(.text.Tft_ClearArea))
|
||||||
|
<BR><BR>[Stack]<UL><LI>Max Depth = 220<LI>Call Chain = Tft_ClearArea ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
|
</UL>
|
||||||
|
<BR>[Calls]<UL><LI><a href="#[61]">>></a> Tft_SetWindow
|
||||||
|
</UL>
|
||||||
|
<BR>[Called By]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[52]"></a>Tft_ClearScreen</STRONG> (Thumb, 128 bytes, Stack size 16 bytes, tftdisplay.o(.text.Tft_ClearScreen))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = Tft_ClearScreen
|
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = Tft_ClearScreen
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[4f]"></a>Tft_DrawChar</STRONG> (Thumb, 292 bytes, Stack size 56 bytes, tftdisplay.o(.text.Tft_DrawChar))
|
<P><STRONG><a name="[62]"></a>Tft_DrawChar</STRONG> (Thumb, 292 bytes, Stack size 56 bytes, tftdisplay.o(.text.Tft_DrawChar))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 252<LI>Call Chain = Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 252<LI>Call Chain = Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[50]">>></a> Tft_SetWindow
|
<BR>[Calls]<UL><LI><a href="#[61]">>></a> Tft_SetWindow
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[47]">>></a> Tft_DrawString
|
<BR>[Called By]<UL><LI><a href="#[59]">>></a> Tft_DrawString
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[4c]"></a>Tft_DrawPixel</STRONG> (Thumb, 88 bytes, Stack size 16 bytes, tftdisplay.o(.text.Tft_DrawPixel))
|
<P><STRONG><a name="[5f]"></a>Tft_DrawPixel</STRONG> (Thumb, 88 bytes, Stack size 16 bytes, tftdisplay.o(.text.Tft_DrawPixel))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 212<LI>Call Chain = Tft_DrawPixel ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 212<LI>Call Chain = Tft_DrawPixel ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[50]">>></a> Tft_SetWindow
|
<BR>[Calls]<UL><LI><a href="#[61]">>></a> Tft_SetWindow
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Called By]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[47]"></a>Tft_DrawString</STRONG> (Thumb, 84 bytes, Stack size 32 bytes, tftdisplay.o(.text.Tft_DrawString))
|
<P><STRONG><a name="[59]"></a>Tft_DrawString</STRONG> (Thumb, 84 bytes, Stack size 32 bytes, tftdisplay.o(.text.Tft_DrawString))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 284<LI>Call Chain = Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 284<LI>Call Chain = Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[4f]">>></a> Tft_DrawChar
|
<BR>[Calls]<UL><LI><a href="#[62]">>></a> Tft_DrawChar
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Called By]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
<LI><a href="#[4d]">>></a> TaskPoti
|
<LI><a href="#[57]">>></a> TaskPoti
|
||||||
<LI><a href="#[4e]">>></a> TaskWatch
|
<LI><a href="#[56]">>></a> TaskWatch
|
||||||
<LI><a href="#[49]">>></a> TaskLed
|
<LI><a href="#[55]">>></a> TaskLed
|
||||||
<LI><a href="#[48]">>></a> TaskKey
|
<LI><a href="#[54]">>></a> TaskKey
|
||||||
<LI><a href="#[45]">>></a> TaskCounter
|
<LI><a href="#[53]">>></a> TaskCounter
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[51]"></a>Tft_Init</STRONG> (Thumb, 136 bytes, Stack size 32 bytes, tftdisplay.o(.text.Tft_Init))
|
<P><STRONG><a name="[4f]"></a>Tft_Init</STRONG> (Thumb, 136 bytes, Stack size 32 bytes, tftdisplay.o(.text.Tft_Init))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = Tft_Init ⇒ GPIO_Init
|
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = Tft_Init ⇒ GPIO_Init
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[3f]">>></a> GPIO_Init
|
<BR>[Calls]<UL><LI><a href="#[44]">>></a> GPIO_Init
|
||||||
<LI><a href="#[3e]">>></a> GPIO_StructInit
|
<LI><a href="#[43]">>></a> GPIO_StructInit
|
||||||
<LI><a href="#[3d]">>></a> RCC_AHBPeriphClockCmd
|
<LI><a href="#[42]">>></a> RCC_AHBPeriphClockCmd
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[55]"></a>Tft_SetFont</STRONG> (Thumb, 48 bytes, Stack size 0 bytes, tftdisplay.o(.text.Tft_SetFont))
|
<P><STRONG><a name="[50]"></a>Tft_SetFont</STRONG> (Thumb, 48 bytes, Stack size 0 bytes, tftdisplay.o(.text.Tft_SetFont))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR><BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[53]"></a>Tick_InitSysTick</STRONG> (Thumb, 52 bytes, Stack size 8 bytes, systick.o(.text.Tick_InitSysTick))
|
<P><STRONG><a name="[5c]"></a>Tft_SetForegroundColourRgb16</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, tftdisplay.o(.text.Tft_SetForegroundColourRgb16))
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[54]">>></a> TaskKey
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[5b]"></a>Tick_GetMs</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, systick.o(.text.Tick_GetMs))
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
|
<LI><a href="#[56]">>></a> TaskWatch
|
||||||
|
<LI><a href="#[55]">>></a> TaskLed
|
||||||
|
<LI><a href="#[54]">>></a> TaskKey
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[51]"></a>Tick_InitSysTick</STRONG> (Thumb, 52 bytes, Stack size 8 bytes, systick.o(.text.Tick_InitSysTick))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = Tick_InitSysTick ⇒ __aeabi_uidiv
|
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = Tick_InitSysTick ⇒ __aeabi_uidiv
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[54]">>></a> __aeabi_uidiv
|
<BR>[Calls]<UL><LI><a href="#[3c]">>></a> __aeabi_uidiv
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
<BR>[Called By]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[52]"></a>__aeabi_assert</STRONG> (Thumb, 46 bytes, Stack size 156 bytes, main_1.o(.text.__aeabi_assert))
|
<P><STRONG><a name="[63]"></a>__aeabi_assert</STRONG> (Thumb, 46 bytes, Stack size 156 bytes, main_1.o(.text.__aeabi_assert))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 156<LI>Call Chain = __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 156<LI>Call Chain = __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[50]">>></a> Tft_SetWindow
|
<BR>[Called By]<UL><LI><a href="#[61]">>></a> Tft_SetWindow
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 92 bytes, Stack size 0 bytes, main_1.o(.text.main))
|
<P><STRONG><a name="[26]"></a>main</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, main_1.o(.text.main))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 380<LI>Call Chain = main ⇒ TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 388<LI>Call Chain = main ⇒ Superloop ⇒ TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[4a]">>></a> TaskMandelbrot
|
<BR>[Calls]<UL><LI><a href="#[4e]">>></a> Superloop
|
||||||
<LI><a href="#[4d]">>></a> TaskPoti
|
|
||||||
<LI><a href="#[4e]">>></a> TaskWatch
|
|
||||||
<LI><a href="#[49]">>></a> TaskLed
|
|
||||||
<LI><a href="#[48]">>></a> TaskKey
|
|
||||||
<LI><a href="#[45]">>></a> TaskCounter
|
|
||||||
<LI><a href="#[3c]">>></a> Debug_Init
|
|
||||||
<LI><a href="#[53]">>></a> Tick_InitSysTick
|
|
||||||
<LI><a href="#[42]">>></a> Debug_Unset
|
|
||||||
<LI><a href="#[40]">>></a> Debug_Set
|
|
||||||
<LI><a href="#[38]">>></a> Adc_Init
|
|
||||||
<LI><a href="#[55]">>></a> Tft_SetFont
|
|
||||||
<LI><a href="#[56]">>></a> Tft_ClearScreen
|
|
||||||
<LI><a href="#[51]">>></a> Tft_Init
|
|
||||||
<LI><a href="#[44]">>></a> Led_Init
|
|
||||||
<LI><a href="#[43]">>></a> Key_Init
|
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
|
<BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
|
||||||
</UL>
|
</UL>
|
||||||
<P><STRONG><a name="[57]"></a>__0snprintf$1</STRONG> (Thumb, 50 bytes, Stack size 40 bytes, printf1.o(i.__0snprintf$1), UNUSED)
|
<P><STRONG><a name="[64]"></a>__0snprintf$6</STRONG> (Thumb, 50 bytes, Stack size 40 bytes, printf6.o(i.__0snprintf$6), UNUSED)
|
||||||
<BR><BR>[Calls]<UL><LI><a href="#[58]">>></a> _printf_core
|
<BR><BR>[Calls]<UL><LI><a href="#[65]">>></a> _printf_core
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[65]"></a>__1snprintf$1</STRONG> (Thumb, 0 bytes, Stack size 40 bytes, printf1.o(i.__0snprintf$1), UNUSED)
|
<P><STRONG><a name="[73]"></a>__1snprintf$6</STRONG> (Thumb, 0 bytes, Stack size 40 bytes, printf6.o(i.__0snprintf$6), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[46]"></a>__2snprintf</STRONG> (Thumb, 0 bytes, Stack size 40 bytes, printf1.o(i.__0snprintf$1))
|
<P><STRONG><a name="[5a]"></a>__2snprintf</STRONG> (Thumb, 0 bytes, Stack size 40 bytes, printf6.o(i.__0snprintf$6))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = __2snprintf
|
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = __2snprintf
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[45]">>></a> TaskCounter
|
<BR>[Called By]<UL><LI><a href="#[57]">>></a> TaskPoti
|
||||||
|
<LI><a href="#[56]">>></a> TaskWatch
|
||||||
|
<LI><a href="#[54]">>></a> TaskKey
|
||||||
|
<LI><a href="#[53]">>></a> TaskCounter
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[35]"></a>__ARM_clz</STRONG> (Thumb, 46 bytes, Stack size 0 bytes, depilogue.o(i.__ARM_clz))
|
<P><STRONG><a name="[35]"></a>__ARM_clz</STRONG> (Thumb, 46 bytes, Stack size 0 bytes, depilogue.o(i.__ARM_clz))
|
||||||
<BR><BR>[Called By]<UL><LI><a href="#[2f]">>></a> _double_epilogue
|
<BR><BR>[Called By]<UL><LI><a href="#[2f]">>></a> _double_epilogue
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[66]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
|
<P><STRONG><a name="[74]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[67]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
|
<P><STRONG><a name="[75]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
|
||||||
|
|
||||||
<P><STRONG><a name="[68]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
|
<P><STRONG><a name="[76]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
|
||||||
<P>
|
<P>
|
||||||
<H3>
|
<H3>
|
||||||
Local Symbols
|
Local Symbols
|
||||||
</H3>
|
</H3>
|
||||||
<P><STRONG><a name="[50]"></a>Tft_SetWindow</STRONG> (Thumb, 248 bytes, Stack size 40 bytes, tftdisplay.o(.text.Tft_SetWindow))
|
<P><STRONG><a name="[61]"></a>Tft_SetWindow</STRONG> (Thumb, 248 bytes, Stack size 40 bytes, tftdisplay.o(.text.Tft_SetWindow))
|
||||||
<BR><BR>[Stack]<UL><LI>Max Depth = 196<LI>Call Chain = Tft_SetWindow ⇒ __aeabi_assert
|
<BR><BR>[Stack]<UL><LI>Max Depth = 196<LI>Call Chain = Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Calls]<UL><LI><a href="#[52]">>></a> __aeabi_assert
|
<BR>[Calls]<UL><LI><a href="#[63]">>></a> __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[4f]">>></a> Tft_DrawChar
|
<BR>[Called By]<UL><LI><a href="#[62]">>></a> Tft_DrawChar
|
||||||
<LI><a href="#[4c]">>></a> Tft_DrawPixel
|
<LI><a href="#[5d]">>></a> Tft_ClearArea
|
||||||
|
<LI><a href="#[5f]">>></a> Tft_DrawPixel
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[58]"></a>_printf_core</STRONG> (Thumb, 332 bytes, Stack size 88 bytes, printf1.o(i._printf_core), UNUSED)
|
<P><STRONG><a name="[4e]"></a>Superloop</STRONG> (Thumb, 156 bytes, Stack size 8 bytes, main_1.o(.text.Superloop))
|
||||||
<BR><BR>[Calls]<UL><LI><a href="#[59]">>></a> __aeabi_uidivmod
|
<BR><BR>[Stack]<UL><LI>Max Depth = 388<LI>Call Chain = Superloop ⇒ TaskMandelbrot ⇒ Tft_DrawString ⇒ Tft_DrawChar ⇒ Tft_SetWindow ⇒ __aeabi_assert
|
||||||
</UL>
|
</UL>
|
||||||
<BR>[Called By]<UL><LI><a href="#[57]">>></a> __0snprintf$1
|
<BR>[Calls]<UL><LI><a href="#[58]">>></a> TaskMandelbrot
|
||||||
|
<LI><a href="#[57]">>></a> TaskPoti
|
||||||
|
<LI><a href="#[56]">>></a> TaskWatch
|
||||||
|
<LI><a href="#[55]">>></a> TaskLed
|
||||||
|
<LI><a href="#[54]">>></a> TaskKey
|
||||||
|
<LI><a href="#[53]">>></a> TaskCounter
|
||||||
|
<LI><a href="#[41]">>></a> Debug_Init
|
||||||
|
<LI><a href="#[51]">>></a> Tick_InitSysTick
|
||||||
|
<LI><a href="#[47]">>></a> Debug_Unset
|
||||||
|
<LI><a href="#[45]">>></a> Debug_Set
|
||||||
|
<LI><a href="#[3d]">>></a> Adc_Init
|
||||||
|
<LI><a href="#[50]">>></a> Tft_SetFont
|
||||||
|
<LI><a href="#[52]">>></a> Tft_ClearScreen
|
||||||
|
<LI><a href="#[4f]">>></a> Tft_Init
|
||||||
|
<LI><a href="#[4b]">>></a> Led_Init
|
||||||
|
<LI><a href="#[4a]">>></a> Key_Init
|
||||||
|
</UL>
|
||||||
|
<BR>[Called By]<UL><LI><a href="#[26]">>></a> main
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><STRONG><a name="[29]"></a>_snputc</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, printf1.o(i._snputc))
|
<P><STRONG><a name="[65]"></a>_printf_core</STRONG> (Thumb, 768 bytes, Stack size 96 bytes, printf6.o(i._printf_core), UNUSED)
|
||||||
<BR>[Address Reference Count : 1]<UL><LI> printf1.o(i.__0snprintf$1)
|
<BR><BR>[Calls]<UL><LI><a href="#[60]">>></a> __aeabi_uidivmod
|
||||||
|
<LI><a href="#[66]">>></a> _printf_pre_padding
|
||||||
|
<LI><a href="#[67]">>></a> _printf_post_padding
|
||||||
|
</UL>
|
||||||
|
<BR>[Called By]<UL><LI><a href="#[64]">>></a> __0snprintf$6
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[67]"></a>_printf_post_padding</STRONG> (Thumb, 32 bytes, Stack size 24 bytes, printf6.o(i._printf_post_padding), UNUSED)
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[65]">>></a> _printf_core
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[66]"></a>_printf_pre_padding</STRONG> (Thumb, 44 bytes, Stack size 40 bytes, printf6.o(i._printf_pre_padding), UNUSED)
|
||||||
|
<BR><BR>[Called By]<UL><LI><a href="#[65]">>></a> _printf_core
|
||||||
|
</UL>
|
||||||
|
|
||||||
|
<P><STRONG><a name="[29]"></a>_snputc</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, printf6.o(i._snputc))
|
||||||
|
<BR>[Address Reference Count : 1]<UL><LI> printf6.o(i.__0snprintf$6)
|
||||||
</UL><P>
|
</UL><P>
|
||||||
<H3>
|
<H3>
|
||||||
Undefined Global Symbols
|
Undefined Global Symbols
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
F (.\src\BSP\TftDisplay.c)(0x6AC7611F)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/tftdisplay.o -MMD)
|
F (.\src\BSP\TftDisplay.c)(0x6ACE5530)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/tftdisplay.o -MMD)
|
||||||
I (src\BSP\TftDisplay.h)(0x6AC7611F)
|
I (src\BSP\TftDisplay.h)(0x6ACE552F)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
|
|
@ -133,7 +133,7 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
F (.\src\BSP\systick.c)(0x6AC76B25)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/systick.o -MMD)
|
F (.\src\BSP\systick.c)(0x6ACE4B5B)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/systick.o -MMD)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\Devices\stm32f0xx.h)(0x6AC7611F)
|
I (src\Devices\stm32f0xx.h)(0x6AC7611F)
|
||||||
I (src\Devices\core_cm0.h)(0x6AC7611F)
|
I (src\Devices\core_cm0.h)(0x6AC7611F)
|
||||||
|
|
@ -164,15 +164,15 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
I (src\BSP\systick.h)(0x6AC7611F)
|
I (src\BSP\systick.h)(0x6ACE4AB9)
|
||||||
I (src\debug.h)(0x6AC76DDF)
|
I (src\debug.h)(0x6AC76DDF)
|
||||||
F (.\src\main.c)(0x6AC7765E)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/main_1.o -MMD)
|
F (.\src\main.c)(0x6ACE6BCE)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/main_1.o -MMD)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\BSP\Key.h)(0x6AC7611F)
|
I (src\BSP\Key.h)(0x6AC7611F)
|
||||||
I (src\BSP\Led.h)(0x6AC7611F)
|
I (src\BSP\Led.h)(0x6AC7611F)
|
||||||
I (src\BSP\Adc.h)(0x6AC7611F)
|
I (src\BSP\Adc.h)(0x6AC7611F)
|
||||||
I (src\BSP\systick.h)(0x6AC7611F)
|
I (src\BSP\systick.h)(0x6ACE4AB9)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
||||||
I (src\Devices\stm32f0xx.h)(0x6AC7611F)
|
I (src\Devices\stm32f0xx.h)(0x6AC7611F)
|
||||||
I (src\Devices\core_cm0.h)(0x6AC7611F)
|
I (src\Devices\core_cm0.h)(0x6AC7611F)
|
||||||
|
|
@ -202,7 +202,7 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
I (src\BSP\TftDisplay.h)(0x6AC7611F)
|
I (src\BSP\TftDisplay.h)(0x6ACE552F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont_16x24.h)(0x6AC7611F)
|
I (src\Fonts\TftFont_16x24.h)(0x6AC7611F)
|
||||||
I (src\Tasks\TaskAll.h)(0x6AC7611F)
|
I (src\Tasks\TaskAll.h)(0x6AC7611F)
|
||||||
|
|
@ -380,8 +380,8 @@ I (src\Fonts\TftFont_16x24.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
F (.\src\Tasks\TaskCounter.c)(0x6AC76B7A)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskcounter.o -MMD)
|
F (.\src\Tasks\TaskCounter.c)(0x6ACE5531)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskcounter.o -MMD)
|
||||||
I (src\BSP\TftDisplay.h)(0x6AC7611F)
|
I (src\BSP\TftDisplay.h)(0x6ACE552F)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
|
|
@ -416,11 +416,13 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
F (.\src\Tasks\TaskKey.c)(0x6AC76BA8)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskkey.o -MMD)
|
F (.\src\Tasks\TaskKey.c)(0x6ACE5533)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskkey.o -MMD)
|
||||||
I (src\BSP\TftDisplay.h)(0x6AC7611F)
|
I (src\BSP\TftDisplay.h)(0x6ACE552F)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
|
I (src\BSP\Key.h)(0x6AC7611F)
|
||||||
|
I (src\BSP\systick.h)(0x6ACE4AB9)
|
||||||
I (src\Tasks\TaskKey.h)(0x6AC7611F)
|
I (src\Tasks\TaskKey.h)(0x6AC7611F)
|
||||||
I (src\Debug.h)(0x6AC76DDF)
|
I (src\Debug.h)(0x6AC76DDF)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
||||||
|
|
@ -452,12 +454,14 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
F (.\src\Tasks\TaskLed.c)(0x6AC76BD4)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskled.o -MMD)
|
F (.\src\Tasks\TaskLed.c)(0x6ACE5537)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskled.o -MMD)
|
||||||
I (src\BSP\TftDisplay.h)(0x6AC7611F)
|
I (src\BSP\TftDisplay.h)(0x6ACE552F)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
|
I (src\BSP\Led.h)(0x6AC7611F)
|
||||||
I (src\Tasks\TaskLed.h)(0x6AC7611F)
|
I (src\Tasks\TaskLed.h)(0x6AC7611F)
|
||||||
|
I (src\BSP\systick.h)(0x6ACE4AB9)
|
||||||
I (src\Debug.h)(0x6AC76DDF)
|
I (src\Debug.h)(0x6AC76DDF)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
||||||
I (src\Devices\stm32f0xx.h)(0x6AC7611F)
|
I (src\Devices\stm32f0xx.h)(0x6AC7611F)
|
||||||
|
|
@ -488,11 +492,12 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
F (.\src\Tasks\TaskMandelbrot.c)(0x6AC76C46)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskmandelbrot.o -MMD)
|
F (.\src\Tasks\TaskMandelbrot.c)(0x6ACE5548)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskmandelbrot.o -MMD)
|
||||||
I (src\BSP\TftDisplay.h)(0x6AC7611F)
|
I (src\BSP\TftDisplay.h)(0x6ACE552F)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
|
I (src\BSP\systick.h)(0x6ACE4AB9)
|
||||||
I (src\Tasks\TaskMandelbrot.h)(0x6AC7611F)
|
I (src\Tasks\TaskMandelbrot.h)(0x6AC7611F)
|
||||||
I (src\Debug.h)(0x6AC76DDF)
|
I (src\Debug.h)(0x6AC76DDF)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
||||||
|
|
@ -524,11 +529,12 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
F (.\src\Tasks\TaskPoti.c)(0x6AC76C1D)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskpoti.o -MMD)
|
F (.\src\Tasks\TaskPoti.c)(0x6ACE5535)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskpoti.o -MMD)
|
||||||
I (src\BSP\TftDisplay.h)(0x6AC7611F)
|
I (src\BSP\TftDisplay.h)(0x6ACE552F)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
|
I (src\BSP\Adc.h)(0x6AC7611F)
|
||||||
I (src\Tasks\TaskPoti.h)(0x6AC7611F)
|
I (src\Tasks\TaskPoti.h)(0x6AC7611F)
|
||||||
I (src\Debug.h)(0x6AC76DDF)
|
I (src\Debug.h)(0x6AC76DDF)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
||||||
|
|
@ -560,11 +566,12 @@ I (stm32f0-stdperiph\stm32f0xx_tim.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_usart.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_wwdg.h)(0x6AC7611F)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_misc.h)(0x6AC7611F)
|
||||||
F (.\src\Tasks\TaskWatch.c)(0x6AC76BF9)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskwatch.o -MMD)
|
F (.\src\Tasks\TaskWatch.c)(0x6ACE5534)(-xc -std=c99 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c
-fno-rtti -funsigned-char -fshort-enums -fshort-wchar
-D__MICROLIB -gdwarf-4 -O1 -ffunction-sections -Wno-packed -Wno-missing-variable-declarations -Wno-missing-prototypes -Wno-missing-noreturn -Wno-sign-conversion -Wno-nonportable-include-path -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I ./src -I ./stm32f0-stdperiph -I ./src/Devices -I ./src/Tasks
-IC:/Users/gaems/AppData/Local/arm/packs/Keil/STM32F0xx_DFP/2.1.1/Drivers/CMSIS/Device/ST/STM32F0xx/Include
-D__UVISION_VERSION="542" -DSTM32F072xB -DSTM32F072 -DUSE_STDPERIPH_DRIVER
-o ./output/taskwatch.o -MMD)
|
||||||
I (src\BSP\TftDisplay.h)(0x6AC7611F)
|
I (src\BSP\TftDisplay.h)(0x6ACE552F)
|
||||||
I (src\StdDef.h)(0x6AC7611F)
|
I (src\StdDef.h)(0x6AC7611F)
|
||||||
I (src\Devices\stdint.h)(0x6AC7611F)
|
I (src\Devices\stdint.h)(0x6AC7611F)
|
||||||
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
I (src\Fonts\TftFont.h)(0x6AC7611F)
|
||||||
|
I (src\BSP\systick.h)(0x6ACE4AB9)
|
||||||
I (src\Tasks\TaskWatch.h)(0x6AC7611F)
|
I (src\Tasks\TaskWatch.h)(0x6AC7611F)
|
||||||
I (src\Debug.h)(0x6AC76DDF)
|
I (src\Debug.h)(0x6AC76DDF)
|
||||||
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
I (stm32f0-stdperiph\stm32f0xx_gpio.h)(0x6AC7611F)
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,6 +1,7 @@
|
||||||
./output/taskkey.o: src\Tasks\TaskKey.c src\BSP\TftDisplay.h src\StdDef.h \
|
./output/taskkey.o: src\Tasks\TaskKey.c src\BSP\TftDisplay.h src\StdDef.h \
|
||||||
src\Devices\stdint.h src\Fonts\TftFont.h src\Tasks\TaskKey.h \
|
src\Devices\stdint.h src\Fonts\TftFont.h src\BSP\Key.h \
|
||||||
src\Debug.h stm32f0-stdperiph\stm32f0xx_gpio.h src\Devices\stm32f0xx.h \
|
src\BSP\systick.h src\Tasks\TaskKey.h src\Debug.h \
|
||||||
|
stm32f0-stdperiph\stm32f0xx_gpio.h src\Devices\stm32f0xx.h \
|
||||||
src\Devices\core_cm0.h src\Devices\core_cmInstr.h \
|
src\Devices\core_cm0.h src\Devices\core_cmInstr.h \
|
||||||
src\Devices\core_cmFunc.h src\Devices\system_stm32f0xx.h \
|
src\Devices\core_cmFunc.h src\Devices\system_stm32f0xx.h \
|
||||||
src\Devices\stm32f0xx_conf.h stm32f0-stdperiph\stm32f0xx_adc.h \
|
src\Devices\stm32f0xx_conf.h stm32f0-stdperiph\stm32f0xx_adc.h \
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,6 +1,7 @@
|
||||||
./output/taskled.o: src\Tasks\TaskLed.c src\BSP\TftDisplay.h src\StdDef.h \
|
./output/taskled.o: src\Tasks\TaskLed.c src\BSP\TftDisplay.h src\StdDef.h \
|
||||||
src\Devices\stdint.h src\Fonts\TftFont.h src\Tasks\TaskLed.h \
|
src\Devices\stdint.h src\Fonts\TftFont.h src\BSP\Led.h \
|
||||||
src\Debug.h stm32f0-stdperiph\stm32f0xx_gpio.h src\Devices\stm32f0xx.h \
|
src\Tasks\TaskLed.h src\BSP\systick.h src\Debug.h \
|
||||||
|
stm32f0-stdperiph\stm32f0xx_gpio.h src\Devices\stm32f0xx.h \
|
||||||
src\Devices\core_cm0.h src\Devices\core_cmInstr.h \
|
src\Devices\core_cm0.h src\Devices\core_cmInstr.h \
|
||||||
src\Devices\core_cmFunc.h src\Devices\system_stm32f0xx.h \
|
src\Devices\core_cmFunc.h src\Devices\system_stm32f0xx.h \
|
||||||
src\Devices\stm32f0xx_conf.h stm32f0-stdperiph\stm32f0xx_adc.h \
|
src\Devices\stm32f0xx_conf.h stm32f0-stdperiph\stm32f0xx_adc.h \
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,7 +1,7 @@
|
||||||
./output/taskmandelbrot.o: src\Tasks\TaskMandelbrot.c \
|
./output/taskmandelbrot.o: src\Tasks\TaskMandelbrot.c \
|
||||||
src\BSP\TftDisplay.h src\StdDef.h src\Devices\stdint.h \
|
src\BSP\TftDisplay.h src\StdDef.h src\Devices\stdint.h \
|
||||||
src\Fonts\TftFont.h src\Tasks\TaskMandelbrot.h src\Debug.h \
|
src\Fonts\TftFont.h src\BSP\systick.h src\Tasks\TaskMandelbrot.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_gpio.h src\Devices\stm32f0xx.h \
|
src\Debug.h stm32f0-stdperiph\stm32f0xx_gpio.h src\Devices\stm32f0xx.h \
|
||||||
src\Devices\core_cm0.h src\Devices\core_cmInstr.h \
|
src\Devices\core_cm0.h src\Devices\core_cmInstr.h \
|
||||||
src\Devices\core_cmFunc.h src\Devices\system_stm32f0xx.h \
|
src\Devices\core_cmFunc.h src\Devices\system_stm32f0xx.h \
|
||||||
src\Devices\stm32f0xx_conf.h stm32f0-stdperiph\stm32f0xx_adc.h \
|
src\Devices\stm32f0xx_conf.h stm32f0-stdperiph\stm32f0xx_adc.h \
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,5 +1,5 @@
|
||||||
./output/taskpoti.o: src\Tasks\TaskPoti.c src\BSP\TftDisplay.h \
|
./output/taskpoti.o: src\Tasks\TaskPoti.c src\BSP\TftDisplay.h \
|
||||||
src\StdDef.h src\Devices\stdint.h src\Fonts\TftFont.h \
|
src\StdDef.h src\Devices\stdint.h src\Fonts\TftFont.h src\BSP\Adc.h \
|
||||||
src\Tasks\TaskPoti.h src\Debug.h stm32f0-stdperiph\stm32f0xx_gpio.h \
|
src\Tasks\TaskPoti.h src\Debug.h stm32f0-stdperiph\stm32f0xx_gpio.h \
|
||||||
src\Devices\stm32f0xx.h src\Devices\core_cm0.h \
|
src\Devices\stm32f0xx.h src\Devices\core_cm0.h \
|
||||||
src\Devices\core_cmInstr.h src\Devices\core_cmFunc.h \
|
src\Devices\core_cmInstr.h src\Devices\core_cmFunc.h \
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,15 +1,15 @@
|
||||||
./output/taskwatch.o: src\Tasks\TaskWatch.c src\BSP\TftDisplay.h \
|
./output/taskwatch.o: src\Tasks\TaskWatch.c src\BSP\TftDisplay.h \
|
||||||
src\StdDef.h src\Devices\stdint.h src\Fonts\TftFont.h \
|
src\StdDef.h src\Devices\stdint.h src\Fonts\TftFont.h \
|
||||||
src\Tasks\TaskWatch.h src\Debug.h stm32f0-stdperiph\stm32f0xx_gpio.h \
|
src\BSP\systick.h src\Tasks\TaskWatch.h src\Debug.h \
|
||||||
src\Devices\stm32f0xx.h src\Devices\core_cm0.h \
|
stm32f0-stdperiph\stm32f0xx_gpio.h src\Devices\stm32f0xx.h \
|
||||||
src\Devices\core_cmInstr.h src\Devices\core_cmFunc.h \
|
src\Devices\core_cm0.h src\Devices\core_cmInstr.h \
|
||||||
src\Devices\system_stm32f0xx.h src\Devices\stm32f0xx_conf.h \
|
src\Devices\core_cmFunc.h src\Devices\system_stm32f0xx.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_adc.h stm32f0-stdperiph\stm32f0xx_can.h \
|
src\Devices\stm32f0xx_conf.h stm32f0-stdperiph\stm32f0xx_adc.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_cec.h stm32f0-stdperiph\stm32f0xx_crc.h \
|
stm32f0-stdperiph\stm32f0xx_can.h stm32f0-stdperiph\stm32f0xx_cec.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_crs.h stm32f0-stdperiph\stm32f0xx_comp.h \
|
stm32f0-stdperiph\stm32f0xx_crc.h stm32f0-stdperiph\stm32f0xx_crs.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_dac.h stm32f0-stdperiph\stm32f0xx_dbgmcu.h \
|
stm32f0-stdperiph\stm32f0xx_comp.h stm32f0-stdperiph\stm32f0xx_dac.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_dma.h stm32f0-stdperiph\stm32f0xx_exti.h \
|
stm32f0-stdperiph\stm32f0xx_dbgmcu.h stm32f0-stdperiph\stm32f0xx_dma.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_flash.h \
|
stm32f0-stdperiph\stm32f0xx_exti.h stm32f0-stdperiph\stm32f0xx_flash.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_syscfg.h stm32f0-stdperiph\stm32f0xx_i2c.h \
|
stm32f0-stdperiph\stm32f0xx_syscfg.h stm32f0-stdperiph\stm32f0xx_i2c.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_iwdg.h stm32f0-stdperiph\stm32f0xx_pwr.h \
|
stm32f0-stdperiph\stm32f0xx_iwdg.h stm32f0-stdperiph\stm32f0xx_pwr.h \
|
||||||
stm32f0-stdperiph\stm32f0xx_rcc.h stm32f0-stdperiph\stm32f0xx_rtc.h \
|
stm32f0-stdperiph\stm32f0xx_rcc.h stm32f0-stdperiph\stm32f0xx_rtc.h \
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -285,6 +285,27 @@ BOOL Tft_DrawVLine(uint16_t const x, uint16_t const y, uint16_t const length)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fills the given area with the background colour
|
||||||
|
*/
|
||||||
|
BOOL Tft_ClearArea(uint16_t const x, uint16_t const y, uint16_t const width,
|
||||||
|
uint16_t const height)
|
||||||
|
{
|
||||||
|
if(((x + width) <= TFT_WIDTH) &&
|
||||||
|
((y + height) <= TFT_HEIGHT))
|
||||||
|
{
|
||||||
|
if((width > 0) && (height > 0))
|
||||||
|
{
|
||||||
|
Tft_SetWindow(x, y, width, height);
|
||||||
|
Tft_WritePixels(Tft_Cfg.colours[Tft_ColourIdx_Background],
|
||||||
|
width * height);
|
||||||
|
}
|
||||||
|
/* else Nothing to do */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Draws the given char at the given position
|
* Draws the given char at the given position
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,17 @@ BOOL Tft_DrawHLine(uint16_t const x, uint16_t const y, uint16_t const length);
|
||||||
*/
|
*/
|
||||||
BOOL Tft_DrawVLine(uint16_t const x, uint16_t const y, uint16_t const length);
|
BOOL Tft_DrawVLine(uint16_t const x, uint16_t const y, uint16_t const length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Fill area with the active background colour
|
||||||
|
* @param x: X coordinate of the upper left corner
|
||||||
|
* @param y: Y coordinate of the upper left corner
|
||||||
|
* @param width: Width of the area in pixels
|
||||||
|
* @param height: Height of the area in pixels
|
||||||
|
* @retval TRUE if the function succeeded else FALSE
|
||||||
|
*/
|
||||||
|
BOOL Tft_ClearArea(uint16_t const x, uint16_t const y, uint16_t const width,
|
||||||
|
uint16_t const height);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Draw character (in active foreground colour)
|
* @brief Draw character (in active foreground colour)
|
||||||
* @param x: X coordinate refering to the left edge of the char
|
* @param x: X coordinate refering to the left edge of the char
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
#define _100_ms 100
|
#define _100_ms 100
|
||||||
|
|
||||||
/* Private variables ------------------------------------------------------- */
|
/* Private variables ------------------------------------------------------- */
|
||||||
static uint32_t msTicks; // Counts 1ms timeTicks
|
static volatile uint32_t msTicks; // Counts 1ms timeTicks
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
/*-----------------------------------------------------------------------------
|
||||||
* SysTick_Handler: Counts every 1ms
|
* SysTick_Handler: Counts every 1ms
|
||||||
|
|
@ -40,3 +40,11 @@ void SysTick_Handler (void){
|
||||||
void Tick_InitSysTick(void){
|
void Tick_InitSysTick(void){
|
||||||
SysTick_Config(SystemCoreClock/1000); /* Generate interrupt each 1 ms */
|
SysTick_Config(SystemCoreClock/1000); /* Generate interrupt each 1 ms */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------
|
||||||
|
* Tick_GetMs: Returns the milliseconds since Tick_InitSysTick* Parameters: (none)
|
||||||
|
* Return: current tick count in ms
|
||||||
|
*------------------------------------------------------------------------------*/
|
||||||
|
uint32_t Tick_GetMs(void){
|
||||||
|
return msTicks;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
/* Exported functions ------------------------------------------------------- */
|
/* Exported functions ------------------------------------------------------- */
|
||||||
void Tick_Delay (uint32_t dlyTicks);
|
void Tick_Delay (uint32_t dlyTicks);
|
||||||
void Tick_InitSysTick(void);
|
void Tick_InitSysTick(void);
|
||||||
|
uint32_t Tick_GetMs(void);
|
||||||
void SysTick_Handler2 (void);
|
void SysTick_Handler2 (void);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,21 @@
|
||||||
#define MAX_LEN 14 // Maximale Anzahl Zeichen pro Zeile
|
#define MAX_LEN 14 // Maximale Anzahl Zeichen pro Zeile
|
||||||
static char tmpBuf[MAX_LEN];
|
static char tmpBuf[MAX_LEN];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Increments the counter and prints it, the label is only drawn once
|
||||||
|
*/
|
||||||
void TaskCounter (void)
|
void TaskCounter (void)
|
||||||
{
|
{
|
||||||
Debug_Set(counter);
|
|
||||||
static uint32_t counter = 0;
|
static uint32_t counter = 0;
|
||||||
|
static BOOL initDone = FALSE;
|
||||||
|
|
||||||
|
if (!initDone)
|
||||||
|
{
|
||||||
|
Tft_DrawString(10, 18+0*24, "Cnt ");
|
||||||
|
initDone = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
counter++;
|
counter++;
|
||||||
snprintf(tmpBuf, MAX_LEN, "%d", counter);
|
snprintf(tmpBuf, MAX_LEN, "%d", counter);
|
||||||
Tft_DrawString(10, 18+0*24, "Cnt ");
|
|
||||||
Tft_DrawString(10 + 16*7, 18+0*24, tmpBuf);
|
Tft_DrawString(10 + 16*7, 18+0*24, tmpBuf);
|
||||||
Debug_Unset(counter);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,90 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "BSP/TftDisplay.h"
|
#include "BSP/TftDisplay.h"
|
||||||
|
#include "BSP/Key.h"
|
||||||
|
#include "BSP/systick.h"
|
||||||
#include "StdDef.h"
|
#include "StdDef.h"
|
||||||
#include "TaskKey.h"
|
#include "TaskKey.h"
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define MAX_LEN 14 // Maximale Anzahl Zeichen pro Zeile
|
||||||
|
#define DEBOUNCE_MS 20u
|
||||||
|
|
||||||
|
static uint16_t current_color = TFT_COLOR_BLACK;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the key state, a change is only accepted after being stable for DEBOUNCE_MS
|
||||||
|
*/
|
||||||
|
static BOOL Key_GetDebounced (KeyType key, uint32_t now)
|
||||||
|
{
|
||||||
|
static BOOL lastRaw[KeyType_Count];
|
||||||
|
static BOOL stable[KeyType_Count];
|
||||||
|
static uint32_t lastChange[KeyType_Count];
|
||||||
|
|
||||||
|
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];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Shows the debounced key states, key USER changes the colour on each press
|
||||||
|
*/
|
||||||
void TaskKey (void)
|
void TaskKey (void)
|
||||||
{
|
{
|
||||||
Debug_Set(key);
|
|
||||||
|
static char tmpBuf[MAX_LEN];
|
||||||
|
static BOOL userPrev = FALSE;
|
||||||
|
static BOOL initDone = FALSE;
|
||||||
|
static uint8_t lastState = 0;
|
||||||
|
|
||||||
|
uint32_t now = Tick_GetMs();
|
||||||
|
BOOL wakeup = Key_GetDebounced(KeyType_WAKEUP, now);
|
||||||
|
BOOL user0 = Key_GetDebounced(KeyType_USER0, now);
|
||||||
|
BOOL user1 = Key_GetDebounced(KeyType_USER1, now);
|
||||||
|
BOOL user = user0 || user1;
|
||||||
|
uint8_t state = (wakeup << 2) | (user0 << 1) | user1;
|
||||||
|
|
||||||
|
if (user && !userPrev)
|
||||||
|
{
|
||||||
|
if (current_color == TFT_COLOR_BLACK)
|
||||||
|
{
|
||||||
|
current_color = TFT_COLOR_BLUE;
|
||||||
|
Tft_SetForegroundColourRgb16(TFT_COLOR_BLUE);
|
||||||
|
}
|
||||||
|
else if (current_color == TFT_COLOR_BLUE)
|
||||||
|
{
|
||||||
|
current_color = TFT_COLOR_GREEN;
|
||||||
|
Tft_SetForegroundColourRgb16(TFT_COLOR_GREEN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current_color = TFT_COLOR_BLACK;
|
||||||
|
Tft_SetForegroundColourRgb16(TFT_COLOR_BLACK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
userPrev = user;
|
||||||
|
|
||||||
|
if (!initDone)
|
||||||
|
{
|
||||||
Tft_DrawString(10, 18+1*24, "Key ");
|
Tft_DrawString(10, 18+1*24, "Key ");
|
||||||
Debug_Unset(key);
|
}
|
||||||
|
if (!initDone || state != lastState)
|
||||||
|
{
|
||||||
|
snprintf(tmpBuf, MAX_LEN, "%d %d %d", wakeup, user0, user1);
|
||||||
|
Tft_DrawString(10 + 16*7, 18+1*24, tmpBuf);
|
||||||
|
lastState = state;
|
||||||
|
}
|
||||||
|
initDone = TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,14 +9,38 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "BSP/TftDisplay.h"
|
#include "BSP/TftDisplay.h"
|
||||||
|
#include "BSP/Led.h"
|
||||||
#include "StdDef.h"
|
#include "StdDef.h"
|
||||||
#include "TaskLed.h"
|
#include "TaskLed.h"
|
||||||
|
#include "BSP/systick.h"
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
|
||||||
|
#define LED_PERIOD_MS 100u
|
||||||
|
#define LED_COUNT (sizeof(ledSeq) / sizeof(ledSeq[0]))
|
||||||
|
|
||||||
|
static const LEDType ledSeq[] = { LEDType_LED3, LEDType_LED4, LEDType_LED5 };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Non-blocking running light, switches to the next LED every 100 ms
|
||||||
|
*/
|
||||||
void TaskLed (void)
|
void TaskLed (void)
|
||||||
{
|
{
|
||||||
Debug_Set(led);
|
static BOOL initDone = FALSE;
|
||||||
|
static uint8_t idx = 0;
|
||||||
|
static uint32_t lastSwitch = 0;
|
||||||
|
|
||||||
|
if (!initDone)
|
||||||
|
{
|
||||||
Tft_DrawString(10, 18+2*24, "Led ");
|
Tft_DrawString(10, 18+2*24, "Led ");
|
||||||
Debug_Unset(led);
|
Led_TurnOn(ledSeq[0]);
|
||||||
|
lastSwitch = Tick_GetMs();
|
||||||
|
initDone = TRUE;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "BSP/TftDisplay.h"
|
#include "BSP/TftDisplay.h"
|
||||||
|
#include "BSP/systick.h"
|
||||||
#include "StdDef.h"
|
#include "StdDef.h"
|
||||||
#include "TaskMandelbrot.h"
|
#include "TaskMandelbrot.h"
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
|
@ -19,9 +20,16 @@
|
||||||
#define ImageHeight 150
|
#define ImageHeight 150
|
||||||
#define ImageWidth 150
|
#define ImageWidth 150
|
||||||
#define OFFSET 150
|
#define OFFSET 150
|
||||||
|
#define TIME_BUDGET_MS 5u // Maximale Rechenzeit pro Aufruf
|
||||||
|
|
||||||
|
static unsigned curX = 0;
|
||||||
|
static unsigned curY = 0;
|
||||||
|
static BOOL clearing = FALSE;
|
||||||
|
|
||||||
static void MandelBrot (void)
|
/**
|
||||||
|
* @brief Calculates and draws a single pixel of the Mandelbrot set
|
||||||
|
*/
|
||||||
|
static void MandelBrotPixel (unsigned x, unsigned y)
|
||||||
{
|
{
|
||||||
double MinRe = -2.0;
|
double MinRe = -2.0;
|
||||||
double MaxRe = 1.0;
|
double MaxRe = 1.0;
|
||||||
|
|
@ -31,11 +39,7 @@ static void MandelBrot (void)
|
||||||
double Im_factor = (MaxIm-MinIm)/(ImageHeight-1);
|
double Im_factor = (MaxIm-MinIm)/(ImageHeight-1);
|
||||||
unsigned MaxIterations = 30;
|
unsigned MaxIterations = 30;
|
||||||
|
|
||||||
for(unsigned y=0; y<ImageHeight; ++y)
|
|
||||||
{
|
|
||||||
double c_im = MaxIm - y*Im_factor;
|
double c_im = MaxIm - y*Im_factor;
|
||||||
for(unsigned x=0; x<ImageWidth; ++x)
|
|
||||||
{
|
|
||||||
double c_re = MinRe + x*Re_factor;
|
double c_re = MinRe + x*Re_factor;
|
||||||
|
|
||||||
double Z_re = c_re, Z_im = c_im;
|
double Z_re = c_re, Z_im = c_im;
|
||||||
|
|
@ -52,15 +56,52 @@ static void MandelBrot (void)
|
||||||
Z_re = Z_re2 - Z_im2 + c_re;
|
Z_re = Z_re2 - Z_im2 + c_re;
|
||||||
}
|
}
|
||||||
if(isInside) { Tft_DrawPixel(y, x + OFFSET); }
|
if(isInside) { Tft_DrawPixel(y, x + OFFSET); }
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Draws the Mandelbrot set in slices of at most TIME_BUDGET_MS per call,
|
||||||
|
* continues at the last pixel on the next call. A finished image is
|
||||||
|
* cleared row by row before it is drawn again.
|
||||||
|
*/
|
||||||
void TaskMandelbrot (void)
|
void TaskMandelbrot (void)
|
||||||
{
|
{
|
||||||
Debug_Set(mandelbrot);
|
static BOOL initDone = FALSE;
|
||||||
|
uint32_t start = Tick_GetMs();
|
||||||
|
|
||||||
|
if (!initDone)
|
||||||
|
{
|
||||||
Tft_DrawString(10, 18+5*24, "ManBr ");
|
Tft_DrawString(10, 18+5*24, "ManBr ");
|
||||||
MandelBrot();
|
initDone = TRUE;
|
||||||
Debug_Unset(mandelbrot);
|
}
|
||||||
|
|
||||||
|
while (Tick_GetMs() - start < TIME_BUDGET_MS)
|
||||||
|
{
|
||||||
|
if (clearing)
|
||||||
|
{
|
||||||
|
Tft_ClearArea(0, curX + OFFSET, ImageHeight, 1);
|
||||||
|
|
||||||
|
if (++curX >= ImageWidth)
|
||||||
|
{
|
||||||
|
curX = 0;
|
||||||
|
clearing = FALSE;
|
||||||
|
// the image area overlaps the lower part of the label
|
||||||
|
Tft_DrawString(10, 18+5*24, "ManBr ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MandelBrotPixel(curX, curY);
|
||||||
|
|
||||||
|
if (++curX >= ImageWidth)
|
||||||
|
{
|
||||||
|
curX = 0;
|
||||||
|
if (++curY >= ImageHeight)
|
||||||
|
{
|
||||||
|
curY = 0;
|
||||||
|
clearing = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,39 @@
|
||||||
|
|
||||||
|
|
||||||
#include "BSP/TftDisplay.h"
|
#include "BSP/TftDisplay.h"
|
||||||
|
#include "BSP/Adc.h"
|
||||||
#include "StdDef.h"
|
#include "StdDef.h"
|
||||||
#include "TaskPoti.h"
|
#include "TaskPoti.h"
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define MAX_ADC_TIMEOUT 5
|
||||||
|
#define MAX_LEN 14
|
||||||
|
#define POTI_THRESHOLD_MV 10
|
||||||
|
|
||||||
|
static char tmpBuf[MAX_LEN];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Prints the potentiometer voltage in mV, redraws only on a change > POTI_THRESHOLD_MV
|
||||||
|
*/
|
||||||
void TaskPoti (void)
|
void TaskPoti (void)
|
||||||
{
|
{
|
||||||
Debug_Set(poti);
|
static BOOL initDone = FALSE;
|
||||||
|
static int32_t lastValue = 0;
|
||||||
|
|
||||||
|
int32_t potiValue = Adc_GetValue(MAX_ADC_TIMEOUT);
|
||||||
|
|
||||||
|
if (!initDone)
|
||||||
|
{
|
||||||
Tft_DrawString(10, 18+4*24, "Poti ");
|
Tft_DrawString(10, 18+4*24, "Poti ");
|
||||||
Debug_Unset(poti);
|
}
|
||||||
|
if (!initDone || abs(potiValue - lastValue) > POTI_THRESHOLD_MV)
|
||||||
|
{
|
||||||
|
snprintf(tmpBuf, MAX_LEN, "%4d", potiValue);
|
||||||
|
Tft_DrawString(10 + 16*7, 18+4*24, tmpBuf);
|
||||||
|
lastValue = potiValue;
|
||||||
|
}
|
||||||
|
initDone = TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,19 +4,41 @@
|
||||||
* @author Josef Langer
|
* @author Josef Langer
|
||||||
* @version V1.1
|
* @version V1.1
|
||||||
* @date 07.10.2022
|
* @date 07.10.2022
|
||||||
* @brief Task Watch, prints the operating time on the display (hh:mm:ss)
|
* @brief Task Watch, prints the operating time on the display (mm:ss)
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "BSP/TftDisplay.h"
|
#include "BSP/TftDisplay.h"
|
||||||
|
#include "BSP/systick.h"
|
||||||
#include "StdDef.h"
|
#include "StdDef.h"
|
||||||
#include "TaskWatch.h"
|
#include "TaskWatch.h"
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define MAX_LEN 14 // Maximale Anzahl Zeichen pro Zeile
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Prints the operating time as mm:ss, redraws only when the second changes
|
||||||
|
*/
|
||||||
void TaskWatch (void)
|
void TaskWatch (void)
|
||||||
{
|
{
|
||||||
Debug_Set(watch);
|
static char tmpBuf[MAX_LEN];
|
||||||
|
static BOOL initDone = FALSE;
|
||||||
|
static uint32_t lastSeconds = 0;
|
||||||
|
|
||||||
|
uint32_t seconds = Tick_GetMs() / 1000u;
|
||||||
|
|
||||||
|
if (!initDone)
|
||||||
|
{
|
||||||
Tft_DrawString(10, 18+3*24, "Watch ");
|
Tft_DrawString(10, 18+3*24, "Watch ");
|
||||||
Debug_Unset(watch);
|
}
|
||||||
|
if (!initDone || seconds != lastSeconds)
|
||||||
|
{
|
||||||
|
snprintf(tmpBuf, MAX_LEN, "%02u:%02u", seconds / 60u, seconds % 60u);
|
||||||
|
Tft_DrawString(10 + 16*7, 18+3*24, tmpBuf);
|
||||||
|
lastSeconds = seconds;
|
||||||
|
}
|
||||||
|
initDone = TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,30 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define PS_SIZE 1024
|
||||||
|
|
||||||
|
static char processStack[PS_SIZE] __attribute__((aligned(8)));
|
||||||
|
|
||||||
|
static void Superloop(void) __attribute__((noinline, noreturn));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Switches the thread mode to the process stack and starts the superloop.
|
||||||
|
* main itself must not use its stack frame after the switch, because
|
||||||
|
* that frame was created on the main stack.
|
||||||
|
*/
|
||||||
int main(void)
|
int main(void)
|
||||||
|
{
|
||||||
|
__set_PSP((uint32_t)processStack + PS_SIZE);
|
||||||
|
__set_CONTROL(2);
|
||||||
|
__ISB();
|
||||||
|
|
||||||
|
Superloop();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialization and superloop, runs on the process stack
|
||||||
|
*/
|
||||||
|
static void Superloop(void)
|
||||||
{
|
{
|
||||||
Key_Init();
|
Key_Init();
|
||||||
Led_Init();
|
Led_Init();
|
||||||
|
|
@ -30,23 +53,33 @@ int main(void)
|
||||||
Adc_Init(ADC_CHANNEL_POTENTIOMETER);
|
Adc_Init(ADC_CHANNEL_POTENTIOMETER);
|
||||||
Tick_InitSysTick();
|
Tick_InitSysTick();
|
||||||
Debug_Init();
|
Debug_Init();
|
||||||
|
Tft_ClearScreen();
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
Tft_ClearScreen();
|
Debug_Set(counter);
|
||||||
|
|
||||||
//measure overhead
|
|
||||||
Debug_Set(mandelbrot);
|
|
||||||
Debug_Unset(mandelbrot);
|
|
||||||
Debug_Set(mandelbrot);
|
|
||||||
Debug_Unset(mandelbrot);
|
|
||||||
|
|
||||||
TaskCounter();
|
TaskCounter();
|
||||||
|
Debug_Unset(counter);
|
||||||
|
|
||||||
|
Debug_Set(key);
|
||||||
TaskKey();
|
TaskKey();
|
||||||
|
Debug_Unset(key);
|
||||||
|
|
||||||
|
Debug_Set(led);
|
||||||
TaskLed();
|
TaskLed();
|
||||||
|
Debug_Unset(led);
|
||||||
|
|
||||||
|
Debug_Set(watch);
|
||||||
TaskWatch();
|
TaskWatch();
|
||||||
|
Debug_Unset(watch);
|
||||||
|
|
||||||
|
Debug_Set(poti);
|
||||||
TaskPoti();
|
TaskPoti();
|
||||||
|
Debug_Unset(poti);
|
||||||
|
|
||||||
|
Debug_Set(mandelbrot);
|
||||||
TaskMandelbrot();
|
TaskMandelbrot();
|
||||||
|
Debug_Unset(mandelbrot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue