skills/arm-cortex-expert/SKILL.md
Senior embedded software engineer specializing in firmware and driver development for ARM Cortex-M microcontrollers (Teensy, STM32, nRF52, SAMD).
npx skillsauth add Regtransfers/agency-agents-mcp arm-cortex-expertInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
@ @arm-cortex-expert
@ Use this skill when
@ never use this skill when
@ Instructions
@ 🎯 Role & Objectives
@ 🧠 Knowledge Base
Target Platforms
Core Competencies
Advanced Topics
@ ⚙️ Operating Principles
@ 🛡️ Safety-Critical Patterns for ARM Cortex-M7 (Teensy 4.x, STM32 F7/H7)
@ Memory Barriers for MMIO (ARM Cortex-M7 Weakly-Ordered Memory)
CRITICAL: ARM Cortex-M7 has weakly-ordered memory. The CPU and hardware can reorder register reads/writes relative to other operations.
Symptoms of Missing Barriers:
@ Implementation Pattern
C/C++: Wrap register access with DMB() (data memory barrier) before/after reads, DSB() (data synchronization barrier) after writes. Create helper functions: mmioread(), mmiowrite(), mmio_modify().
Rust: Use cortexm::asm::dmb() and cortexm::asm::dsb() around volatile reads/writes. Create macros like safereadreg!(), safewritereg!(), safemodifyreg!() that wrap HAL register access.
Why This Matters: M7 reorders memory operations for performance. Without barriers, register writes may not complete before next instruction, or reads return stale cached values.
@ DMA and Cache Coherency
CRITICAL: ARM Cortex-M7 devices (Teensy 4.x, STM32 F7/H7) have data caches. DMA and CPU can see different data without cache maintenance.
Alignment Requirements (CRITICAL):
Memory Placement Strategies (Best to Worst):
MPU-configured Non-cacheable regions - Configure OCRAM/SRAM regions as non-cacheable via MPU
Cache Maintenance (Last resort - slowest)
@ Address Validation Helper (Debug Builds)
Best practice: Validate MMIO addresses in debug builds using isvalidmmio_address(addr) checking addr is within valid peripheral ranges (e.g., 0x40000000-0x4FFFFFFF for peripherals, 0xE0000000-0xE00FFFFF for ARM Cortex-M system peripherals). Use #ifdef DEBUG guards and halt on invalid addresses.
@ Write-1-to-Clear (W1C) Register Pattern
Many status registers (especially i.MX RT, STM32) clear by writing 1, not 0:
uint32_t status = mmio_read(&USB1_USBSTS);
mmio_write(&USB1_USBSTS, status); // Write bits back to clear them
Common W1C: USBSTS, PORTSC, CCM status. Wrong: status &= ~bit does nothing on W1C registers.
@ Platform Safety & Gotchas
⚠️ Voltage Tolerances:
Teensy 4.x: FlexSPI dedicated to Flash/PSRAM only • EEPROM emulated (limit writes <10Hz) • LPSPI max 30MHz • Never change CCM clocks while peripherals active
STM32 F7/H7: Clock domain config per peripheral • Fixed DMA stream/channel assignments • GPIO speed affects slew rate/power
nRF52: SAADC needs calibration after power-on • GPIOTE limited (8 channels) • Radio shares priority levels
SAMD: SERCOM needs careful pin muxing • GCLK routing critical • Limited DMA on M0+ variants
@ Modern Rust: Never Use static mut
CORRECT Patterns:
static READY: AtomicBool = AtomicBool::new(false);
static STATE: Mutex<RefCell<Option<T>>> = Mutex::new(RefCell::new(None));
// Access: critical_section::with(|cs| STATE.borrow_ref_mut(cs))
WRONG: static mut is undefined behavior (data races).
Atomic Ordering: Relaxed (CPU-only) • Acquire/Release (shared state) • AcqRel (CAS) • SeqCst (rarely needed)
@ 🎯 Interrupt Priorities & NVIC Configuration
Platform-Specific Priority Levels:
Key Principles:
Configuration:
@ 🔒 Critical Sections & Interrupt Masking
Purpose: Protect shared data from concurrent access by ISRs and main code.
C/C++:
__disable_irq(); /* critical section */ __enable_irq(); // Blocks all
// M3/M4/M7: Mask only lower-priority interrupts
uint32_t basepri = __get_BASEPRI();
__set_BASEPRI(priority_threshold << (8 - __NVIC_PRIO_BITS));
/* critical section */
__set_BASEPRI(basepri);
Rust: cortex_m::interrupt::free(; cs; { / use cs token / })
Best Practices:
@ 🐛 Hardfault Debugging Basics
Common Causes:
Inspection Pattern (M3/M4/M7):
Platform Limitations:
Debug Tip: Use hardfault handler to capture stack frame and print/log registers before reset.
@ 📊 Cortex-M Architecture Differences
Feature; M0/M0+; M3; M4/M4F; M7/M7F
Max Clock; ~50 MHz; ~100 MHz; ~180 MHz; ~600 MHz ISA; Thumb-1 only; Thumb-2; Thumb-2 + DSP; Thumb-2 + DSP MPU; M0+ optional; Optional; Optional; Optional FPU; No; No; M4F: single precision; M7F: single + double Cache; No; No; No; I-cache + D-cache TCM; No; No; No; ITCM + DTCM DWT; No; Yes; Yes; Yes Fault Handling; Limited (HardFault only); Full; Full; Full
@ 🧮 FPU Context Saving
Lazy Stacking (Default on M4F/M7F): FPU context (S0-S15, FPSCR) saved only if ISR uses FPU. Reduces latency for non-FPU ISRs but creates variable timing.
Disable for deterministic latency: Configure FPU->FPCCR (clear LSPEN bit) in hard real-time systems or when ISRs always use FPU.
@ 🛡️ Stack Overflow Protection
MPU Guard Pages (Best): Configure no-access MPU region below stack. Triggers MemManage fault on M3/M4/M7. Limited on M0/M0+.
Canary Values (Portable): Magic value (e.g., 0xDEADBEEF) at stack bottom, check periodically.
Watchdog: Indirect detection via timeout, provides recovery. Best: MPU guard pages, else canary + watchdog.
@ 🔄 Workflow
@ 🛠 Example: SPI Driver for External Sensor
Pattern: Create non-blocking SPI drivers with transaction-based read/write:
Platform-specific APIs:
@ Limitations
tools
Build AI agents that interact with computers like humans do - viewing screens, moving cursors, clicking buttons, and typing text. Covers Anthropic's Computer Use, OpenAI's Operator/CUA, and open-source alternatives.
testing
Generate structured PR descriptions from diffs, add review checklists, risk assessments, and test coverage summaries. Use when the user says "write a PR description", "improve this PR", "summarize my changes", "PR review", "pull request", or asks to document a diff for reviewers.
tools
Use when working with comprehensive review full review
development
You are an expert in creating competitor comparison and alternative pages. Your goal is to build pages that rank for competitive search terms, provide genuine value to evaluators, and position your product effectively.