resource-optimization-lowend

v2026.09.24

Resource optimization skill for constrained embedded targets. Use when reducing flash/RAM usage, analyzing stack depth, reading linker map files, or tuning size vs speed on MCUs. Activates on queries about firmware size optimization, linker map, stack usage, -Os, flash RAM budget, or bloat analysis.

GitHub
Install command
npx skhub add mohitmishra786/resource-optimization-lowend
Markdown
SKILL.md

Resource Optimization (Low-End Systems)

Purpose

Guide agents through flash and RAM optimization on constrained devices: compiler size flags, linker map analysis, stack usage measurement, dead code elimination, and size-vs-speed tradeoffs — for bare-metal and small RTOS images.

When to Use

  • Firmware exceeds flash budget
  • Stack overflow in production only
  • Choosing -Os vs -O2 on MCU
  • Finding unexpected .rodata or .bss growth

Workflow

1. Size measurement toolchain

arm-none-eabi-size -A firmware.elf
arm-none-eabi-objdump -h firmware.elf
nm --size-sort -S firmware.elf | tail -20

2. Linker map file

/* linker.ld */
OUTPUT_FORMAT("elf32-littlearm")
ENTRY(Reset_Handler)

SECTIONS
{
  /* ... */
}

/* Generate map */
/* gcc ... -Wl,-Map=firmware.map */
grep -E '\.text|\.rodata|\.data|\.bss' firmware.map | head

Identify largest symbols and unexpected library pull-in.

3. Compiler flags

FlagEffect
-OsSize-first optimization
-ffunction-sections -fdata-sectionsPer-symbol sections
-Wl,--gc-sectionsDrop unused sections
-fltoCross-TU dead code elimination
-specs=nano.specsSmaller newlib (GCC ARM)
CFLAGS += -Os -ffunction-sections -fdata-sections
LDFLAGS += -Wl,--gc-sections -Wl,--print-memory-usage

4. Stack analysis

# Static (if built with -fstack-usage)
find . -name '*.su' -exec cat {} \;

# Linker stack symbol
grep _estack firmware.map

Runtime: fill stack with pattern (0xDEADBEEF), run tests, scan high-water mark. FreeRTOS: uxTaskGetStackHighWaterMark.

5. RAM categories

SectionTactic
.bssShrink buffers; pool allocators
.dataMove const to flash (const → .rodata)
HeapAvoid malloc; fixed pools
StackReduce nesting; smaller ISR stacks

6. Size vs speed decision

Hot path in ISR or 1 kHz loop?
├── Yes → -O2 for that file (#pragma GCC optimize)
└── No  → -Os globally

7. Agent usage

/resource-optimization-lowend Find top 10 flash consumers in firmware.map and suggest -gc-sections fixes

Common Problems

SymptomCauseFix
printf pulls 20+ KBFull newlib printf_write retarget; tiny printf
--gc-sections broke IRQSection collectedKEEP() in linker script
Stack overflow lateDeep call + IRQ nestMeasure HW stack; increase _estack
RAM zero but big ELF.data not loadedCheck VMA/LMA
LTO link failMixed compiler versionsSame GCC for all objects

Related Skills

  • skills/embedded/linker-scripts — MEMORY/Sections layout
  • skills/baremetal/baremetal-startup — stack symbol
  • skills/baremetal/low-power-embedded — RAM retention
  • skills/compilers/gcc — optimization flags
  • skills/rust/rust-no-std — embedded Rust size patterns
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/qemu/resource-optimization-lowend

Default branch

main

Latest commit

bdc5847

Tree SHA

1178323