Added screen timeout and more warnings, increased timescale

This commit is contained in:
Carl Vargklint 2026-06-18 23:04:26 +02:00
parent 4bbe531d08
commit 27c866f26b
9 changed files with 3973 additions and 3391 deletions

View File

@ -432,12 +432,32 @@ static const unsigned char icon_stats[] = {
0x00, 0x00, 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] = { 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] = { static const char *const menu_labels[ICON_COUNT] = {
"FEED", "PLAY", "SLEEP", "CLEAN", "HEAL", "STATS", "FEED", "PLAY", "SLEEP", "CLEAN", "HEAL", "STATS", "SETTINGS",
}; };
#endif // _SPRITES_H #endif // _SPRITES_H

View File

@ -253,6 +253,17 @@ def icon_stats(): # bar chart
hline(g, x, x + 1, yy) hline(g, x, x + 1, yy)
return g 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 # ---------------------------------------------------------------- main
def main(): def main():
print("// Auto-generated by sprites_gen.py -- do not edit by hand.") print("// Auto-generated by sprites_gen.py -- do not edit by hand.")
@ -294,16 +305,17 @@ def main():
("icon_clean", icon_clean()), ("icon_clean", icon_clean()),
("icon_heal", icon_heal()), ("icon_heal", icon_heal()),
("icon_stats", icon_stats()), ("icon_stats", icon_stats()),
("icon_settings", icon_settings()),
] ]
for n, g in icons: for n, g in icons:
emit(n, g) emit(n, g)
print("#define ICON_COUNT 6") print("#define ICON_COUNT 7")
print("static const unsigned char *const menu_icons[ICON_COUNT] = {") 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("};")
print('static const char *const menu_labels[ICON_COUNT] = {') 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() print()
print("#endif // _SPRITES_H") print("#endif // _SPRITES_H")

BIN
tama.bin

Binary file not shown.

167
tama.c
View File

@ -30,11 +30,17 @@
// ----------------------------------------------------------------- tuning // ----------------------------------------------------------------- tuning
#define FRAME_MS 60 // main loop period #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 #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 // ----------------------------------------------------------------- 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 { typedef struct {
int8_t satiety; // 0..100 (fullness) 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 uint8_t anim_timer; // frames remaining for the reaction
static uint32_t frame; // free-running frame counter static uint32_t frame; // free-running frame counter
static uint16_t tick_acc; // frames since last stat tick 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[] // 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 // ----------------------------------------------------------------- helpers
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } 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) // short square-wave beep on the passive piezo (blocking, ms-scale only)
static void beep(uint16_t freq, uint16_t ms) static void beep(uint16_t freq, uint16_t ms)
{ {
if (!sound_on) return;
if (freq == 0) { Delay_Ms(ms); return; } if (freq == 0) { Delay_Ms(ms); return; }
uint32_t half = 500000u / freq; // half-period in us uint32_t half = 500000u / freq; // half-period in us
uint32_t cycles = ((uint32_t)ms * 1000u) / (half * 2u); uint32_t cycles = ((uint32_t)ms * 1000u) / (half * 2u);
@ -96,6 +120,36 @@ static void pet_reset(void)
pet.alive = 1; pet.alive = 1;
screen = SCR_MAIN; screen = SCR_MAIN;
cursor = 0; 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 // pick the expression frame to draw this instant
@ -156,6 +210,12 @@ static void do_action(uint8_t act)
screen = SCR_STATS; screen = SCR_STATS;
beep(659, 40); beep(659, 40);
break; 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++; pet.age_min++;
if (pet.sleeping) { if (pet.sleeping) {
pet.energy = clamp100(pet.energy + 10); pet.energy = clamp100(pet.energy + 6);
// drift down slowly even while asleep // needs still drift down slowly even while asleep
pet.satiety = clamp100(pet.satiety - 1); pet.satiety = clamp100(pet.satiety - 1);
if (pet.energy >= 100) pet.sleeping = 0; // wakes when rested if (pet.energy >= 100) pet.sleeping = 0; // wakes when rested
} else { } else {
pet.satiety = clamp100(pet.satiety - 3); pet.satiety = clamp100(pet.satiety - 1);
pet.energy = clamp100(pet.energy - 2); pet.energy = clamp100(pet.energy - 1);
pet.happy = clamp100(pet.happy - 2); 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 && if (!pet.sleeping && pet.poop < 3 &&
((pet.age_min * 7u + frame) & 0x0F) == 0) ((pet.age_min * 7u + frame) & 0x1F) == 0)
pet.poop++; pet.poop++;
// being dirty / full of poop saps happiness // being dirty / full of poop slowly saps happiness
if (pet.poop) pet.happy = clamp100(pet.happy - pet.poop); if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1);
if (pet.hygiene < 20) 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 // health responds to overall wellbeing
int8_t lo = pet.satiety; int8_t lo = pet.satiety;
if (pet.happy < lo) lo = pet.happy; if (pet.happy < lo) lo = pet.happy;
if (pet.energy < lo) lo = pet.energy; if (pet.energy < lo) lo = pet.energy;
if (pet.hygiene < lo) lo = pet.hygiene; 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); else if (lo > 50) pet.health = clamp100(pet.health + 2);
check_notifications();
if (pet.health <= 0) { if (pet.health <= 0) {
pet.alive = 0; pet.alive = 0;
screen = SCR_DEAD; screen = SCR_DEAD;
@ -213,12 +276,12 @@ static void draw_center_str(int y, const char *s)
static void draw_menu_bar(void) 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++) { 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); ssd1306_drawImage(x, 48, menu_icons[i], ICON_W, ICON_H, 0);
if (i == cursor) 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(); 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 // ----------------------------------------------------------------- input
typedef struct { uint8_t ok, left, right; } Buttons; typedef struct { uint8_t ok, left, right; } Buttons;
@ -366,8 +451,18 @@ int main(void)
uint8_t ok_edge = b.ok && !prev.ok; uint8_t ok_edge = b.ok && !prev.ok;
uint8_t left_edge = b.left && !prev.left; uint8_t left_edge = b.left && !prev.left;
uint8_t right_edge = b.right && !prev.right; uint8_t right_edge = b.right && !prev.right;
uint8_t any_edge = ok_edge | left_edge | right_edge;
prev = b; prev = b;
if (any_edge) idle_frames = 0;
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;
}
} else {
switch (screen) { switch (screen) {
case SCR_MAIN: case SCR_MAIN:
if (left_edge) { if (left_edge) {
@ -383,11 +478,32 @@ int main(void)
break; break;
case SCR_STATS: case SCR_STATS:
if (ok_edge || left_edge || right_edge) { 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; screen = SCR_MAIN;
beep(880, 30); beep(880, 30);
} }
draw_stats(); }
draw_settings();
break; break;
case SCR_DEAD: case SCR_DEAD:
@ -399,15 +515,24 @@ int main(void)
break; 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;
}
}
if (anim_timer) anim_timer--; 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) { if (pet.alive && ++tick_acc >= TICK_FRAMES) {
tick_acc = 0; tick_acc = 0;
game_tick(); game_tick();
} }
frame++; frame++;
idle_frames++;
Delay_Ms(FRAME_MS); Delay_Ms(FRAME_MS);
} }
} }

BIN
tama.elf

Binary file not shown.

1142
tama.hex

File diff suppressed because it is too large Load Diff

5174
tama.lst

File diff suppressed because it is too large Load Diff

791
tama.map
View File

@ -1,51 +1,50 @@
Archive member included to satisfy reference by file (symbol) Archive member included to satisfy reference by file (symbol)
../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
/tmp/ccuFqAhq.ltrans0.ltrans.o (__divsi3) /tmp/cczcSDec.ltrans0.ltrans.o (__divsi3)
Discarded input sections Discarded input sections
.text 0x00000000 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o .text 0x00000000 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.data 0x00000000 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o .data 0x00000000 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.bss 0x00000000 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o .bss 0x00000000 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.text.vprintf 0x00000000 0x16 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.vprintf 0x00000000 0x16 /tmp/cczcSDec.ltrans0.ltrans.o
.text.sprintf 0x00000000 0x26 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.sprintf 0x00000000 0x26 /tmp/cczcSDec.ltrans0.ltrans.o
.text.strcpy 0x00000000 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strncpy 0x00000000 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.text.strncpy 0x00000000 0x1c /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strcmp 0x00000000 0x1a /tmp/cczcSDec.ltrans0.ltrans.o
.text.strcmp 0x00000000 0x1a /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strncmp 0x00000000 0x2e /tmp/cczcSDec.ltrans0.ltrans.o
.text.strncmp 0x00000000 0x2e /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strchr 0x00000000 0x16 /tmp/cczcSDec.ltrans0.ltrans.o
.text.strchr 0x00000000 0x16 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strrchr 0x00000000 0x3c /tmp/cczcSDec.ltrans0.ltrans.o
.text.strrchr 0x00000000 0x3c /tmp/ccuFqAhq.ltrans0.ltrans.o .text.memcmp 0x00000000 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.text.memcmp 0x00000000 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.memmove 0x00000000 0x5e /tmp/cczcSDec.ltrans0.ltrans.o
.text.memmove 0x00000000 0x5e /tmp/ccuFqAhq.ltrans0.ltrans.o .text.memchr 0x00000000 0x1a /tmp/cczcSDec.ltrans0.ltrans.o
.text.memchr 0x00000000 0x1a /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strnlen 0x00000000 0x2a /tmp/cczcSDec.ltrans0.ltrans.o
.text.strnlen 0x00000000 0x2a /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.twoway_strstr .text.twoway_strstr
0x00000000 0x232 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x232 /tmp/cczcSDec.ltrans0.ltrans.o
.text.strstr 0x00000000 0x11c /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strstr 0x00000000 0x11c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.puts.str1.4 .rodata.puts.str1.4
0x00000000 0x2 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x2 /tmp/cczcSDec.ltrans0.ltrans.o
.text.puts 0x00000000 0x40 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.puts 0x00000000 0x40 /tmp/cczcSDec.ltrans0.ltrans.o
.text.setjmp 0x00000000 0x10 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.setjmp 0x00000000 0x10 /tmp/cczcSDec.ltrans0.ltrans.o
.text.longjmp 0x00000000 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.longjmp 0x00000000 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.text.putchar 0x00000000 0x68 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.putchar 0x00000000 0x68 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.APBAHBPrescTable.lto_priv.0 .rodata.APBAHBPrescTable.lto_priv.0
0x00000000 0x10 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x10 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.ADCPrescTable.lto_priv.0 .rodata.ADCPrescTable.lto_priv.0
0x00000000 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.APBAHBPrescTable.lto_priv.1 .rodata.APBAHBPrescTable.lto_priv.1
0x00000000 0x10 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x10 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.ADCPrescTable.lto_priv.1 .rodata.ADCPrescTable.lto_priv.1
0x00000000 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.comment 0x00000000 0x35 /tmp/ccuFqAhq.ltrans0.ltrans.o .comment 0x00000000 0x35 /tmp/cczcSDec.ltrans0.ltrans.o
.note.GNU-stack .note.GNU-stack
0x00000000 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x0 /tmp/cczcSDec.ltrans0.ltrans.o
.comment 0x00000000 0x35 /tmp/cc6O5Yfp.debug.temp.o .comment 0x00000000 0x35 /tmp/ccb2Xekb.debug.temp.o
.note.GNU-stack .note.GNU-stack
0x00000000 0x0 /tmp/cc6O5Yfp.debug.temp.o 0x00000000 0x0 /tmp/ccb2Xekb.debug.temp.o
.comment 0x00000000 0x35 /tmp/ccQWTvKu.debug.temp.o .comment 0x00000000 0x35 /tmp/ccR20L1X.debug.temp.o
.note.GNU-stack .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) .data 0x00000000 0x0 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.bss 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 Linker script and memory map
LOAD /tmp/ccc3BNuu.o LOAD /tmp/ccShKeGc.o
LOAD /tmp/ccuFqAhq.ltrans0.ltrans.o LOAD /tmp/cczcSDec.ltrans0.ltrans.o
LOAD /tmp/cc6O5Yfp.debug.temp.o LOAD /tmp/ccb2Xekb.debug.temp.o
LOAD /tmp/ccQWTvKu.debug.temp.o LOAD /tmp/ccR20L1X.debug.temp.o
LOAD /tmp/ccZbRLFZ.o LOAD /tmp/ccx6Ta0R.o
LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
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 _sinit = .
0x00000000 . = ALIGN (0x4) 0x00000000 . = ALIGN (0x4)
*(SORT_NONE(.init)) *(SORT_NONE(.init))
.init 0x00000000 0x9e /tmp/ccuFqAhq.ltrans0.ltrans.o .init 0x00000000 0x9e /tmp/cczcSDec.ltrans0.ltrans.o
0x00000000 InterruptVectorDefault 0x00000000 InterruptVectorDefault
0x00000000 InterruptVector 0x00000000 InterruptVector
0x000000a0 . = ALIGN (0x4) 0x000000a0 . = ALIGN (0x4)
*fill* 0x0000009e 0x2 *fill* 0x0000009e 0x2
0x000000a0 _einit = . 0x000000a0 _einit = .
.text 0x000000a0 0x2468 .text 0x000000a0 0x2794
0x000000a0 . = ALIGN (0x4) 0x000000a0 . = ALIGN (0x4)
*(.text) *(.text)
.text 0x000000a0 0x7e ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .text 0x000000a0 0x7e ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
@ -88,350 +87,360 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
0x000000f8 __modsi3 0x000000f8 __modsi3
*(.text.*) *(.text.*)
.text.mini_pad .text.mini_pad
0x0000011e 0x8a /tmp/ccuFqAhq.ltrans0.ltrans.o 0x0000011e 0x8a /tmp/cczcSDec.ltrans0.ltrans.o
.text._puts 0x000001a8 0x40 /tmp/ccuFqAhq.ltrans0.ltrans.o .text._puts 0x000001a8 0x40 /tmp/cczcSDec.ltrans0.ltrans.o
.text.PrintHex .text.PrintHex
0x000001e8 0x5a /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000001e8 0x5a /tmp/cczcSDec.ltrans0.ltrans.o
.text.DelaySysTick .text.DelaySysTick
0x00000242 0x12 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000242 0x12 /tmp/cczcSDec.ltrans0.ltrans.o
.text.mini_itoa.part.0 .text.mini_itoa.part.0
0x00000254 0xc0 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000254 0xc0 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_i2c_setup .text.ssd1306_i2c_setup
0x00000314 0x54 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000314 0x54 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawPixel .text.ssd1306_drawPixel
0x00000368 0x3c /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000368 0x3c /tmp/cczcSDec.ltrans0.ltrans.o
.text.beep 0x000003a4 0x68 /tmp/ccuFqAhq.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 .text.led_blink
0x0000040c 0x2a /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000004a0 0x2a /tmp/cczcSDec.ltrans0.ltrans.o
.text.pet_reset .text.pet_reset
0x00000436 0x30 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000004ca 0x38 /tmp/cczcSDec.ltrans0.ltrans.o
.text.read_buttons .text.notify 0x00000502 0x8e /tmp/cczcSDec.ltrans0.ltrans.o
0x00000466 0x32 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.ssd1306_drawstr.constprop.0
0x00000498 0x78 /tmp/ccuFqAhq.ltrans0.ltrans.o
.text.draw_center_str .text.draw_center_str
0x00000510 0x26 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000590 0x28 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawFastHLine.constprop.0 .text.read_buttons
0x00000536 0x4a /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000005b8 0x32 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_drawFastVLine.constprop.0 .text.ssd1306_drawFastVLine.constprop.0
0x00000580 0x44 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000005ea 0x44 /tmp/cczcSDec.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
.text.ssd1306_drawImage.constprop.0 .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 .text.internal_handle_input.constprop.0
0x0000073e 0xa /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000007e8 0xa /tmp/cczcSDec.ltrans0.ltrans.o
.text._write.constprop.0 .text._write.constprop.0
0x00000748 0xe4 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000007f2 0xe4 /tmp/cczcSDec.ltrans0.ltrans.o
.text.__puts_uart .text.__puts_uart
0x0000082c 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000008d6 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.text.handle_reset .text.handle_reset
0x00000840 0x72 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000008ea 0x72 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000840 handle_reset 0x000008ea handle_reset
.text.vector_handler .text.vector_handler
0x000008b2 0x5a /tmp/ccuFqAhq.ltrans0.ltrans.o 0x0000095c 0x62 /tmp/cczcSDec.ltrans0.ltrans.o
0x000008b2 OPCM_IRQHandler 0x0000095c OPCM_IRQHandler
0x000008b2 EXTI2_IRQHandler 0x0000095c EXTI2_IRQHandler
0x000008b2 TIM8_TRG_COM_IRQHandler 0x0000095c TIM8_TRG_COM_IRQHandler
0x000008b2 TIM8_CC_IRQHandler 0x0000095c TIM8_CC_IRQHandler
0x000008b2 USART_WKUP_IRQHandler 0x0000095c USART_WKUP_IRQHandler
0x000008b2 UART8_IRQHandler 0x0000095c UART8_IRQHandler
0x000008b2 SPI4_IRQHandler 0x0000095c SPI4_IRQHandler
0x000008b2 NFC_IRQHandler 0x0000095c NFC_IRQHandler
0x000008b2 DFSDM0_IRQHandler 0x0000095c DFSDM0_IRQHandler
0x000008b2 TIM1_CC_IRQHandler 0x0000095c TIM1_CC_IRQHandler
0x000008b2 HardFault_Handler 0x0000095c HardFault_Handler
0x000008b2 TIM10_IRQHandler 0x0000095c TIM10_IRQHandler
0x000008b2 GPIOB_IRQHandler 0x0000095c GPIOB_IRQHandler
0x000008b2 IPC_CH2_Handler 0x0000095c IPC_CH2_Handler
0x000008b2 USBPD_IRQHandler 0x0000095c USBPD_IRQHandler
0x000008b2 TIM6_IRQHandler 0x0000095c TIM6_IRQHandler
0x000008b2 GPIOA_IRQHandler 0x0000095c GPIOA_IRQHandler
0x000008b2 SysTick_Handler 0x0000095c SysTick_Handler
0x000008b2 CAN3_RX1_IRQHandler 0x0000095c CAN3_RX1_IRQHandler
0x000008b2 I3C_ER_IRQHandler 0x0000095c I3C_ER_IRQHandler
0x000008b2 PVD_IRQHandler 0x0000095c PVD_IRQHandler
0x000008b2 SDIO_IRQHandler 0x0000095c SDIO_IRQHandler
0x000008b2 TIM9_BRK_IRQHandler 0x0000095c TIM9_BRK_IRQHandler
0x000008b2 DMA2_Channel8_IRQHandler 0x0000095c DMA2_Channel8_IRQHandler
0x000008b2 CAN2_RX1_IRQHandler 0x0000095c CAN2_RX1_IRQHandler
0x000008b2 EXTI3_IRQHandler 0x0000095c EXTI3_IRQHandler
0x000008b2 HSEM_Handler 0x0000095c HSEM_Handler
0x000008b2 UART1_IRQHandler 0x0000095c UART1_IRQHandler
0x000008b2 USBHS_IRQHandler 0x0000095c USBHS_IRQHandler
0x000008b2 LPTIM2_IRQHandler 0x0000095c LPTIM2_IRQHandler
0x000008b2 DMA2_Channel9_IRQHandler 0x0000095c DMA2_Channel9_IRQHandler
0x000008b2 TIM10_CC_IRQHandler 0x0000095c TIM10_CC_IRQHandler
0x000008b2 EXTI25_16_IRQHandler 0x0000095c EXTI25_16_IRQHandler
0x000008b2 I2C3_ER_IRQHandler 0x0000095c I2C3_ER_IRQHandler
0x000008b2 USBFS_IRQHandler 0x0000095c USBFS_IRQHandler
0x000008b2 UART0_IRQHandler 0x0000095c UART0_IRQHandler
0x000008b2 USART8_IRQHandler 0x0000095c USART8_IRQHandler
0x000008b2 EXTI0_IRQHandler 0x0000095c EXTI0_IRQHandler
0x000008b2 I2C2_EV_IRQHandler 0x0000095c I2C2_EV_IRQHandler
0x000008b2 TIM10_TRG_COM_IRQHandler 0x0000095c TIM10_TRG_COM_IRQHandler
0x000008b2 LPTIM_IRQHandler 0x0000095c LPTIM_IRQHandler
0x000008b2 CAN1_RX0_IRQHandler 0x0000095c CAN1_RX0_IRQHandler
0x000008b2 CAN3_SCE_IRQHandler 0x0000095c CAN3_SCE_IRQHandler
0x000008b2 CAN2_SCE_IRQHandler 0x0000095c CAN2_SCE_IRQHandler
0x000008b2 ADC1_2_IRQHandler 0x0000095c ADC1_2_IRQHandler
0x000008b2 BB_IRQHandler 0x0000095c BB_IRQHandler
0x000008b2 Break_Point_Handler 0x0000095c Break_Point_Handler
0x000008b2 IPC_CH0_Handler 0x0000095c IPC_CH0_Handler
0x000008b2 TIM2_CC_IRQHandler 0x0000095c TIM2_CC_IRQHandler
0x000008b2 SPI1_IRQHandler 0x0000095c SPI1_IRQHandler
0x000008b2 USART5_IRQHandler 0x0000095c USART5_IRQHandler
0x000008b2 TAMPER_IRQHandler 0x0000095c TAMPER_IRQHandler
0x000008b2 TMR0_IRQHandler 0x0000095c TMR0_IRQHandler
0x000008b2 AWU_IRQHandler 0x0000095c AWU_IRQHandler
0x000008b2 EXTI7_0_IRQHandler 0x0000095c EXTI7_0_IRQHandler
0x000008b2 CAN2_RX0_IRQHandler 0x0000095c CAN2_RX0_IRQHandler
0x000008b2 OSCWakeUp_IRQHandler 0x0000095c OSCWakeUp_IRQHandler
0x000008b2 TIM8_UP_IRQHandler 0x0000095c TIM8_UP_IRQHandler
0x000008b2 Ecall_M_Mode_Handler 0x0000095c Ecall_M_Mode_Handler
0x000008b2 ECDC_IRQHandler 0x0000095c ECDC_IRQHandler
0x000008b2 SDMMC_IRQHandler 0x0000095c SDMMC_IRQHandler
0x000008b2 USART7_IRQHandler 0x0000095c USART7_IRQHandler
0x000008b2 DMA2_Channel2_IRQHandler 0x0000095c DMA2_Channel2_IRQHandler
0x000008b2 DMA1_Channel4_IRQHandler 0x0000095c DMA1_Channel4_IRQHandler
0x000008b2 ADC1_IRQHandler 0x0000095c ADC1_IRQHandler
0x000008b2 TIM2_BRK_IRQHandler 0x0000095c TIM2_BRK_IRQHandler
0x000008b2 USART6_IRQHandler 0x0000095c USART6_IRQHandler
0x000008b2 CAN3_RX0_IRQHandler 0x0000095c CAN3_RX0_IRQHandler
0x000008b2 HSADC_IRQHandler 0x0000095c HSADC_IRQHandler
0x000008b2 TIM9_UP_IRQHandler 0x0000095c TIM9_UP_IRQHandler
0x000008b2 USART3_IRQHandler 0x0000095c USART3_IRQHandler
0x000008b2 RTC_IRQHandler 0x0000095c RTC_IRQHandler
0x000008b2 DMA1_Channel7_IRQHandler 0x0000095c DMA1_Channel7_IRQHandler
0x000008b2 LED_IRQHandler 0x0000095c LED_IRQHandler
0x000008b2 CAN1_RX1_IRQHandler 0x0000095c CAN1_RX1_IRQHandler
0x000008b2 DVP_IRQHandler 0x0000095c DVP_IRQHandler
0x000008b2 UART5_IRQHandler 0x0000095c UART5_IRQHandler
0x000008b2 USBSS_IRQHandler 0x0000095c USBSS_IRQHandler
0x000008b2 SWPMI_IRQHandler 0x0000095c SWPMI_IRQHandler
0x000008b2 USBPDWakeUp_IRQHandler 0x0000095c USBPDWakeUp_IRQHandler
0x000008b2 EXTI15_8_IRQHandler 0x0000095c EXTI15_8_IRQHandler
0x000008b2 TIM4_IRQHandler 0x0000095c TIM4_IRQHandler
0x000008b2 DMA2_Channel1_IRQHandler 0x0000095c DMA2_Channel1_IRQHandler
0x000008b2 SWPMI_WKUP_IRQHandler 0x0000095c SWPMI_WKUP_IRQHandler
0x000008b2 USBPD_WKUP_IRQHandler 0x0000095c USBPD_WKUP_IRQHandler
0x000008b2 I2C1_EV_IRQHandler 0x0000095c I2C1_EV_IRQHandler
0x000008b2 USBSSWakeup_IRQHandler 0x0000095c USBSSWakeup_IRQHandler
0x000008b2 UART2_IRQHandler 0x0000095c UART2_IRQHandler
0x000008b2 USART4_IRQHandler 0x0000095c USART4_IRQHandler
0x000008b2 PWMX_IRQHandler 0x0000095c PWMX_IRQHandler
0x000008b2 DMA1_Channel6_IRQHandler 0x0000095c DMA1_Channel6_IRQHandler
0x000008b2 UART4_IRQHandler 0x0000095c UART4_IRQHandler
0x000008b2 DMA2_Channel4_IRQHandler 0x0000095c DMA2_Channel4_IRQHandler
0x000008b2 TIM3_IRQHandler 0x0000095c TIM3_IRQHandler
0x000008b2 RCC_IRQHandler 0x0000095c RCC_IRQHandler
0x000008b2 TIM1_TRG_COM_IRQHandler 0x0000095c TIM1_TRG_COM_IRQHandler
0x000008b2 DMA1_Channel1_IRQHandler 0x0000095c DMA1_Channel1_IRQHandler
0x000008b2 DMA2_Channel7_IRQHandler 0x0000095c DMA2_Channel7_IRQHandler
0x000008b2 QSPI1_IRQHandler 0x0000095c QSPI1_IRQHandler
0x000008b2 EXTI15_10_IRQHandler 0x0000095c EXTI15_10_IRQHandler
0x000008b2 ADC_IRQHandler 0x0000095c ADC_IRQHandler
0x000008b2 IPC_CH3_Handler 0x0000095c IPC_CH3_Handler
0x000008b2 DMA1_Channel8_IRQHandler 0x0000095c DMA1_Channel8_IRQHandler
0x000008b2 I3C_EV_IRQHandler 0x0000095c I3C_EV_IRQHandler
0x000008b2 TMR2_IRQHandler 0x0000095c TMR2_IRQHandler
0x000008b2 I3C_WKUP_IRQHandler 0x0000095c I3C_WKUP_IRQHandler
0x000008b2 DefaultIRQHandler 0x0000095c DefaultIRQHandler
0x000008b2 TIM12_IRQHandler 0x0000095c TIM12_IRQHandler
0x000008b2 TIM7_IRQHandler 0x0000095c TIM7_IRQHandler
0x000008b2 CAN2_TX_IRQHandler 0x0000095c CAN2_TX_IRQHandler
0x000008b2 TIM5_IRQHandler 0x0000095c TIM5_IRQHandler
0x000008b2 I2C3_EV_IRQHandler 0x0000095c I2C3_EV_IRQHandler
0x000008b2 USB_IRQHandler 0x0000095c USB_IRQHandler
0x000008b2 EXTI9_5_IRQHandler 0x0000095c EXTI9_5_IRQHandler
0x000008b2 PIOC_IRQHandler 0x0000095c PIOC_IRQHandler
0x000008b2 TIM9_IRQHandler 0x0000095c TIM9_IRQHandler
0x000008b2 LTDC_IRQHandler 0x0000095c LTDC_IRQHandler
0x000008b2 SAI_IRQHandler 0x0000095c SAI_IRQHandler
0x000008b2 SPI2_IRQHandler 0x0000095c SPI2_IRQHandler
0x000008b2 OSC32KCal_IRQHandler 0x0000095c OSC32KCal_IRQHandler
0x000008b2 IPC_CH1_Handler 0x0000095c IPC_CH1_Handler
0x000008b2 I2C_IRQHandler 0x0000095c I2C_IRQHandler
0x000008b2 LPTIM1_WKUP_IRQHandler 0x0000095c LPTIM1_WKUP_IRQHandler
0x000008b2 TIM10_BRK_IRQHandler 0x0000095c TIM10_BRK_IRQHandler
0x000008b2 TIM9_CC_IRQHandler 0x0000095c TIM9_CC_IRQHandler
0x000008b2 CAN1_TX_IRQHandler 0x0000095c CAN1_TX_IRQHandler
0x000008b2 DMA2_Channel5_IRQHandler 0x0000095c DMA2_Channel5_IRQHandler
0x000008b2 USB2_IRQHandler 0x0000095c USB2_IRQHandler
0x000008b2 USBHSWakeUp_IRQHandler 0x0000095c USBHSWakeUp_IRQHandler
0x000008b2 DMA1_Channel5_IRQHandler 0x0000095c DMA1_Channel5_IRQHandler
0x000008b2 EXTI4_IRQHandler 0x0000095c EXTI4_IRQHandler
0x000008b2 USB_LP_CAN1_RX0_IRQHandler 0x0000095c USB_LP_CAN1_RX0_IRQHandler
0x000008b2 QSPI2_IRQHandler 0x0000095c QSPI2_IRQHandler
0x000008b2 RNG_IRQHandler 0x0000095c RNG_IRQHandler
0x000008b2 USB_HP_CAN1_TX_IRQHandler 0x0000095c USB_HP_CAN1_TX_IRQHandler
0x000008b2 LLE_IRQHandler 0x0000095c LLE_IRQHandler
0x000008b2 CMPWakeUp_IRQHandler 0x0000095c CMPWakeUp_IRQHandler
0x000008b2 DMA1_Channel3_IRQHandler 0x0000095c DMA1_Channel3_IRQHandler
0x000008b2 FSMC_IRQHandler 0x0000095c FSMC_IRQHandler
0x000008b2 ETH_IRQHandler 0x0000095c ETH_IRQHandler
0x000008b2 TIM1_UP_IRQHandler 0x0000095c TIM1_UP_IRQHandler
0x000008b2 LPTIMWakeUp_IRQHandler 0x0000095c LPTIMWakeUp_IRQHandler
0x000008b2 WWDG_IRQHandler 0x0000095c WWDG_IRQHandler
0x000008b2 USBHSWakeup_IRQHandler 0x0000095c USBHSWakeup_IRQHandler
0x000008b2 DMA2_Channel11_IRQHandler 0x0000095c DMA2_Channel11_IRQHandler
0x000008b2 WDOG_BAT_IRQHandler 0x0000095c WDOG_BAT_IRQHandler
0x000008b2 Ecall_U_Mode_Handler 0x0000095c Ecall_U_Mode_Handler
0x000008b2 I2C4_EV_IRQHandler 0x0000095c I2C4_EV_IRQHandler
0x000008b2 CAN3_TX_IRQHandler 0x0000095c CAN3_TX_IRQHandler
0x000008b2 TMR3_IRQHandler 0x0000095c TMR3_IRQHandler
0x000008b2 DMA2_Channel6_IRQHandler 0x0000095c DMA2_Channel6_IRQHandler
0x000008b2 TIM2_IRQHandler 0x0000095c TIM2_IRQHandler
0x000008b2 SW_Handler 0x0000095c SW_Handler
0x000008b2 TIM1_BRK_IRQHandler 0x0000095c TIM1_BRK_IRQHandler
0x000008b2 GPHA_IRQHandler 0x0000095c GPHA_IRQHandler
0x000008b2 OPA_IRQHandler 0x0000095c OPA_IRQHandler
0x000008b2 DMA2_Channel10_IRQHandler 0x0000095c DMA2_Channel10_IRQHandler
0x000008b2 EXTI1_IRQHandler 0x0000095c EXTI1_IRQHandler
0x000008b2 SPI0_IRQHandler 0x0000095c SPI0_IRQHandler
0x000008b2 USB2_HOST_IRQHandler 0x0000095c USB2_HOST_IRQHandler
0x000008b2 LPTIM2_WKUP_IRQHandler 0x0000095c LPTIM2_WKUP_IRQHandler
0x000008b2 RTCAlarm_IRQHandler 0x0000095c RTCAlarm_IRQHandler
0x000008b2 TIM11_IRQHandler 0x0000095c TIM11_IRQHandler
0x000008b2 TIM10_UP_IRQHandler 0x0000095c TIM10_UP_IRQHandler
0x000008b2 TIM9_TRG_COM_IRQHandler 0x0000095c TIM9_TRG_COM_IRQHandler
0x000008b2 UART7_IRQHandler 0x0000095c UART7_IRQHandler
0x000008b2 USART2_IRQHandler 0x0000095c USART2_IRQHandler
0x000008b2 UART6_IRQHandler 0x0000095c UART6_IRQHandler
0x000008b2 UHSIF_IRQHandler 0x0000095c UHSIF_IRQHandler
0x000008b2 ETHWakeUp_IRQHandler 0x0000095c ETHWakeUp_IRQHandler
0x000008b2 I2C2_ER_IRQHandler 0x0000095c I2C2_ER_IRQHandler
0x000008b2 DMA1_Channel2_IRQHandler 0x0000095c DMA1_Channel2_IRQHandler
0x000008b2 TIM8_BRK_IRQHandler 0x0000095c TIM8_BRK_IRQHandler
0x000008b2 TIM2_TRG_IRQHandler 0x0000095c TIM2_TRG_IRQHandler
0x000008b2 CAN1_SCE_IRQHandler 0x0000095c CAN1_SCE_IRQHandler
0x000008b2 FLASH_IRQHandler 0x0000095c FLASH_IRQHandler
0x000008b2 USBFSWakeUp_IRQHandler 0x0000095c USBFSWakeUp_IRQHandler
0x000008b2 USART1_IRQHandler 0x0000095c USART1_IRQHandler
0x000008b2 OTG_FS_IRQHandler 0x0000095c OTG_FS_IRQHandler
0x000008b2 SPI3_IRQHandler 0x0000095c SPI3_IRQHandler
0x000008b2 USBFS_WakeUp_IRQHandler 0x0000095c USBFS_WakeUp_IRQHandler
0x000008b2 UART3_IRQHandler 0x0000095c UART3_IRQHandler
0x000008b2 I2C1_ER_IRQHandler 0x0000095c I2C1_ER_IRQHandler
0x000008b2 FMC_IRQHandler 0x0000095c FMC_IRQHandler
0x000008b2 USB2_DEVICE_IRQHandler 0x0000095c USB2_DEVICE_IRQHandler
0x000008b2 LPTIM1_IRQHandler 0x0000095c LPTIM1_IRQHandler
0x000008b2 DFSDM1_IRQHandler 0x0000095c DFSDM1_IRQHandler
0x000008b2 TMR1_IRQHandler 0x0000095c TMR1_IRQHandler
0x000008b2 I2C4_ER_IRQHandler 0x0000095c I2C4_ER_IRQHandler
0x000008b2 SERDES_IRQHandler 0x0000095c SERDES_IRQHandler
0x000008b2 USBSS_LINK_IRQHandler 0x0000095c USBSS_LINK_IRQHandler
0x000008b2 USBWakeUp_IRQHandler 0x0000095c USBWakeUp_IRQHandler
0x000008b2 DMA2_Channel3_IRQHandler 0x0000095c DMA2_Channel3_IRQHandler
0x000008fe NMI_Handler 0x000009b0 NMI_Handler
0x000008fe NMI_RCC_CSS_IRQHandler 0x000009b0 NMI_RCC_CSS_IRQHandler
.text.strlen 0x0000090c 0x12 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strlen 0x000009be 0x12 /tmp/cczcSDec.ltrans0.ltrans.o
0x0000090c strlen 0x000009be strlen
.text.mini_vpprintf .text.mini_vpprintf
0x0000091e 0x1c2 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x000009d0 0x1c2 /tmp/cczcSDec.ltrans0.ltrans.o
.text.printf 0x00000ae0 0x24 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.printf 0x00000b92 0x24 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000ae0 printf 0x00000b92 printf
.text.ssd1306_i2c_error.isra.0 .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 .text.ssd1306_i2c_send.constprop.0
0x00000b24 0x122 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000bd6 0x122 /tmp/cczcSDec.ltrans0.ltrans.o
.text.ssd1306_cmd .text.ssd1306_cmd
0x00000c46 0x1c /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000cf8 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.text.mini_vsnprintf .text.mini_vsnprintf
0x00000c62 0x38 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000d14 0x38 /tmp/cczcSDec.ltrans0.ltrans.o
.text.snprintf .text.snprintf
0x00000c9a 0x16 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000d4c 0x16 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000c9a snprintf 0x00000d4c snprintf
.text.memset 0x00000cb0 0x12 /tmp/ccuFqAhq.ltrans0.ltrans.o .text.memset 0x00000d62 0x12 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000cb0 memset 0x00000d62 memset
.text.ssd1306_setbuf.constprop.0 .text.ssd1306_setbuf.constprop.0
0x00000cc2 0xc /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000d74 0xc /tmp/cczcSDec.ltrans0.ltrans.o
.text.memcpy 0x00000cce 0x1c /tmp/ccuFqAhq.ltrans0.ltrans.o .text.strcpy 0x00000d80 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000cce memcpy 0x00000d80 strcpy
.text.memcpy 0x00000d94 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
0x00000d94 memcpy
.text.ssd1306_refresh .text.ssd1306_refresh
0x00000cea 0x5c /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000db0 0x5c /tmp/cczcSDec.ltrans0.ltrans.o
.text.SystemInit .text.SystemInit
0x00000d46 0x54 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000e0c 0x54 /tmp/cczcSDec.ltrans0.ltrans.o
0x00000d46 SystemInit 0x00000e0c SystemInit
.text.startup.main .text.startup.main
0x00000d9a 0x8ea /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000e60 0xaaa /tmp/cczcSDec.ltrans0.ltrans.o
0x00000d9a main 0x00000e60 main
*(.rodata) *(.rodata)
*(.rodata*) *(.rodata*)
*fill* 0x00001684 0x0 *fill* 0x0000190a 0x2
.rodata.ssd1306_i2c_error.isra.0.str1.4 .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) 0x2d (size before relaxing)
.rodata.main.str1.4 .rodata.main.str1.4
0x000017b2 0x89 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001aa4 0xd9 /tmp/cczcSDec.ltrans0.ltrans.o
*fill* 0x000017b2 0x2 .rodata.main 0x00001aa4 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.main 0x000017b4 0x18 /tmp/ccuFqAhq.ltrans0.ltrans.o .rodata.icon_settings
0x00001ac0 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_stats .rodata.icon_stats
0x000017cc 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001ae0 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_heal .rodata.icon_heal
0x000017ec 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001b00 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_clean .rodata.icon_clean
0x0000180c 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001b20 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_sleep .rodata.icon_sleep
0x0000182c 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001b40 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_play .rodata.icon_play
0x0000184c 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001b60 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.icon_feed .rodata.icon_feed
0x0000186c 0x20 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001b80 0x20 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_dead .rodata.pana_dead
0x0000188c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001ba0 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_sleep .rodata.pana_sleep
0x0000190c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001c20 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_eat .rodata.pana_eat
0x0000198c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001ca0 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_sad .rodata.pana_sad
0x00001a0c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001d20 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_happy .rodata.pana_happy
0x00001a8c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001da0 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_blink .rodata.pana_blink
0x00001b0c 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001e20 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.str1.4 .rodata.str1.4
0x00001b8c 0x76 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001ea0 0x90 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.errstr .rodata.errstr
0x00001b8c 0x14 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001ea0 0x14 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.fontdata
0x00001ba0 0x800 /tmp/ccuFqAhq.ltrans0.ltrans.o
.rodata.ssd1306_init_array .rodata.ssd1306_init_array
0x000023a0 0x1a /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001eb4 0x1a /tmp/cczcSDec.ltrans0.ltrans.o
*fill* 0x000023ba 0x2 *fill* 0x00001ece 0x2
.rodata.pana_idle .rodata.pana_idle
0x000023bc 0x80 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001ed0 0x80 /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.menu_icons .rodata.menu_icons
0x0000243c 0x18 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001f50 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.pana_frames .rodata.pana_frames
0x00002454 0x1c /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00001f6c 0x1c /tmp/cczcSDec.ltrans0.ltrans.o
.rodata.menu_labels .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 .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.*) *(.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)) *(SORT_NONE(.fini))
0x00002508 . = ALIGN (0x4) 0x00002834 . = ALIGN (0x4)
[!provide] PROVIDE (_etext = .) [!provide] PROVIDE (_etext = .)
[!provide] PROVIDE (_eitcm = .) [!provide] PROVIDE (_eitcm = .)
.preinit_array 0x00002508 0x0 .preinit_array 0x00002834 0x0
[!provide] PROVIDE (__preinit_array_start = .) [!provide] PROVIDE (__preinit_array_start = .)
*(.preinit_array) *(.preinit_array)
[!provide] PROVIDE (__preinit_array_end = .) [!provide] PROVIDE (__preinit_array_end = .)
.init_array 0x00002508 0x0 .init_array 0x00002834 0x0
0x00002508 PROVIDE (__init_array_start = .) 0x00002834 PROVIDE (__init_array_start = .)
*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)) *(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))
*(.init_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .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 = .) [!provide] PROVIDE (__fini_array_start = .)
*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)) *(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))
*(.fini_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .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.*)) *(SORT_BY_NAME(.dtors.*))
*(.dtors) *(.dtors)
.dalign 0x20000000 0x0 load address 0x00002508 .dalign 0x20000000 0x0 load address 0x00002834
0x20000000 . = ALIGN (0x4) 0x20000000 . = ALIGN (0x4)
0x20000000 PROVIDE (_data_vma = .) 0x20000000 PROVIDE (_data_vma = .)
.dlalign 0x00002508 0x0 .dlalign 0x00002834 0x0
0x00002508 . = ALIGN (0x4) 0x00002834 . = ALIGN (0x4)
0x00002508 PROVIDE (_data_lma = .) 0x00002834 PROVIDE (_data_lma = .)
.data 0x20000000 0x8 load address 0x00002508 .data 0x20000000 0x18 load address 0x00002834
0x20000000 . = ALIGN (0x4) 0x20000000 . = ALIGN (0x4)
0x200003fc __global_pointer$ = (. + 0x3fc) 0x200003fc __global_pointer$ = (. + 0x3fc)
*(.gnu.linkonce.r.*) *(.gnu.linkonce.r.*)
@ -467,47 +476,59 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a
*(.gnu.linkonce.d.*) *(.gnu.linkonce.d.*)
0x20000000 . = ALIGN (0x8) 0x20000000 . = ALIGN (0x8)
*(.sdata .sdata.*) *(.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*) *(.sdata2*)
*(.gnu.linkonce.s.*) *(.gnu.linkonce.s.*)
0x20000000 . = ALIGN (0x8) 0x20000008 . = ALIGN (0x8)
*fill* 0x20000003 0x5
*(.srodata.cst16) *(.srodata.cst16)
*(.srodata.cst8) *(.srodata.cst8)
*(.srodata.cst4) *(.srodata.cst4)
*(.srodata.cst2) *(.srodata.cst2)
*(.srodata .srodata.*) *(.srodata .srodata.*)
.srodata.spr_poop .srodata.spr_poop
0x20000000 0x8 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x20000008 0x8 /tmp/cczcSDec.ltrans0.ltrans.o
0x20000008 . = ALIGN (0x4) .srodata.screen_timeout_opts
0x20000008 PROVIDE (_edata = .) 0x20000010 0x8 /tmp/cczcSDec.ltrans0.ltrans.o
0x20000018 . = ALIGN (0x4)
0x20000018 PROVIDE (_edata = .)
.rela.dyn 0x20000008 0x0 load address 0x00002510 .bss 0x20000018 0x428 load address 0x0000284c
.rela.text.handle_reset 0x20000018 . = ALIGN (0x4)
0x20000008 0x0 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x20000018 PROVIDE (_sbss = .)
.bss 0x20000008 0x41c load address 0x00002510
0x20000008 . = ALIGN (0x4)
0x20000008 PROVIDE (_sbss = .)
*(.sbss*) *(.sbss*)
.sbss.anim_exp .sbss.anim_exp
0x20000008 0x1 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x20000018 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
*fill* 0x20000009 0x3 *fill* 0x20000019 0x3
.sbss.frame 0x2000000c 0x4 /tmp/ccuFqAhq.ltrans0.ltrans.o .sbss.frame 0x2000001c 0x4 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.tick_acc .sbss.tick_acc
0x20000010 0x2 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x20000020 0x2 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.anim_timer .sbss.anim_timer
0x20000012 0x1 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x20000022 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.cursor 0x20000013 0x1 /tmp/ccuFqAhq.ltrans0.ltrans.o .sbss.set_sel 0x20000023 0x1 /tmp/cczcSDec.ltrans0.ltrans.o
.sbss.screen 0x20000014 0x1 /tmp/ccuFqAhq.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.*) *(.gnu.linkonce.sb.*)
*(.bss*) *(.bss*)
*fill* 0x20000015 0x3 *fill* 0x20000032 0x2
.bss.pet 0x20000018 0xc /tmp/ccuFqAhq.ltrans0.ltrans.o .bss.pet 0x20000034 0xc /tmp/cczcSDec.ltrans0.ltrans.o
.bss.ssd1306_buffer .bss.ssd1306_buffer
0x20000024 0x400 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x20000040 0x400 /tmp/cczcSDec.ltrans0.ltrans.o
*(.gnu.linkonce.b.*) *(.gnu.linkonce.b.*)
*(COMMON*) *(COMMON*)
0x20000424 . = ALIGN (0x4) 0x20000440 . = ALIGN (0x4)
0x20000424 PROVIDE (_ebss = .) 0x20000440 PROVIDE (_ebss = .)
[!provide] PROVIDE (_end = _ebss) [!provide] PROVIDE (_end = _ebss)
[!provide] PROVIDE (end = .) [!provide] PROVIDE (end = .)
0x20000800 PROVIDE (_eusrstack = (ORIGIN (RAM) + LENGTH (RAM))) 0x20000800 PROVIDE (_eusrstack = (ORIGIN (RAM) + LENGTH (RAM)))
@ -523,64 +544,64 @@ OUTPUT(tama.elf elf32-littleriscv)
.riscv.attributes .riscv.attributes
0x00000000 0x25 0x00000000 0x25
.riscv.attributes .riscv.attributes
0x00000000 0x25 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x25 /tmp/cczcSDec.ltrans0.ltrans.o
.riscv.attributes .riscv.attributes
0x00000025 0x1f ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) 0x00000025 0x1f ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_info 0x00000000 0x49c5 .debug_info 0x00000000 0x4ec9
.debug_info 0x00000000 0x25b8 /tmp/ccuFqAhq.ltrans0.ltrans.o .debug_info 0x00000000 0x2938 /tmp/cczcSDec.ltrans0.ltrans.o
.debug_info 0x000025b8 0x1159 /tmp/cc6O5Yfp.debug.temp.o .debug_info 0x00002938 0x1159 /tmp/ccb2Xekb.debug.temp.o
0x000025b8 ch32fun.c.3da016ab 0x00002938 ch32fun.c.3da016ab
.debug_info 0x00003711 0x1257 /tmp/ccQWTvKu.debug.temp.o .debug_info 0x00003a91 0x13db /tmp/ccR20L1X.debug.temp.o
0x00003711 tama.c.f19bf6d4 0x00003a91 tama.c.67bb5960
.debug_info 0x00004968 0x5d ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .debug_info 0x00004e6c 0x5d ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_abbrev 0x00000000 0x7c5 .debug_abbrev 0x00000000 0x7c2
.debug_abbrev 0x00000000 0x20c /tmp/ccuFqAhq.ltrans0.ltrans.o .debug_abbrev 0x00000000 0x209 /tmp/cczcSDec.ltrans0.ltrans.o
.debug_abbrev 0x0000020c 0x278 /tmp/cc6O5Yfp.debug.temp.o .debug_abbrev 0x00000209 0x278 /tmp/ccb2Xekb.debug.temp.o
.debug_abbrev 0x00000484 0x319 /tmp/ccQWTvKu.debug.temp.o .debug_abbrev 0x00000481 0x319 /tmp/ccR20L1X.debug.temp.o
.debug_abbrev 0x0000079d 0x28 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .debug_abbrev 0x0000079a 0x28 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_loclists .debug_loclists
0x00000000 0x20c5 0x00000000 0x232b
.debug_loclists .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 .debug_aranges
0x00000000 0x1e0 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x1e8 /tmp/cczcSDec.ltrans0.ltrans.o
.debug_aranges .debug_aranges
0x000001e0 0x20 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) 0x000001e8 0x20 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_rnglists .debug_rnglists
0x00000000 0x4a6 0x00000000 0x4e8
.debug_rnglists .debug_rnglists
0x00000000 0x4a6 /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x4e8 /tmp/cczcSDec.ltrans0.ltrans.o
.debug_line 0x00000000 0x4835 .debug_line 0x00000000 0x4f23
.debug_line 0x00000000 0x45f0 /tmp/ccuFqAhq.ltrans0.ltrans.o .debug_line 0x00000000 0x4cde /tmp/cczcSDec.ltrans0.ltrans.o
.debug_line 0x000045f0 0x76 /tmp/cc6O5Yfp.debug.temp.o .debug_line 0x00004cde 0x76 /tmp/ccb2Xekb.debug.temp.o
.debug_line 0x00004666 0x7c /tmp/ccQWTvKu.debug.temp.o .debug_line 0x00004d54 0x7c /tmp/ccR20L1X.debug.temp.o
.debug_line 0x000046e2 0x153 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .debug_line 0x00004dd0 0x153 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_str 0x00000000 0xf6f .debug_str 0x00000000 0x1069
.debug_str 0x00000000 0xf6f /tmp/ccuFqAhq.ltrans0.ltrans.o .debug_str 0x00000000 0x1069 /tmp/cczcSDec.ltrans0.ltrans.o
0x1c2 (size before relaxing) 0x1da (size before relaxing)
.debug_str 0x00000f6f 0x751 /tmp/cc6O5Yfp.debug.temp.o .debug_str 0x00001069 0x751 /tmp/ccb2Xekb.debug.temp.o
.debug_str 0x00000f6f 0x994 /tmp/ccQWTvKu.debug.temp.o .debug_str 0x00001069 0xa84 /tmp/ccR20L1X.debug.temp.o
.debug_str 0x00000f6f 0xd9 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .debug_str 0x00001069 0xd9 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_line_str .debug_line_str
0x00000000 0x33f 0x00000000 0x33f
.debug_line_str .debug_line_str
0x00000000 0x33f /tmp/ccuFqAhq.ltrans0.ltrans.o 0x00000000 0x33f /tmp/cczcSDec.ltrans0.ltrans.o
0x157 (size before relaxing) 0x157 (size before relaxing)
.debug_line_str .debug_line_str
0x0000033f 0x246 /tmp/cc6O5Yfp.debug.temp.o 0x0000033f 0x246 /tmp/ccb2Xekb.debug.temp.o
.debug_line_str .debug_line_str
0x0000033f 0x1e5 /tmp/ccQWTvKu.debug.temp.o 0x0000033f 0x1e5 /tmp/ccR20L1X.debug.temp.o
.debug_line_str .debug_line_str
0x0000033f 0x92 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) 0x0000033f 0x92 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o)
.debug_frame 0x00000000 0x5b0 .debug_frame 0x00000000 0x5dc
.debug_frame 0x00000000 0x5b0 /tmp/ccuFqAhq.ltrans0.ltrans.o .debug_frame 0x00000000 0x5dc /tmp/cczcSDec.ltrans0.ltrans.o