Added screen timeout and more warnings, increased timescale

This commit is contained in:
2026-06-18 23:04:26 +02:00
parent 4bbe531d08
commit 27c866f26b
9 changed files with 3973 additions and 3391 deletions
Binary file not shown.
+23 -3
View File
@@ -432,12 +432,32 @@ static const unsigned char icon_stats[] = {
0x00, 0x00,
};
#define ICON_COUNT 6
// icon_settings: 16x16
static const unsigned char icon_settings[] = {
0x03, 0xc0,
0x03, 0xc0,
0x03, 0xc0,
0x07, 0xf0,
0x0f, 0xf8,
0x1f, 0xfc,
0xff, 0x7f,
0xfe, 0x3f,
0xfc, 0x1f,
0xfe, 0x3f,
0x1f, 0x7c,
0x1f, 0xfc,
0x0f, 0xf8,
0x07, 0xf0,
0x03, 0xc0,
0x03, 0xc0,
};
#define ICON_COUNT 7
static const unsigned char *const menu_icons[ICON_COUNT] = {
icon_feed, icon_play, icon_sleep, icon_clean, icon_heal, icon_stats,
icon_feed, icon_play, icon_sleep, icon_clean, icon_heal, icon_stats, icon_settings,
};
static const char *const menu_labels[ICON_COUNT] = {
"FEED", "PLAY", "SLEEP", "CLEAN", "HEAL", "STATS",
"FEED", "PLAY", "SLEEP", "CLEAN", "HEAL", "STATS", "SETTINGS",
};
#endif // _SPRITES_H
+15 -3
View File
@@ -253,6 +253,17 @@ def icon_stats(): # bar chart
hline(g, x, x + 1, yy)
return g
def icon_settings(): # gear
g = grid(16, 16)
fill_ellipse(g, 8, 8, 6, 6)
# four teeth
for x in range(6, 10):
vline(g, x, 0, 2); vline(g, x, 13, 15)
for y in range(6, 10):
hline(g, 0, 2, y); hline(g, 13, 15, y)
fill_ellipse(g, 8, 8, 2, 2, 0) # hub hole
return g
# ---------------------------------------------------------------- main
def main():
print("// Auto-generated by sprites_gen.py -- do not edit by hand.")
@@ -294,16 +305,17 @@ def main():
("icon_clean", icon_clean()),
("icon_heal", icon_heal()),
("icon_stats", icon_stats()),
("icon_settings", icon_settings()),
]
for n, g in icons:
emit(n, g)
print("#define ICON_COUNT 6")
print("#define ICON_COUNT 7")
print("static const unsigned char *const menu_icons[ICON_COUNT] = {")
print(" icon_feed, icon_play, icon_sleep, icon_clean, icon_heal, icon_stats,")
print(" icon_feed, icon_play, icon_sleep, icon_clean, icon_heal, icon_stats, icon_settings,")
print("};")
print('static const char *const menu_labels[ICON_COUNT] = {')
print(' "FEED", "PLAY", "SLEEP", "CLEAN", "HEAL", "STATS",')
print(' "FEED", "PLAY", "SLEEP", "CLEAN", "HEAL", "STATS", "SETTINGS",')
print("};")
print()
print("#endif // _SPRITES_H")
BIN
View File
Binary file not shown.
+169 -44
View File
@@ -30,11 +30,17 @@
// ----------------------------------------------------------------- tuning
#define FRAME_MS 60 // main loop period
#define TICK_FRAMES 50 // stat update every ~3 s (50 * 60 ms)
#define TICK_FRAMES 250 // stat update every ~15 s (250 * 60 ms)
#define ANIM_FRAMES 12 // how long an action reaction is shown
// With the values below an untended pet survives roughly half an hour:
// a need empties in ~20 min, after which health bleeds down over ~10 more.
// ----------------------------------------------------------------- state
enum { SCR_MAIN, SCR_STATS, SCR_DEAD };
enum { SCR_MAIN, SCR_STATS, SCR_DEAD, SCR_SETTINGS };
// notification thresholds: gentle chirp at <50%, urgent at <20%
enum { N_FOOD, N_FUN, N_ENGY, N_WASH, N_COUNT };
typedef struct {
int8_t satiety; // 0..100 (fullness)
@@ -55,9 +61,26 @@ static uint8_t anim_exp; // expression forced during a reaction
static uint8_t anim_timer; // frames remaining for the reaction
static uint32_t frame; // free-running frame counter
static uint16_t tick_acc; // frames since last stat tick
static uint8_t warn_flag[N_COUNT]; // already chirped a <50% warning
static uint8_t crit_flag[N_COUNT]; // already chirped a <20% warning
// settings
static uint8_t sound_on = 1;
static uint8_t timeout_idx = 1; // index into screen_timeout_opts (default 30 s)
static uint8_t set_sel = 0; // highlighted row on the settings screen
// screen-off-on-inactivity options, in frames (0 = never sleep the display)
static const uint16_t screen_timeout_opts[] = { 250, 500, 1000, 0 };
static const char *const screen_timeout_names[] = { "15s", "30s", "60s", "Off" };
#define TIMEOUT_OPT_COUNT 4
#define SETTINGS_ROWS 3 // screen-off, sound, back
// display power state
static uint8_t disp_on = 1;
static uint32_t idle_frames = 0; // frames since the last button activity
// menu icon order must match sprites.h menu_icons[] / menu_labels[]
enum { ACT_FEED, ACT_PLAY, ACT_SLEEP, ACT_CLEAN, ACT_HEAL, ACT_STATS };
enum { ACT_FEED, ACT_PLAY, ACT_SLEEP, ACT_CLEAN, ACT_HEAL, ACT_STATS, ACT_SETTINGS };
// ----------------------------------------------------------------- helpers
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
@@ -65,6 +88,7 @@ static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
// short square-wave beep on the passive piezo (blocking, ms-scale only)
static void beep(uint16_t freq, uint16_t ms)
{
if (!sound_on) return;
if (freq == 0) { Delay_Ms(ms); return; }
uint32_t half = 500000u / freq; // half-period in us
uint32_t cycles = ((uint32_t)ms * 1000u) / (half * 2u);
@@ -96,6 +120,36 @@ static void pet_reset(void)
pet.alive = 1;
screen = SCR_MAIN;
cursor = 0;
for (int i = 0; i < N_COUNT; i++) { warn_flag[i] = 0; crit_flag[i] = 0; }
}
// Chirp once when a need first drops below 50% (gentle) or 20% (urgent),
// re-arming only after it recovers. Audible even while the screen is off,
// so it works as a "tend to me" reminder.
static void notify(uint8_t idx, int8_t val)
{
if (val < 20) {
if (!crit_flag[idx]) { // urgent: descending triple
beep(1568, 60); beep(1175, 60); beep(880, 90);
crit_flag[idx] = 1; warn_flag[idx] = 1;
}
} else if (val < 50) {
if (!warn_flag[idx]) { // gentle: single chirp
beep(1568, 50);
warn_flag[idx] = 1;
}
crit_flag[idx] = 0;
} else {
warn_flag[idx] = 0; crit_flag[idx] = 0;
}
}
static void check_notifications(void)
{
notify(N_FOOD, pet.satiety);
notify(N_FUN, pet.happy);
notify(N_ENGY, pet.energy);
notify(N_WASH, pet.hygiene);
}
// pick the expression frame to draw this instant
@@ -156,6 +210,12 @@ static void do_action(uint8_t act)
screen = SCR_STATS;
beep(659, 40);
break;
case ACT_SETTINGS:
screen = SCR_SETTINGS;
set_sel = 0;
beep(659, 40);
break;
}
}
@@ -165,35 +225,38 @@ static void game_tick(void)
pet.age_min++;
if (pet.sleeping) {
pet.energy = clamp100(pet.energy + 10);
// drift down slowly even while asleep
pet.energy = clamp100(pet.energy + 6);
// needs still drift down slowly even while asleep
pet.satiety = clamp100(pet.satiety - 1);
if (pet.energy >= 100) pet.sleeping = 0; // wakes when rested
} else {
pet.satiety = clamp100(pet.satiety - 3);
pet.energy = clamp100(pet.energy - 2);
pet.happy = clamp100(pet.happy - 2);
pet.satiety = clamp100(pet.satiety - 1);
pet.energy = clamp100(pet.energy - 1);
pet.happy = clamp100(pet.happy - 1);
}
pet.hygiene = clamp100(pet.hygiene - 1);
// hygiene drifts every other tick
if (pet.age_min & 1) pet.hygiene = clamp100(pet.hygiene - 1);
// random-ish bowel movements (LFSR-free: derive from counters)
// occasional bowel movements (derived from counters, no RNG needed)
if (!pet.sleeping && pet.poop < 3 &&
((pet.age_min * 7u + frame) & 0x0F) == 0)
((pet.age_min * 7u + frame) & 0x1F) == 0)
pet.poop++;
// being dirty / full of poop saps happiness
if (pet.poop) pet.happy = clamp100(pet.happy - pet.poop);
if (pet.hygiene < 20) pet.happy = clamp100(pet.happy - 1);
// being dirty / full of poop slowly saps happiness
if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1);
if (pet.hygiene < 20 && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1);
// health responds to overall wellbeing
int8_t lo = pet.satiety;
if (pet.happy < lo) lo = pet.happy;
if (pet.energy < lo) lo = pet.energy;
if (pet.hygiene < lo) lo = pet.hygiene;
if (lo < 15) pet.health = clamp100(pet.health - 5);
if (lo < 15) pet.health = clamp100(pet.health - 3);
else if (lo > 50) pet.health = clamp100(pet.health + 2);
check_notifications();
if (pet.health <= 0) {
pet.alive = 0;
screen = SCR_DEAD;
@@ -213,12 +276,12 @@ static void draw_center_str(int y, const char *s)
static void draw_menu_bar(void)
{
// 6 icons across the bottom, selected one boxed
// 7 icons across the bottom (18 px slots), selected one boxed
for (uint8_t i = 0; i < ICON_COUNT; i++) {
int x = i * 21 + 3;
int x = i * 18 + 1;
ssd1306_drawImage(x, 48, menu_icons[i], ICON_W, ICON_H, 0);
if (i == cursor)
ssd1306_drawRect(x - 2, 46, ICON_W + 3, ICON_H + 2, 1);
ssd1306_drawRect(x - 1, 47, ICON_W + 1, ICON_H + 1, 1);
}
}
@@ -292,6 +355,28 @@ static void draw_dead(void)
ssd1306_refresh();
}
static void draw_settings(void)
{
ssd1306_setbuf(0);
draw_center_str(0, "- SETTINGS -");
ssd1306_drawFastHLine(0, 10, SSD1306_W, 1);
char rows[SETTINGS_ROWS][17];
snprintf(rows[0], 17, "Screen off:%s", screen_timeout_names[timeout_idx]);
snprintf(rows[1], 17, "Sound: %s", sound_on ? "On" : "Off");
snprintf(rows[2], 17, "Back");
for (uint8_t r = 0; r < SETTINGS_ROWS; r++) {
int y = 18 + r * 12;
if (r == set_sel) ssd1306_fillRect(0, y - 1, SSD1306_W, 10, 1);
// selected row drawn inverted (color 0 on the lit bar)
ssd1306_drawstr(4, y, rows[r], r == set_sel ? 0 : 1);
}
draw_center_str(56, "L/R move OK use");
ssd1306_refresh();
}
// ----------------------------------------------------------------- input
typedef struct { uint8_t ok, left, right; } Buttons;
@@ -366,48 +451,88 @@ int main(void)
uint8_t ok_edge = b.ok && !prev.ok;
uint8_t left_edge = b.left && !prev.left;
uint8_t right_edge = b.right && !prev.right;
uint8_t any_edge = ok_edge | left_edge | right_edge;
prev = b;
switch (screen) {
case SCR_MAIN:
if (left_edge) {
cursor = (cursor + ICON_COUNT - 1) % ICON_COUNT;
beep(1047, 25);
}
if (right_edge) {
cursor = (cursor + 1) % ICON_COUNT;
beep(1047, 25);
}
if (ok_edge) do_action(cursor);
draw_main();
break;
if (any_edge) idle_frames = 0;
case SCR_STATS:
if (ok_edge || left_edge || right_edge) {
screen = SCR_MAIN;
beep(880, 30);
if (!disp_on) {
// screen is asleep: the first press only wakes it (not an action)
if (any_edge) {
ssd1306_cmd(SSD1306_DISPLAYON);
disp_on = 1;
}
draw_stats();
break;
} else {
switch (screen) {
case SCR_MAIN:
if (left_edge) {
cursor = (cursor + ICON_COUNT - 1) % ICON_COUNT;
beep(1047, 25);
}
if (right_edge) {
cursor = (cursor + 1) % ICON_COUNT;
beep(1047, 25);
}
if (ok_edge) do_action(cursor);
draw_main();
break;
case SCR_DEAD:
if (ok_edge) { // start a new pet
pet_reset();
beep(659, 80); beep(988, 120);
case SCR_STATS:
if (any_edge) { screen = SCR_MAIN; beep(880, 30); }
draw_stats();
break;
case SCR_SETTINGS:
if (left_edge) {
set_sel = (set_sel + SETTINGS_ROWS - 1) % SETTINGS_ROWS;
beep(1047, 25);
}
if (right_edge) {
set_sel = (set_sel + 1) % SETTINGS_ROWS;
beep(1047, 25);
}
if (ok_edge) {
if (set_sel == 0) { // cycle screen-off timeout
timeout_idx = (timeout_idx + 1) % TIMEOUT_OPT_COUNT;
beep(880, 40);
} else if (set_sel == 1) { // toggle sound
sound_on = !sound_on;
beep(988, 60); // only audible if just enabled
} else { // Back
screen = SCR_MAIN;
beep(880, 30);
}
}
draw_settings();
break;
case SCR_DEAD:
if (ok_edge) { // start a new pet
pet_reset();
beep(659, 80); beep(988, 120);
}
draw_dead();
break;
}
// sleep the display after the configured idle period
uint16_t timeout = screen_timeout_opts[timeout_idx];
if (timeout && idle_frames >= timeout) {
ssd1306_cmd(SSD1306_DISPLAYOFF);
disp_on = 0;
}
draw_dead();
break;
}
if (anim_timer) anim_timer--;
// advance game time independent of which screen is showing
// advance game time independent of screen / display state
if (pet.alive && ++tick_acc >= TICK_FRAMES) {
tick_acc = 0;
game_tick();
}
frame++;
idle_frames++;
Delay_Ms(FRAME_MS);
}
}
BIN
View File
Binary file not shown.
+597 -545
View File
File diff suppressed because it is too large Load Diff
+2763 -2411
View File
File diff suppressed because it is too large Load Diff
+406 -385
View File
@@ -1,51 +1,50 @@
Archive member included to satisfy reference by file (symbol)
../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
/tmp/ccuFqAhq.ltrans0.ltrans.o (__divsi3)
/tmp/cczcSDec.ltrans0.ltrans.o (__divsi3)
Discarded input sections
.text 0x00000000 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o
.data 0x00000000 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o
.bss 0x00000000 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.vprintf 0x00000000 0x16 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.sprintf 0x00000000 0x26 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.strcpy 0x00000000 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.strncpy 0x00000000 0x1c /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.strcmp 0x00000000 0x1a /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.strncmp 0x00000000 0x2e /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.strchr 0x00000000 0x16 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.strrchr 0x00000000 0x3c /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.memcmp 0x00000000 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.memmove 0x00000000 0x5e /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.memchr 0x00000000 0x1a /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.strnlen 0x00000000 0x2a /tmp/ccuFqAhq.ltrans0.ltrans.o
.text 0x00000000 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.data 0x00000000 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.bss 0x00000000 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.text.vprintf 0x00000000 0x16 /tmp/cczcSDec.ltrans0.ltrans.o
.text.sprintf 0x00000000 0x26 /tmp/cczcSDec.ltrans0.ltrans.o
.text.strncpy 0x00000000 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.text.strcmp 0x00000000 0x1a /tmp/cczcSDec.ltrans0.ltrans.o
.text.strncmp 0x00000000 0x2e /tmp/cczcSDec.ltrans0.ltrans.o
.text.strchr 0x00000000 0x16 /tmp/cczcSDec.ltrans0.ltrans.o
.text.strrchr 0x00000000 0x3c /tmp/cczcSDec.ltrans0.ltrans.o
.text.memcmp 0x00000000 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.text.memmove 0x00000000 0x5e /tmp/cczcSDec.ltrans0.ltrans.o
.text.memchr 0x00000000 0x1a /tmp/cczcSDec.ltrans0.ltrans.o
.text.strnlen 0x00000000 0x2a /tmp/cczcSDec.ltrans0.ltrans.o
.text.twoway_strstr
0x00000000 0x232 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.strstr 0x00000000 0x11c /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x232 /tmp/cczcSDec.ltrans0.ltrans.o
.text.strstr 0x00000000 0x11c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.puts.str1.4
0x00000000 0x2 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.puts 0x00000000 0x40 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.setjmp 0x00000000 0x10 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.longjmp 0x00000000 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.putchar 0x00000000 0x68 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x2 /tmp/cczcSDec.ltrans0.ltrans.o
.text.puts 0x00000000 0x40 /tmp/cczcSDec.ltrans0.ltrans.o
.text.setjmp 0x00000000 0x10 /tmp/cczcSDec.ltrans0.ltrans.o
.text.longjmp 0x00000000 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.text.putchar 0x00000000 0x68 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.APBAHBPrescTable.lto_priv.0
0x00000000 0x10 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x10 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.ADCPrescTable.lto_priv.0
0x00000000 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.APBAHBPrescTable.lto_priv.1
0x00000000 0x10 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x10 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.ADCPrescTable.lto_priv.1
0x00000000 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o
.comment 0x00000000 0x35 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.comment 0x00000000 0x35 /tmp/cczcSDec.ltrans0.ltrans.o
.note.GNU-stack
0x00000000 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o
.comment 0x00000000 0x35 /tmp/cc6O5Yfp.debug.temp.o
0x00000000 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.comment 0x00000000 0x35 /tmp/ccb2Xekb.debug.temp.o
.note.GNU-stack
0x00000000 0x0 /tmp/cc6O5Yfp.debug.temp.o
.comment 0x00000000 0x35 /tmp/ccQWTvKu.debug.temp.o
0x00000000 0x0 /tmp/ccb2Xekb.debug.temp.o
.comment 0x00000000 0x35 /tmp/ccR20L1X.debug.temp.o
.note.GNU-stack
0x00000000 0x0 /tmp/ccQWTvKu.debug.temp.o
0x00000000 0x0 /tmp/ccR20L1X.debug.temp.o
.data 0x00000000 0x0 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.bss 0x00000000 0x0 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
@@ -58,11 +57,11 @@ RAM 0x20000000 0x00000800 xrw
Linker script and memory map
LOAD /tmp/ccc3BNuu.o
LOAD /tmp/ccuFqAhq.ltrans0.ltrans.o
LOAD /tmp/cc6O5Yfp.debug.temp.o
LOAD /tmp/ccQWTvKu.debug.temp.o
LOAD /tmp/ccZbRLFZ.o
LOAD /tmp/ccShKeGc.o
LOAD /tmp/cczcSDec.ltrans0.ltrans.o
LOAD /tmp/ccb2Xekb.debug.temp.o
LOAD /tmp/ccR20L1X.debug.temp.o
LOAD /tmp/ccx6Ta0R.o
LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
@@ -70,14 +69,14 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
0x00000000 _sinit = .
0x00000000 . = ALIGN (0x4)
*(SORT_NONE(.init))
.init 0x00000000 0x9e /tmp/ccuFqAhq.ltrans0.ltrans.o
.init 0x00000000 0x9e /tmp/cczcSDec.ltrans0.ltrans.o
0x00000000 InterruptVectorDefault
0x00000000 InterruptVector
0x000000a0 . = ALIGN (0x4)
*fill* 0x0000009e 0x2
0x000000a0 _einit = .
.text 0x000000a0 0x2468
.text 0x000000a0 0x2794
0x000000a0 . = ALIGN (0x4)
*(.text)
.text 0x000000a0 0x7e ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
@@ -88,350 +87,360 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
0x000000f8 __modsi3
*(.text.*)
.text.mini_pad
0x0000011e 0x8a /tmp/ccuFqAhq.ltrans0.ltrans.o
.text._puts 0x000001a8 0x40 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x0000011e 0x8a /tmp/cczcSDec.ltrans0.ltrans.o
.text._puts 0x000001a8 0x40 /tmp/cczcSDec.ltrans0.ltrans.o
.text.PrintHex
0x000001e8 0x5a /tmp/ccuFqAhq.ltrans0.ltrans.o
0x000001e8 0x5a /tmp/cczcSDec.ltrans0.ltrans.o
.text.DelaySysTick
0x00000242 0x12 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000242 0x12 /tmp/cczcSDec.ltrans0.ltrans.o
.text.mini_itoa.part.0
0x00000254 0xc0 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000254 0xc0 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_i2c_setup
0x00000314 0x54 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000314 0x54 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawPixel
0x00000368 0x3c /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.beep 0x000003a4 0x68 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000368 0x3c /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawstr
0x000003a4 0x8c /tmp/cczcSDec.ltrans0.ltrans.o
.text.beep 0x00000430 0x70 /tmp/cczcSDec.ltrans0.ltrans.o
.text.led_blink
0x0000040c 0x2a /tmp/ccuFqAhq.ltrans0.ltrans.o
0x000004a0 0x2a /tmp/cczcSDec.ltrans0.ltrans.o
.text.pet_reset
0x00000436 0x30 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.read_buttons
0x00000466 0x32 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.ssd1306_drawstr.constprop.0
0x00000498 0x78 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x000004ca 0x38 /tmp/cczcSDec.ltrans0.ltrans.o
.text.notify 0x00000502 0x8e /tmp/cczcSDec.ltrans0.ltrans.o
.text.draw_center_str
0x00000510 0x26 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.ssd1306_drawFastHLine.constprop.0
0x00000536 0x4a /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000590 0x28 /tmp/cczcSDec.ltrans0.ltrans.o
.text.read_buttons
0x000005b8 0x32 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawFastVLine.constprop.0
0x00000580 0x44 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.ssd1306_drawRect.constprop.0
0x000005c4 0x40 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.draw_bar
0x00000604 0x7a /tmp/ccuFqAhq.ltrans0.ltrans.o
0x000005ea 0x44 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawImage.constprop.0
0x0000067e 0xc0 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x0000062e 0xc0 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawFastHLine.part.0.constprop.0
0x000006ee 0x3e /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawRect.constprop.0
0x0000072c 0x40 /tmp/cczcSDec.ltrans0.ltrans.o
.text.draw_bar
0x0000076c 0x7c /tmp/cczcSDec.ltrans0.ltrans.o
.text.internal_handle_input.constprop.0
0x0000073e 0xa /tmp/ccuFqAhq.ltrans0.ltrans.o
0x000007e8 0xa /tmp/cczcSDec.ltrans0.ltrans.o
.text._write.constprop.0
0x00000748 0xe4 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x000007f2 0xe4 /tmp/cczcSDec.ltrans0.ltrans.o
.text.__puts_uart
0x0000082c 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x000008d6 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.text.handle_reset
0x00000840 0x72 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000840 handle_reset
0x000008ea 0x72 /tmp/cczcSDec.ltrans0.ltrans.o
0x000008ea handle_reset
.text.vector_handler
0x000008b2 0x5a /tmp/ccuFqAhq.ltrans0.ltrans.o
0x000008b2 OPCM_IRQHandler
0x000008b2 EXTI2_IRQHandler
0x000008b2 TIM8_TRG_COM_IRQHandler
0x000008b2 TIM8_CC_IRQHandler
0x000008b2 USART_WKUP_IRQHandler
0x000008b2 UART8_IRQHandler
0x000008b2 SPI4_IRQHandler
0x000008b2 NFC_IRQHandler
0x000008b2 DFSDM0_IRQHandler
0x000008b2 TIM1_CC_IRQHandler
0x000008b2 HardFault_Handler
0x000008b2 TIM10_IRQHandler
0x000008b2 GPIOB_IRQHandler
0x000008b2 IPC_CH2_Handler
0x000008b2 USBPD_IRQHandler
0x000008b2 TIM6_IRQHandler
0x000008b2 GPIOA_IRQHandler
0x000008b2 SysTick_Handler
0x000008b2 CAN3_RX1_IRQHandler
0x000008b2 I3C_ER_IRQHandler
0x000008b2 PVD_IRQHandler
0x000008b2 SDIO_IRQHandler
0x000008b2 TIM9_BRK_IRQHandler
0x000008b2 DMA2_Channel8_IRQHandler
0x000008b2 CAN2_RX1_IRQHandler
0x000008b2 EXTI3_IRQHandler
0x000008b2 HSEM_Handler
0x000008b2 UART1_IRQHandler
0x000008b2 USBHS_IRQHandler
0x000008b2 LPTIM2_IRQHandler
0x000008b2 DMA2_Channel9_IRQHandler
0x000008b2 TIM10_CC_IRQHandler
0x000008b2 EXTI25_16_IRQHandler
0x000008b2 I2C3_ER_IRQHandler
0x000008b2 USBFS_IRQHandler
0x000008b2 UART0_IRQHandler
0x000008b2 USART8_IRQHandler
0x000008b2 EXTI0_IRQHandler
0x000008b2 I2C2_EV_IRQHandler
0x000008b2 TIM10_TRG_COM_IRQHandler
0x000008b2 LPTIM_IRQHandler
0x000008b2 CAN1_RX0_IRQHandler
0x000008b2 CAN3_SCE_IRQHandler
0x000008b2 CAN2_SCE_IRQHandler
0x000008b2 ADC1_2_IRQHandler
0x000008b2 BB_IRQHandler
0x000008b2 Break_Point_Handler
0x000008b2 IPC_CH0_Handler
0x000008b2 TIM2_CC_IRQHandler
0x000008b2 SPI1_IRQHandler
0x000008b2 USART5_IRQHandler
0x000008b2 TAMPER_IRQHandler
0x000008b2 TMR0_IRQHandler
0x000008b2 AWU_IRQHandler
0x000008b2 EXTI7_0_IRQHandler
0x000008b2 CAN2_RX0_IRQHandler
0x000008b2 OSCWakeUp_IRQHandler
0x000008b2 TIM8_UP_IRQHandler
0x000008b2 Ecall_M_Mode_Handler
0x000008b2 ECDC_IRQHandler
0x000008b2 SDMMC_IRQHandler
0x000008b2 USART7_IRQHandler
0x000008b2 DMA2_Channel2_IRQHandler
0x000008b2 DMA1_Channel4_IRQHandler
0x000008b2 ADC1_IRQHandler
0x000008b2 TIM2_BRK_IRQHandler
0x000008b2 USART6_IRQHandler
0x000008b2 CAN3_RX0_IRQHandler
0x000008b2 HSADC_IRQHandler
0x000008b2 TIM9_UP_IRQHandler
0x000008b2 USART3_IRQHandler
0x000008b2 RTC_IRQHandler
0x000008b2 DMA1_Channel7_IRQHandler
0x000008b2 LED_IRQHandler
0x000008b2 CAN1_RX1_IRQHandler
0x000008b2 DVP_IRQHandler
0x000008b2 UART5_IRQHandler
0x000008b2 USBSS_IRQHandler
0x000008b2 SWPMI_IRQHandler
0x000008b2 USBPDWakeUp_IRQHandler
0x000008b2 EXTI15_8_IRQHandler
0x000008b2 TIM4_IRQHandler
0x000008b2 DMA2_Channel1_IRQHandler
0x000008b2 SWPMI_WKUP_IRQHandler
0x000008b2 USBPD_WKUP_IRQHandler
0x000008b2 I2C1_EV_IRQHandler
0x000008b2 USBSSWakeup_IRQHandler
0x000008b2 UART2_IRQHandler
0x000008b2 USART4_IRQHandler
0x000008b2 PWMX_IRQHandler
0x000008b2 DMA1_Channel6_IRQHandler
0x000008b2 UART4_IRQHandler
0x000008b2 DMA2_Channel4_IRQHandler
0x000008b2 TIM3_IRQHandler
0x000008b2 RCC_IRQHandler
0x000008b2 TIM1_TRG_COM_IRQHandler
0x000008b2 DMA1_Channel1_IRQHandler
0x000008b2 DMA2_Channel7_IRQHandler
0x000008b2 QSPI1_IRQHandler
0x000008b2 EXTI15_10_IRQHandler
0x000008b2 ADC_IRQHandler
0x000008b2 IPC_CH3_Handler
0x000008b2 DMA1_Channel8_IRQHandler
0x000008b2 I3C_EV_IRQHandler
0x000008b2 TMR2_IRQHandler
0x000008b2 I3C_WKUP_IRQHandler
0x000008b2 DefaultIRQHandler
0x000008b2 TIM12_IRQHandler
0x000008b2 TIM7_IRQHandler
0x000008b2 CAN2_TX_IRQHandler
0x000008b2 TIM5_IRQHandler
0x000008b2 I2C3_EV_IRQHandler
0x000008b2 USB_IRQHandler
0x000008b2 EXTI9_5_IRQHandler
0x000008b2 PIOC_IRQHandler
0x000008b2 TIM9_IRQHandler
0x000008b2 LTDC_IRQHandler
0x000008b2 SAI_IRQHandler
0x000008b2 SPI2_IRQHandler
0x000008b2 OSC32KCal_IRQHandler
0x000008b2 IPC_CH1_Handler
0x000008b2 I2C_IRQHandler
0x000008b2 LPTIM1_WKUP_IRQHandler
0x000008b2 TIM10_BRK_IRQHandler
0x000008b2 TIM9_CC_IRQHandler
0x000008b2 CAN1_TX_IRQHandler
0x000008b2 DMA2_Channel5_IRQHandler
0x000008b2 USB2_IRQHandler
0x000008b2 USBHSWakeUp_IRQHandler
0x000008b2 DMA1_Channel5_IRQHandler
0x000008b2 EXTI4_IRQHandler
0x000008b2 USB_LP_CAN1_RX0_IRQHandler
0x000008b2 QSPI2_IRQHandler
0x000008b2 RNG_IRQHandler
0x000008b2 USB_HP_CAN1_TX_IRQHandler
0x000008b2 LLE_IRQHandler
0x000008b2 CMPWakeUp_IRQHandler
0x000008b2 DMA1_Channel3_IRQHandler
0x000008b2 FSMC_IRQHandler
0x000008b2 ETH_IRQHandler
0x000008b2 TIM1_UP_IRQHandler
0x000008b2 LPTIMWakeUp_IRQHandler
0x000008b2 WWDG_IRQHandler
0x000008b2 USBHSWakeup_IRQHandler
0x000008b2 DMA2_Channel11_IRQHandler
0x000008b2 WDOG_BAT_IRQHandler
0x000008b2 Ecall_U_Mode_Handler
0x000008b2 I2C4_EV_IRQHandler
0x000008b2 CAN3_TX_IRQHandler
0x000008b2 TMR3_IRQHandler
0x000008b2 DMA2_Channel6_IRQHandler
0x000008b2 TIM2_IRQHandler
0x000008b2 SW_Handler
0x000008b2 TIM1_BRK_IRQHandler
0x000008b2 GPHA_IRQHandler
0x000008b2 OPA_IRQHandler
0x000008b2 DMA2_Channel10_IRQHandler
0x000008b2 EXTI1_IRQHandler
0x000008b2 SPI0_IRQHandler
0x000008b2 USB2_HOST_IRQHandler
0x000008b2 LPTIM2_WKUP_IRQHandler
0x000008b2 RTCAlarm_IRQHandler
0x000008b2 TIM11_IRQHandler
0x000008b2 TIM10_UP_IRQHandler
0x000008b2 TIM9_TRG_COM_IRQHandler
0x000008b2 UART7_IRQHandler
0x000008b2 USART2_IRQHandler
0x000008b2 UART6_IRQHandler
0x000008b2 UHSIF_IRQHandler
0x000008b2 ETHWakeUp_IRQHandler
0x000008b2 I2C2_ER_IRQHandler
0x000008b2 DMA1_Channel2_IRQHandler
0x000008b2 TIM8_BRK_IRQHandler
0x000008b2 TIM2_TRG_IRQHandler
0x000008b2 CAN1_SCE_IRQHandler
0x000008b2 FLASH_IRQHandler
0x000008b2 USBFSWakeUp_IRQHandler
0x000008b2 USART1_IRQHandler
0x000008b2 OTG_FS_IRQHandler
0x000008b2 SPI3_IRQHandler
0x000008b2 USBFS_WakeUp_IRQHandler
0x000008b2 UART3_IRQHandler
0x000008b2 I2C1_ER_IRQHandler
0x000008b2 FMC_IRQHandler
0x000008b2 USB2_DEVICE_IRQHandler
0x000008b2 LPTIM1_IRQHandler
0x000008b2 DFSDM1_IRQHandler
0x000008b2 TMR1_IRQHandler
0x000008b2 I2C4_ER_IRQHandler
0x000008b2 SERDES_IRQHandler
0x000008b2 USBSS_LINK_IRQHandler
0x000008b2 USBWakeUp_IRQHandler
0x000008b2 DMA2_Channel3_IRQHandler
0x000008fe NMI_Handler
0x000008fe NMI_RCC_CSS_IRQHandler
.text.strlen 0x0000090c 0x12 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x0000090c strlen
0x0000095c 0x62 /tmp/cczcSDec.ltrans0.ltrans.o
0x0000095c OPCM_IRQHandler
0x0000095c EXTI2_IRQHandler
0x0000095c TIM8_TRG_COM_IRQHandler
0x0000095c TIM8_CC_IRQHandler
0x0000095c USART_WKUP_IRQHandler
0x0000095c UART8_IRQHandler
0x0000095c SPI4_IRQHandler
0x0000095c NFC_IRQHandler
0x0000095c DFSDM0_IRQHandler
0x0000095c TIM1_CC_IRQHandler
0x0000095c HardFault_Handler
0x0000095c TIM10_IRQHandler
0x0000095c GPIOB_IRQHandler
0x0000095c IPC_CH2_Handler
0x0000095c USBPD_IRQHandler
0x0000095c TIM6_IRQHandler
0x0000095c GPIOA_IRQHandler
0x0000095c SysTick_Handler
0x0000095c CAN3_RX1_IRQHandler
0x0000095c I3C_ER_IRQHandler
0x0000095c PVD_IRQHandler
0x0000095c SDIO_IRQHandler
0x0000095c TIM9_BRK_IRQHandler
0x0000095c DMA2_Channel8_IRQHandler
0x0000095c CAN2_RX1_IRQHandler
0x0000095c EXTI3_IRQHandler
0x0000095c HSEM_Handler
0x0000095c UART1_IRQHandler
0x0000095c USBHS_IRQHandler
0x0000095c LPTIM2_IRQHandler
0x0000095c DMA2_Channel9_IRQHandler
0x0000095c TIM10_CC_IRQHandler
0x0000095c EXTI25_16_IRQHandler
0x0000095c I2C3_ER_IRQHandler
0x0000095c USBFS_IRQHandler
0x0000095c UART0_IRQHandler
0x0000095c USART8_IRQHandler
0x0000095c EXTI0_IRQHandler
0x0000095c I2C2_EV_IRQHandler
0x0000095c TIM10_TRG_COM_IRQHandler
0x0000095c LPTIM_IRQHandler
0x0000095c CAN1_RX0_IRQHandler
0x0000095c CAN3_SCE_IRQHandler
0x0000095c CAN2_SCE_IRQHandler
0x0000095c ADC1_2_IRQHandler
0x0000095c BB_IRQHandler
0x0000095c Break_Point_Handler
0x0000095c IPC_CH0_Handler
0x0000095c TIM2_CC_IRQHandler
0x0000095c SPI1_IRQHandler
0x0000095c USART5_IRQHandler
0x0000095c TAMPER_IRQHandler
0x0000095c TMR0_IRQHandler
0x0000095c AWU_IRQHandler
0x0000095c EXTI7_0_IRQHandler
0x0000095c CAN2_RX0_IRQHandler
0x0000095c OSCWakeUp_IRQHandler
0x0000095c TIM8_UP_IRQHandler
0x0000095c Ecall_M_Mode_Handler
0x0000095c ECDC_IRQHandler
0x0000095c SDMMC_IRQHandler
0x0000095c USART7_IRQHandler
0x0000095c DMA2_Channel2_IRQHandler
0x0000095c DMA1_Channel4_IRQHandler
0x0000095c ADC1_IRQHandler
0x0000095c TIM2_BRK_IRQHandler
0x0000095c USART6_IRQHandler
0x0000095c CAN3_RX0_IRQHandler
0x0000095c HSADC_IRQHandler
0x0000095c TIM9_UP_IRQHandler
0x0000095c USART3_IRQHandler
0x0000095c RTC_IRQHandler
0x0000095c DMA1_Channel7_IRQHandler
0x0000095c LED_IRQHandler
0x0000095c CAN1_RX1_IRQHandler
0x0000095c DVP_IRQHandler
0x0000095c UART5_IRQHandler
0x0000095c USBSS_IRQHandler
0x0000095c SWPMI_IRQHandler
0x0000095c USBPDWakeUp_IRQHandler
0x0000095c EXTI15_8_IRQHandler
0x0000095c TIM4_IRQHandler
0x0000095c DMA2_Channel1_IRQHandler
0x0000095c SWPMI_WKUP_IRQHandler
0x0000095c USBPD_WKUP_IRQHandler
0x0000095c I2C1_EV_IRQHandler
0x0000095c USBSSWakeup_IRQHandler
0x0000095c UART2_IRQHandler
0x0000095c USART4_IRQHandler
0x0000095c PWMX_IRQHandler
0x0000095c DMA1_Channel6_IRQHandler
0x0000095c UART4_IRQHandler
0x0000095c DMA2_Channel4_IRQHandler
0x0000095c TIM3_IRQHandler
0x0000095c RCC_IRQHandler
0x0000095c TIM1_TRG_COM_IRQHandler
0x0000095c DMA1_Channel1_IRQHandler
0x0000095c DMA2_Channel7_IRQHandler
0x0000095c QSPI1_IRQHandler
0x0000095c EXTI15_10_IRQHandler
0x0000095c ADC_IRQHandler
0x0000095c IPC_CH3_Handler
0x0000095c DMA1_Channel8_IRQHandler
0x0000095c I3C_EV_IRQHandler
0x0000095c TMR2_IRQHandler
0x0000095c I3C_WKUP_IRQHandler
0x0000095c DefaultIRQHandler
0x0000095c TIM12_IRQHandler
0x0000095c TIM7_IRQHandler
0x0000095c CAN2_TX_IRQHandler
0x0000095c TIM5_IRQHandler
0x0000095c I2C3_EV_IRQHandler
0x0000095c USB_IRQHandler
0x0000095c EXTI9_5_IRQHandler
0x0000095c PIOC_IRQHandler
0x0000095c TIM9_IRQHandler
0x0000095c LTDC_IRQHandler
0x0000095c SAI_IRQHandler
0x0000095c SPI2_IRQHandler
0x0000095c OSC32KCal_IRQHandler
0x0000095c IPC_CH1_Handler
0x0000095c I2C_IRQHandler
0x0000095c LPTIM1_WKUP_IRQHandler
0x0000095c TIM10_BRK_IRQHandler
0x0000095c TIM9_CC_IRQHandler
0x0000095c CAN1_TX_IRQHandler
0x0000095c DMA2_Channel5_IRQHandler
0x0000095c USB2_IRQHandler
0x0000095c USBHSWakeUp_IRQHandler
0x0000095c DMA1_Channel5_IRQHandler
0x0000095c EXTI4_IRQHandler
0x0000095c USB_LP_CAN1_RX0_IRQHandler
0x0000095c QSPI2_IRQHandler
0x0000095c RNG_IRQHandler
0x0000095c USB_HP_CAN1_TX_IRQHandler
0x0000095c LLE_IRQHandler
0x0000095c CMPWakeUp_IRQHandler
0x0000095c DMA1_Channel3_IRQHandler
0x0000095c FSMC_IRQHandler
0x0000095c ETH_IRQHandler
0x0000095c TIM1_UP_IRQHandler
0x0000095c LPTIMWakeUp_IRQHandler
0x0000095c WWDG_IRQHandler
0x0000095c USBHSWakeup_IRQHandler
0x0000095c DMA2_Channel11_IRQHandler
0x0000095c WDOG_BAT_IRQHandler
0x0000095c Ecall_U_Mode_Handler
0x0000095c I2C4_EV_IRQHandler
0x0000095c CAN3_TX_IRQHandler
0x0000095c TMR3_IRQHandler
0x0000095c DMA2_Channel6_IRQHandler
0x0000095c TIM2_IRQHandler
0x0000095c SW_Handler
0x0000095c TIM1_BRK_IRQHandler
0x0000095c GPHA_IRQHandler
0x0000095c OPA_IRQHandler
0x0000095c DMA2_Channel10_IRQHandler
0x0000095c EXTI1_IRQHandler
0x0000095c SPI0_IRQHandler
0x0000095c USB2_HOST_IRQHandler
0x0000095c LPTIM2_WKUP_IRQHandler
0x0000095c RTCAlarm_IRQHandler
0x0000095c TIM11_IRQHandler
0x0000095c TIM10_UP_IRQHandler
0x0000095c TIM9_TRG_COM_IRQHandler
0x0000095c UART7_IRQHandler
0x0000095c USART2_IRQHandler
0x0000095c UART6_IRQHandler
0x0000095c UHSIF_IRQHandler
0x0000095c ETHWakeUp_IRQHandler
0x0000095c I2C2_ER_IRQHandler
0x0000095c DMA1_Channel2_IRQHandler
0x0000095c TIM8_BRK_IRQHandler
0x0000095c TIM2_TRG_IRQHandler
0x0000095c CAN1_SCE_IRQHandler
0x0000095c FLASH_IRQHandler
0x0000095c USBFSWakeUp_IRQHandler
0x0000095c USART1_IRQHandler
0x0000095c OTG_FS_IRQHandler
0x0000095c SPI3_IRQHandler
0x0000095c USBFS_WakeUp_IRQHandler
0x0000095c UART3_IRQHandler
0x0000095c I2C1_ER_IRQHandler
0x0000095c FMC_IRQHandler
0x0000095c USB2_DEVICE_IRQHandler
0x0000095c LPTIM1_IRQHandler
0x0000095c DFSDM1_IRQHandler
0x0000095c TMR1_IRQHandler
0x0000095c I2C4_ER_IRQHandler
0x0000095c SERDES_IRQHandler
0x0000095c USBSS_LINK_IRQHandler
0x0000095c USBWakeUp_IRQHandler
0x0000095c DMA2_Channel3_IRQHandler
0x000009b0 NMI_Handler
0x000009b0 NMI_RCC_CSS_IRQHandler
.text.strlen 0x000009be 0x12 /tmp/cczcSDec.ltrans0.ltrans.o
0x000009be strlen
.text.mini_vpprintf
0x0000091e 0x1c2 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.printf 0x00000ae0 0x24 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000ae0 printf
0x000009d0 0x1c2 /tmp/cczcSDec.ltrans0.ltrans.o
.text.printf 0x00000b92 0x24 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000b92 printf
.text.ssd1306_i2c_error.isra.0
0x00000b04 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000bb6 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_i2c_send.constprop.0
0x00000b24 0x122 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000bd6 0x122 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_cmd
0x00000c46 0x1c /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000cf8 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.text.mini_vsnprintf
0x00000c62 0x38 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000d14 0x38 /tmp/cczcSDec.ltrans0.ltrans.o
.text.snprintf
0x00000c9a 0x16 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000c9a snprintf
.text.memset 0x00000cb0 0x12 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000cb0 memset
0x00000d4c 0x16 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000d4c snprintf
.text.memset 0x00000d62 0x12 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000d62 memset
.text.ssd1306_setbuf.constprop.0
0x00000cc2 0xc /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.memcpy 0x00000cce 0x1c /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000cce memcpy
0x00000d74 0xc /tmp/cczcSDec.ltrans0.ltrans.o
.text.strcpy 0x00000d80 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000d80 strcpy
.text.memcpy 0x00000d94 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
0x00000d94 memcpy
.text.ssd1306_refresh
0x00000cea 0x5c /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000db0 0x5c /tmp/cczcSDec.ltrans0.ltrans.o
.text.SystemInit
0x00000d46 0x54 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000d46 SystemInit
0x00000e0c 0x54 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000e0c SystemInit
.text.startup.main
0x00000d9a 0x8ea /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000d9a main
0x00000e60 0xaaa /tmp/cczcSDec.ltrans0.ltrans.o
0x00000e60 main
*(.rodata)
*(.rodata*)
*fill* 0x00001684 0x0
*fill* 0x0000190a 0x2
.rodata.ssd1306_i2c_error.isra.0.str1.4
0x00001684 0x12e /tmp/ccuFqAhq.ltrans0.ltrans.o
0x0000190c 0x198 /tmp/cczcSDec.ltrans0.ltrans.o
0x2d (size before relaxing)
.rodata.main.str1.4
0x000017b2 0x89 /tmp/ccuFqAhq.ltrans0.ltrans.o
*fill* 0x000017b2 0x2
.rodata.main 0x000017b4 0x18 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001aa4 0xd9 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.main 0x00001aa4 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_settings
0x00001ac0 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_stats
0x000017cc 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001ae0 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_heal
0x000017ec 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001b00 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_clean
0x0000180c 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001b20 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_sleep
0x0000182c 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001b40 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_play
0x0000184c 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001b60 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_feed
0x0000186c 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001b80 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_dead
0x0000188c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001ba0 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_sleep
0x0000190c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001c20 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_eat
0x0000198c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001ca0 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_sad
0x00001a0c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001d20 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_happy
0x00001a8c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001da0 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_blink
0x00001b0c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001e20 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.str1.4
0x00001b8c 0x76 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001ea0 0x90 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.errstr
0x00001b8c 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o
.rodata.fontdata
0x00001ba0 0x800 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001ea0 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.ssd1306_init_array
0x000023a0 0x1a /tmp/ccuFqAhq.ltrans0.ltrans.o
*fill* 0x000023ba 0x2
0x00001eb4 0x1a /tmp/cczcSDec.ltrans0.ltrans.o
*fill* 0x00001ece 0x2
.rodata.pana_idle
0x000023bc 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001ed0 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.menu_icons
0x0000243c 0x18 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001f50 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_frames
0x00002454 0x1c /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001f6c 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.menu_labels
0x00002470 0x18 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001f88 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.screen_timeout_names
0x00001fa4 0x10 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.spr_grave
0x00002488 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00001fb4 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.fontdata
0x00002034 0x800 /tmp/cczcSDec.ltrans0.ltrans.o
*(.gnu.linkonce.t.*)
0x00002508 . = ALIGN (0x4)
0x00002834 . = ALIGN (0x4)
.fini 0x00002508 0x0
.rela.dyn 0x00002834 0x0
.rela.text.handle_reset
0x00002834 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.fini 0x00002834 0x0
*(SORT_NONE(.fini))
0x00002508 . = ALIGN (0x4)
0x00002834 . = ALIGN (0x4)
[!provide] PROVIDE (_etext = .)
[!provide] PROVIDE (_eitcm = .)
.preinit_array 0x00002508 0x0
.preinit_array 0x00002834 0x0
[!provide] PROVIDE (__preinit_array_start = .)
*(.preinit_array)
[!provide] PROVIDE (__preinit_array_end = .)
.init_array 0x00002508 0x0
0x00002508 PROVIDE (__init_array_start = .)
.init_array 0x00002834 0x0
0x00002834 PROVIDE (__init_array_start = .)
*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))
*(.init_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .ctors)
0x00002508 PROVIDE (__init_array_end = .)
0x00002834 PROVIDE (__init_array_end = .)
.fini_array 0x00002508 0x0
.fini_array 0x00002834 0x0
[!provide] PROVIDE (__fini_array_start = .)
*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))
*(.fini_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .dtors)
@@ -451,15 +460,15 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
*(SORT_BY_NAME(.dtors.*))
*(.dtors)
.dalign 0x20000000 0x0 load address 0x00002508
.dalign 0x20000000 0x0 load address 0x00002834
0x20000000 . = ALIGN (0x4)
0x20000000 PROVIDE (_data_vma = .)
.dlalign 0x00002508 0x0
0x00002508 . = ALIGN (0x4)
0x00002508 PROVIDE (_data_lma = .)
.dlalign 0x00002834 0x0
0x00002834 . = ALIGN (0x4)
0x00002834 PROVIDE (_data_lma = .)
.data 0x20000000 0x8 load address 0x00002508
.data 0x20000000 0x18 load address 0x00002834
0x20000000 . = ALIGN (0x4)
0x200003fc __global_pointer$ = (. + 0x3fc)
*(.gnu.linkonce.r.*)
@@ -467,47 +476,59 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
*(.gnu.linkonce.d.*)
0x20000000 . = ALIGN (0x8)
*(.sdata .sdata.*)
.sdata.timeout_idx
0x20000000 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
.sdata.disp_on
0x20000001 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
.sdata.sound_on
0x20000002 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
*(.sdata2*)
*(.gnu.linkonce.s.*)
0x20000000 . = ALIGN (0x8)
0x20000008 . = ALIGN (0x8)
*fill* 0x20000003 0x5
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
.srodata.spr_poop
0x20000000 0x8 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x20000008 . = ALIGN (0x4)
0x20000008 PROVIDE (_edata = .)
0x20000008 0x8 /tmp/cczcSDec.ltrans0.ltrans.o
.srodata.screen_timeout_opts
0x20000010 0x8 /tmp/cczcSDec.ltrans0.ltrans.o
0x20000018 . = ALIGN (0x4)
0x20000018 PROVIDE (_edata = .)
.rela.dyn 0x20000008 0x0 load address 0x00002510
.rela.text.handle_reset
0x20000008 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o
.bss 0x20000008 0x41c load address 0x00002510
0x20000008 . = ALIGN (0x4)
0x20000008 PROVIDE (_sbss = .)
.bss 0x20000018 0x428 load address 0x0000284c
0x20000018 . = ALIGN (0x4)
0x20000018 PROVIDE (_sbss = .)
*(.sbss*)
.sbss.anim_exp
0x20000008 0x1 /tmp/ccuFqAhq.ltrans0.ltrans.o
*fill* 0x20000009 0x3
.sbss.frame 0x2000000c 0x4 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x20000018 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
*fill* 0x20000019 0x3
.sbss.frame 0x2000001c 0x4 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.tick_acc
0x20000010 0x2 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x20000020 0x2 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.anim_timer
0x20000012 0x1 /tmp/ccuFqAhq.ltrans0.ltrans.o
.sbss.cursor 0x20000013 0x1 /tmp/ccuFqAhq.ltrans0.ltrans.o
.sbss.screen 0x20000014 0x1 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x20000022 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.set_sel 0x20000023 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.idle_frames
0x20000024 0x4 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.crit_flag
0x20000028 0x4 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.warn_flag
0x2000002c 0x4 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.cursor 0x20000030 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.screen 0x20000031 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
*(.gnu.linkonce.sb.*)
*(.bss*)
*fill* 0x20000015 0x3
.bss.pet 0x20000018 0xc /tmp/ccuFqAhq.ltrans0.ltrans.o
*fill* 0x20000032 0x2
.bss.pet 0x20000034 0xc /tmp/cczcSDec.ltrans0.ltrans.o
.bss.ssd1306_buffer
0x20000024 0x400 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x20000040 0x400 /tmp/cczcSDec.ltrans0.ltrans.o
*(.gnu.linkonce.b.*)
*(COMMON*)
0x20000424 . = ALIGN (0x4)
0x20000424 PROVIDE (_ebss = .)
0x20000440 . = ALIGN (0x4)
0x20000440 PROVIDE (_ebss = .)
[!provide] PROVIDE (_end = _ebss)
[!provide] PROVIDE (end = .)
0x20000800 PROVIDE (_eusrstack = (ORIGIN (RAM) + LENGTH (RAM)))
@@ -523,64 +544,64 @@ OUTPUT(tama.elf elf32-littleriscv)
.riscv.attributes
0x00000000 0x25
.riscv.attributes
0x00000000 0x25 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x25 /tmp/cczcSDec.ltrans0.ltrans.o
.riscv.attributes
0x00000025 0x1f ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_info 0x00000000 0x49c5
.debug_info 0x00000000 0x25b8 /tmp/ccuFqAhq.ltrans0.ltrans.o
.debug_info 0x000025b8 0x1159 /tmp/cc6O5Yfp.debug.temp.o
0x000025b8 ch32fun.c.3da016ab
.debug_info 0x00003711 0x1257 /tmp/ccQWTvKu.debug.temp.o
0x00003711 tama.c.f19bf6d4
.debug_info 0x00004968 0x5d ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_info 0x00000000 0x4ec9
.debug_info 0x00000000 0x2938 /tmp/cczcSDec.ltrans0.ltrans.o
.debug_info 0x00002938 0x1159 /tmp/ccb2Xekb.debug.temp.o
0x00002938 ch32fun.c.3da016ab
.debug_info 0x00003a91 0x13db /tmp/ccR20L1X.debug.temp.o
0x00003a91 tama.c.67bb5960
.debug_info 0x00004e6c 0x5d ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_abbrev 0x00000000 0x7c5
.debug_abbrev 0x00000000 0x20c /tmp/ccuFqAhq.ltrans0.ltrans.o
.debug_abbrev 0x0000020c 0x278 /tmp/cc6O5Yfp.debug.temp.o
.debug_abbrev 0x00000484 0x319 /tmp/ccQWTvKu.debug.temp.o
.debug_abbrev 0x0000079d 0x28 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_abbrev 0x00000000 0x7c2
.debug_abbrev 0x00000000 0x209 /tmp/cczcSDec.ltrans0.ltrans.o
.debug_abbrev 0x00000209 0x278 /tmp/ccb2Xekb.debug.temp.o
.debug_abbrev 0x00000481 0x319 /tmp/ccR20L1X.debug.temp.o
.debug_abbrev 0x0000079a 0x28 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_loclists
0x00000000 0x20c5
0x00000000 0x232b
.debug_loclists
0x00000000 0x20c5 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x232b /tmp/cczcSDec.ltrans0.ltrans.o
.debug_aranges 0x00000000 0x200
.debug_aranges 0x00000000 0x208
.debug_aranges
0x00000000 0x1e0 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x1e8 /tmp/cczcSDec.ltrans0.ltrans.o
.debug_aranges
0x000001e0 0x20 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
0x000001e8 0x20 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_rnglists
0x00000000 0x4a6
0x00000000 0x4e8
.debug_rnglists
0x00000000 0x4a6 /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x4e8 /tmp/cczcSDec.ltrans0.ltrans.o
.debug_line 0x00000000 0x4835
.debug_line 0x00000000 0x45f0 /tmp/ccuFqAhq.ltrans0.ltrans.o
.debug_line 0x000045f0 0x76 /tmp/cc6O5Yfp.debug.temp.o
.debug_line 0x00004666 0x7c /tmp/ccQWTvKu.debug.temp.o
.debug_line 0x000046e2 0x153 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_line 0x00000000 0x4f23
.debug_line 0x00000000 0x4cde /tmp/cczcSDec.ltrans0.ltrans.o
.debug_line 0x00004cde 0x76 /tmp/ccb2Xekb.debug.temp.o
.debug_line 0x00004d54 0x7c /tmp/ccR20L1X.debug.temp.o
.debug_line 0x00004dd0 0x153 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_str 0x00000000 0xf6f
.debug_str 0x00000000 0xf6f /tmp/ccuFqAhq.ltrans0.ltrans.o
0x1c2 (size before relaxing)
.debug_str 0x00000f6f 0x751 /tmp/cc6O5Yfp.debug.temp.o
.debug_str 0x00000f6f 0x994 /tmp/ccQWTvKu.debug.temp.o
.debug_str 0x00000f6f 0xd9 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_str 0x00000000 0x1069
.debug_str 0x00000000 0x1069 /tmp/cczcSDec.ltrans0.ltrans.o
0x1da (size before relaxing)
.debug_str 0x00001069 0x751 /tmp/ccb2Xekb.debug.temp.o
.debug_str 0x00001069 0xa84 /tmp/ccR20L1X.debug.temp.o
.debug_str 0x00001069 0xd9 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_line_str
0x00000000 0x33f
.debug_line_str
0x00000000 0x33f /tmp/ccuFqAhq.ltrans0.ltrans.o
0x00000000 0x33f /tmp/cczcSDec.ltrans0.ltrans.o
0x157 (size before relaxing)
.debug_line_str
0x0000033f 0x246 /tmp/cc6O5Yfp.debug.temp.o
0x0000033f 0x246 /tmp/ccb2Xekb.debug.temp.o
.debug_line_str
0x0000033f 0x1e5 /tmp/ccQWTvKu.debug.temp.o
0x0000033f 0x1e5 /tmp/ccR20L1X.debug.temp.o
.debug_line_str
0x0000033f 0x92 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_frame 0x00000000 0x5b0
.debug_frame 0x00000000 0x5b0 /tmp/ccuFqAhq.ltrans0.ltrans.o
.debug_frame 0x00000000 0x5dc
.debug_frame 0x00000000 0x5dc /tmp/cczcSDec.ltrans0.ltrans.o