Skip to content
Back to skills

Embedded Code Generation Optimizer

ASecurity

当用户要求优化嵌入式代码、减少代码大小、降低功耗、提升实时性能、减少内存占用、优化中断处理或生成高效的嵌入式驱动时使用。支持的芯片包括ST(STM32)、GD(兆易创新)、ESP32、NXP、TI(TMS320/MSP430)、Nordic、Renesas、Realtek等MCU系列,以及树莓派、 BeagleBone、IMX6/IMX8等嵌入式Linux平台。触发短语包括\"优化嵌入式代码\"、\"S

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
ai-agentsgobashperformance

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add Kairos-ai-agent/kairos-code --skill embedded-code-generation-optimizer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Embedded Code Generation Optimizer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Embedded Code Generation Optimizer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kairos-ai-agent-embedded-code-generation-optimizer/badge)](https://www.skillsdirectory.com/skills/kairos-ai-agent-embedded-code-generation-optimizer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "embedded-code-generation-optimizer"
description: "当用户要求优化嵌入式代码、减少代码大小、降低功耗、提升实时性能、减少内存占用、优化中断处理或生成高效的嵌入式驱动时使用。支持的芯片包括ST(STM32)、GD(兆易创新)、ESP32、NXP、TI(TMS320/MSP430)、Nordic、Renesas、Realtek等MCU系列,以及树莓派、 BeagleBone、IMX6/IMX8等嵌入式Linux平台。触发短语包括\"优化嵌入式代码\"、\"S"
priority: 0.5
imported-from: "minimax"
source-path: "minimax/skills/embedded-code-generation-optimizer/SKILL.md"
---
# Embedded Code Generation Optimizer

## 核心工作流程

### 1. 需求分析

首先确定嵌入式系统的关键约束:

- **资源限制**:Flash/RAM大小、CPU频率
- **功耗要求**:电池供电 vs 持续供电
- **实时性**:硬实时 vs 软实时需求
- **工作环境**:温度范围、EMI要求

### 2. 优化维度评估

根据需求选择主要优化方向:

| 优化维度 | 优先级 | 适用场景 |
|---------|--------|---------|
| 代码大小 | 高 | 资源受限的MCU |
| 功耗优化 | 高 | 电池供电设备 |
| 实时性能 | 高 | 控制系统 |
| 内存使用 | 中 | 内存受限系统 |
| 中断效率 | 中 | 事件驱动系统 |

### 3. 优化策略实施

#### 3.1 代码大小优化

```c
// ❌ 不推荐:大量重复代码
void send_uart_byte(uint8_t data) {
    while (!(UART1->SR & USART_SR_TXE));
    UART1->DR = data;
}

// ✅ 推荐:宏定义减少代码重复
#define SEND_UART_BYTE(uart, data) \
    while (!((uart)->SR & USART_SR_TXE)); \
    (uart)->DR = (data)

// ✅ 推荐:内联频繁调用的小函数
static inline void delay_us(uint32_t us) {
    SysTick->LOAD = us * (SystemCoreClock / 1000000) - 1;
    SysTick->VAL = 0;
    while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
}
```

#### 3.2 功耗优化

```c
// ❌ 不推荐:持续运行的轮询
while (1) {
    if (check_sensor()) {
        process_data();
    }
}

// ✅ 推荐:事件驱动的低功耗模式
void enter_low_power_mode(void) {
    // 配置唤醒源
    enable_wakeup_source(WAKEUP_UART);

    // 进入休眠
    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
    __WFI();
}

// ✅ 推荐:动态调整CPU频率
void set_cpu_frequency(uint32_t freq) {
    RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | freq;
    SystemCoreClockUpdate();
}
```

#### 3.3 实时性能优化

```c
// ❌ 不推荐:阻塞延迟
void delay_ms(uint32_t ms) {
    volatile uint32_t count = ms * 8000;
    while (count--);  // 阻塞执行
}

// ✅ 推荐:基于硬件定时器的精确定时
void start_timer_interrupt(TIM_HandleTypeDef *htim, uint32_t period_ms) {
    htim->Instance->ARR = period_ms * (HAL_RCC_GetPCLK1Freq() / 1000) - 1;
    htim->Instance->DIER |= TIM_DIER_UIE;
    HAL_TIM_Base_Start_IT(htim);
}

// ✅ 推荐:零拷贝缓冲区管理
typedef struct {
    uint8_t *buffer;
    uint16_t head;
    uint16_t tail;
    uint16_t size;
} ring_buffer_t;

static inline uint16_t ring_buffer_available(ring_buffer_t *rb) {
    return (rb->head >= rb->tail) ?
           (rb->head - rb->tail) :
           (rb->size - rb->tail + rb->head);
}
```

#### 3.4 内存使用优化

```c
// ❌ 不推荐:栈上分配大数组
void process_large_data(void) {
    uint8_t buffer[4096];  // 占用栈空间
    // ...
}

// ✅ 推荐:静态分配或池管理
static uint8_t buffer_pool[4096] __attribute__((aligned(4)));
static uint32_t buffer_used = 0;

// ✅ 推荐:位域压缩结构体
typedef struct {
    uint32_t enabled : 1;
    uint32_t mode : 2;
    uint32_t channel : 3;
    uint32_t reserved : 26;
} peripheral_config_t;

// ✅ 推荐:#pragma pack控制对齐
#pragma pack(push, 1)
typedef struct {
    uint8_t header;
    uint32_t id;
    uint16_t value;
} __attribute__((packed)) compact_packet_t;
#pragma pack(pop)
```

#### 3.5 中断处理优化

```c
// ❌ 不推荐:中断中做复杂处理
void UART_IRQHandler(void) {
    // 不要在中断中做耗时操作
    char data = UART1->DR;
    parse_and_process(data);  // ❌ 可能很耗时
}

// ✅ 推荐:最小化中断服务程序
volatile uint8_t rx_buffer[BUFFER_SIZE];
volatile uint16_t rx_head = 0;
volatile uint16_t rx_tail = 0;

void UART_IRQHandler(void) {
    if (UART1->SR & USART_SR_RXNE) {
        rx_buffer[rx_head] = UART1->DR;
        rx_head = (rx_head + 1) % BUFFER_SIZE;
    }
}

// ✅ 推荐:中断优先级合理分配
#define IRQ_PRIORITY_HIGH   0
#define IRQ_PRIORITY_MEDIUM 5
#define IRQ_PRIORITY_LOW    10

HAL_NVIC_SetPriority(TIM1_IRQn, IRQ_PRIORITY_HIGH, 0);
HAL_NVIC_SetPriority(UART_IRQn, IRQ_PRIORITY_MEDIUM, 0);
```

### 4. 外设驱动优化

```c
// ✅ 推荐:DMA驱动的非阻塞传输
HAL_StatusTypeDef dma_transfer(uint32_t *src, uint32_t *dst, uint16_t size) {
    DMA_HandleTypeDef hdma;
    hdma.Instance = DMA1_Channel1;
    hdma.Init.Direction = DMA_MEMORY_TO_MEMORY;
    hdma.Init.PeriphInc = DMA_PINC_ENABLE;
    hdma.Init.MemInc = DMA_MINC_ENABLE;
    hdma.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
    hdma.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
    hdma.Init.Mode = DMA_NORMAL;

    HAL_DMA_Init(&hdma);
    HAL_DMA_Start(&hdma, (uint32_t)src, (uint32_t)dst, size);

    return HAL_DMA_PollForTransfer(&hdma, HAL_DMA_FULL_TRANSFER, 1000);
}

// ✅ 推荐:状态机驱动的驱动架构
typedef enum {
    STATE_IDLE,
    STATE_BUSY,
    STATE_ERROR,
    STATE_DONE
} driver_state_t;

typedef struct {
    driver_state_t state;
    uint8_t retry_count;
    uint32_t timeout;
} driver_context_t;
```

### 5. 编译优化

```c
// 编译器优化指令
#define LIKELY(x)   __builtin_expect(!!(x), 1)
#define UNLIKELY(x) __builtin_expect(!!(x), 0)

// 条件分支优化
if (LIKELY(flag)) {
    // 频繁执行路径
}

// 关键函数优化
__attribute__((optimize("O2")))
void time_critical_function(void) {
    // 高优先级优化
}

// 内存对齐
__attribute__((aligned(8)))
uint64_t critical_data;
```

## 验证检查清单

完成优化后,验证以下内容:

- [ ] 代码大小减少目标达成(目标:减少20-50%)
- [ ] 功耗降低满足需求(目标:降低30-60%)
- [ ] 实时响应满足截止时间
- [ ] 内存使用在限制范围内
- [ ] 中断响应时间可接受
- [ ] 无资源泄漏
- [ ] 边界条件测试通过

## 常用优化工具链

- **ARM GCC**: `-Os`, `-flto`, `-fdata-sections`, `-ffunction-sections`
- **IAR**: `-Oh`, `-e`, `--inline`
- **Keil**: `-Otime`, `-Ospace`, `--split_sections`

## 6. 芯片特定优化

### 6.1 STM32系列 (ST)

```c
// STM32 HAL优化:移除不需要的模块
#define USE_HAL_TIM_REGISTER_CALLBACKS 0
#define USE_HAL_UART_REGISTER_CALLBACKS 0

// STM32 DMA环形缓冲
typedef struct {
    volatile uint8_t *buffer;
    uint16_t size;
    volatile uint16_t head;
    volatile uint16_t tail;
} stm32_uart_dma_t;

void stm32_uart_dma_init(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size) {
    // 使能DMA时钟
    __HAL_RCC_DMA1_CLK_ENABLE();

    hdma_usart1_rx.Instance = DMA1_Channel5;
    hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart1_rx.Init.Mode = DMA_CIRCULAR;

    HAL_DMA_Init(&hdma_usart1_rx);
    __HAL_LINKDMA(huart, hdmarx, hdma_usart1_rx);
}

// STM32低功耗配置
void stm32_low_power_config(void) {
    // 配置为低功耗运行模式
    HAL_PWREx_EnableLowPowerRunMode();

    // 配置睡眠模式
    HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERMODE_ENABLE);
}

// STM32 RTC唤醒配置
void stm32_rtc_wakeup_config(uint32_t seconds) {
    hrtc.Instance = RTC;
    hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
    hrtc.Init.AsynchPrediv = 127;
    hrtc.Init.SynchPrediv = 255;
    HAL_RTC_Init(&hrtc);

    RTC->WUTR = seconds * 32768 - 1;
    RTC->CR |= RTC_CR_WUTE;
}
```

### 6.2 GD32系列 (兆易创新)

```c
// GD32外设配置 - 与STM32类似但寄存器略有不同
#define GD32_FMCU_DELAY_UNITS()  SystemCoreClock / 8 / 1000000

void gd32_delay_init(void) {
    SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;
    SysTick->LOAD = SystemCoreClock / 8 / 1000 - 1;
}

// GD32 eFlash写入优化
void gd32_flash_write(uint32_t addr, uint32_t data) {
    fmc_unlock();
    fmc_flag_clear(FMC_FLAG_END);
    fmc_flag_clear(FMC_FLAG_WPERR);

    fmc_word_program(addr, data);
    while(fmc_flag_get(FMC_FLAG_BUSY));

    fmc_lock();
}

// GD32 CRC计算
void gd32_crc32_init(void) {
    rcu_periph_clock_enable(RCU_CRC);
    crc_data_register_reset();
}

uint32_t gd32_crc32_calculate(uint32_t *data, uint32_t len) {
    crc_data_register_reset();
    for (uint32_t i = 0; i < len; i++) {
        crc_single_data_calculate(data[i]);
    }
    return crc_final_data_get();
}
```

### 6.3 ESP32系列

```c
// ESP-IDF组件优化
#include "esp_system.h"
#include "esp_partition.h"
#include "esp_sleep.h"

// ESP32动态频率调整
void esp32_set_cpu_freq(cpu_freq_t freq) {
    esp_pm_config_t pm_config = {
        .max_freq_mhz = freq,
        .min_freq_mhz = 80,
    };
    ESP_ERROR_CHECK(esp_pm_configure(&pm_config));
}

// ESP32浅睡眠优化
void esp32_light_sleep_config(uint32_t wakeup_time_us) {
    esp_sleep_enable_timer_wakeup(wakeup_time_us);
    esp_sleep_enable_gpio_wakeup();
    esp_light_sleep_start();
}

// ESP32 WiFi省电模式
void esp32_wifi_power_save(void) {
    wifi_ps_type_t mode = WIFI_PS_MIN_MODEM;
    ESP_ERROR_CHECK(esp_wifi_set_ps(mode));
}

// ESP32分区表优化
// sdkconfig中设置:
// CONFIG_PARTITION_TABLE_TWO_OTA=y
// CONFIG_ESPTOOLPY_FLASHSIZE="4MB"

// FreeRTOS任务优化
void esp32_task_optimized(void *param) {
    // 使用通知代替队列
    uint32_t notif;

    while(1) {
        xTaskNotifyWait(0, ULONG_MAX, &notif, portMAX_DELAY);
        // 处理通知
    }
}

// ESP32内存优化
void *esp32_malloc(size_t size) {
    if (size < 4096) {
        return heap_caps_malloc(size, MALLOC_CAP_INTERNAL);
    }
    return malloc(size);
}
```

### 6.4 NXP系列

```c
// NXP Kinetis/LPC外设配置
#define NXP_CLOCK_CONFIG 16000000UL

void nxp_systick_init(uint32_t freq) {
    SysTick->LOAD = freq / 1000 - 1;
    SysTick->VAL = 0;
    SysTick->CTRL = SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;
}

// NXP低功耗模式
void nxp_vlps_config(void) {
    SMC->PMCTRL = SMC_PMCTRL_STOPM(2);  // VLPS模式
    __WFI();
}

// NXP Flash加速
void nxp_flash_cache_enable(void) {
    FMC->PFB0CR = FMC_PFB0CR_CINV_WAY(0xF) | FMC_PFB0CR_B0SEBE_MASK;
    FMC->PFB1CR = FMC_PFB1CR_CINV_WAY(0xF) | FMC_PFB1CR_B1SEBE_MASK;
}

// NXP DMA MUX配置
void nxp_dma_init(DMA_Type *dma, uint32_t channel, uint32_t source) {
    dma->ERQ &= ~DMA_ERQ_ERQ0(channel);
    DMAMUX0->CHCFG[channel] = source | DMAMUX_CHCFG_ENBL;
    // 配置DMA...
    dma->ERQ |= DMA_ERQ_ERQ0(channel);
}
```

## 7. 嵌入式Linux系统优化

### 7.1 Boot时间优化

```bash
# 1. U-Boot优化 - 禁用启动延迟
setenv bootdelay 0
setenv bootargs "console=ttyS0 rootwait earlycon"

# 2. 内核配置优化
# .config中启用:
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_EMBEDDED=y
CONFIG_EXPERT=y

# 3. Initramfs精简
find . | cpio -o -H newc | gzip > initramfs.cpio.gz

# 4. 使用mdev替代udev减少启动时间
```

### 7.2 内核裁剪

```bash
# 禁用不需要的功能
CONFIG_MODULES=n          # 不需要模块加载
CONFIG_SWAP=n             # 禁用交换空间
CONFIG_NFS_FS=n           # 禁用NFS
CONFIG_FUSE_FS=n          # 禁用FUSE
CONFIG_DEBUG_INFO=n       # 禁用调试信息
CONFIG_MAGIC_SYSRQ=n      # 禁用系统请求键

# 启用压缩
CONFIG_KERNEL_GZIP=y
CONFIG_INITRAMFS_COMPRESSION_GZIP=y
```

### 7.3 内存优化

```bash
# 最小化内存使用
CONFIG_64BIT=n
CONFIG_SLAB=n             # 使用SLUB分配器
CONFIG_NUMA=n

# 共享内存优化
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y

# dcache/icache优化
CONFIG_CGROUPS=n          # 禁用cgroups
```

### 7.4 实时性能优化

```bash
# PREEMPT_RT补丁
CONFIG_PREEMPT=y
CONFIG_PREEMPT_VOLUNTARY=y
CONFIG_HZ_1000=y
CONFIG_HIGH_RES_TIMERS=y

# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
```

### 7.5 用户空间优化

```c
// 1. 使用静态链接减少大小
// CMakeLists.txt
set(CMAKE_EXE_LINKER_FLAGS "-static")

// 2. 使用musl-libc替代glibc
// buildroot中配置: BR2_TOOLCHAIN_USES_MUSL=y

// 3. BusyBox替代coreutils
// 配置需要的命令:
// CONFIG ls cat mkdir rm mv

// 4. 最小化动态链接
void lazy_loading_init(void) {
    // 延迟加载非关键库
    void *handle = dlopen("liboptional.so", RTLD_LAZY);
    if (handle) {
        init_fn_t init = dlsym(handle, "init");
        if (init) init();
    }
}

// 5. malloc优化
// 使用tcmalloc或jemalloc
// 或者使用固定内存池
#define MEM_POOL_SIZE (64 * 1024)
static uint8_t memory_pool[MEM_POOL_SIZE];
static uint32_t pool_used = 0;

void *pool_alloc(size_t size) {
    size = (size + 3) & ~3;  // 4字节对齐
    if (pool_used + size > MEM_POOL_SIZE) return NULL;
    void *ptr = &memory_pool[pool_used];
    pool_used += size;
    return ptr;
}
```

### 7.6 电源管理优化

```bash
# CPUFreq策略
# governor: powersave, ondemand, performance, conservative

# 设置为powersave
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# CPU核心管理
echo 0 > /sys/devices/system/cpu/cpu1/online  # 关闭不需要的核心

# WiFi省电
iwconfig wlan0 power timeout 500m
```

### 7.7 文件系统优化

```bash
# 使用只读文件系统
mount -t squashfs /dev/root / -o ro

# tmpfs用于临时文件
mount -t tmpfs tmpfs /tmp -o size=16M
mount -t tmpfs tmpfs /var -o size=8M

# 日志优化 - 使用RAM缓冲
echo 1 > /proc/sys/vm/drop_caches
journalctl --flush-both
```

## 8. 多平台综合优化

### 8.1 统一抽象层设计

```c
// platform_abstraction.h
#ifdef CONFIG_PLATFORM_STM32
    #include "stm32xx_hal.h"
    #define platform_delay(ms) HAL_Delay(ms)
    #define platform_malloc(size) malloc(size)
#elif defined(CONFIG_PLATFORM_ESP32)
    #include "esp_system.h"
    #define platform_delay(ms) vTaskDelay(ms/portTICK_PERIOD_MS)
    #define platform_malloc(size) heap_caps_malloc(size, MALLOC_CAP_INTERNAL)
#elif defined(CONFIG_PLATFORM_LINUX)
    #include <unistd.h>
    #include <stdlib.h>
    #define platform_delay(ms) usleep(ms * 1000)
    #define platform_malloc(size) aligned_alloc(4, size)
#endif

// 统一的低功耗接口
typedef enum {
    POWER_MODE_ACTIVE,
    POWER_MODE_IDLE,
    POWER_MODE_SLEEP,
    POWER_MODE_DEEP_SLEEP
} power_mode_t;

void platform_set_power_mode(power_mode_t mode) {
    #ifdef CONFIG_PLATFORM_STM32
        if (mode == POWER_MODE_SLEEP) HAL_PWR_EnterSLEEPMode();
        else if (mode == POWER_MODE_DEEP_SLEEP) HAL_PWR_EnterStopMode();
    #elif defined(CONFIG_PLATFORM_ESP32)
        if (mode == POWER_MODE_SLEEP) esp_light_sleep_start();
        else if (mode == POWER_MODE_DEEP_SLEEP) esp_deep_sleep_start();
    #elif defined(CONFIG_PLATFORM_LINUX)
        // Linux电源管理通过sysfs
    #endif
}
```

## 参考资源

详细优化指南和示例见 `references/` 目录。

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…