一键导入
pw-embedded-c-style
嵌入式 C 代码风格助手, 基于 51 单片机教学项目的代码规范。默认使用蛇形命名 (snake_case), 可选驼峰命名。用于创建符合嵌入式开发规范的项目结构, 优化代码风格, 提供硬件驱动模板。适用于 51 单片机、STM32 等嵌入式 C 项目开发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
嵌入式 C 代码风格助手, 基于 51 单片机教学项目的代码规范。默认使用蛇形命名 (snake_case), 可选驼峰命名。用于创建符合嵌入式开发规范的项目结构, 优化代码风格, 提供硬件驱动模板。适用于 51 单片机、STM32 等嵌入式 C 项目开发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
AI 图像生成和处理工作流。通过提示词生成图像,支持文生图、图生图、批量生成、图床管理、长图合并、PPT 打包。核心特性是逐张确认生成,避免浪费 API 额度。
为文章内容生成精美封面图的专用工具。 核心功能: - 分析文章内容并自动选择最适合的视觉风格 - 生成手绘风格的高质量封面图片 - 支持 19 种预设风格 (elegant, blueprint, bold-editorial 等) - 支持多种宽高比 (2.35:1 电影感, 16:9 宽屏, 1:1 方形) - 自动提取核心主题并生成标题文字 使用时机: - 用户明确要求 "生成封面图"、"创建文章封面"、"制作封面" - 用户提供文章内容并需要配图 - 用户需要为博客、公众号、社交媒体制作封面 不适用场景: - 用户只是询问如何制作封面 (提供建议即可) - 用户需要编辑现有图片 (使用图片编辑工具) - 用户需要生成非封面类型的图片 (使用通用图片生成工具)
通过逆向工程的 Gemini Web API 进行文本和图像生成。 核心能力: - 文本生成: 使用 Gemini 模型生成文本响应 - 图像生成: 从文本提示生成图像并保存到本地 - 视觉输入: 支持参考图像进行图生图或图生文 - 多轮对话: 通过 sessionId 保持上下文连续性 使用时机: - 需要生成高质量 AI 图像时 (封面图、配图、插画等) - 需要 Gemini 模型进行文本生成时 - 需要基于参考图像生成变体或描述时 - 作为其他技能 (pw-cover-image、pw-redbook-image) 的图像生成后端 不适用场景: - 需要官方 API 支持和稳定性保证的生产环境 - 对 API 变更敏感的关键业务流程 - 需要批量高频调用的场景 (可能触发限流) 重要提醒: - 首次使用需要用户同意免责声明 - 需要 Google 账号认证 (自动打开浏览器登录) - 在中国大陆需要配置代理访问 - 这是非官方 API, 可能随时失效
发布内容到微信公众号的自动化工具。 核心功能: - 图文发表: 多图配文模式, 支持最多 9 张图片 - 文章发表: 完整 Markdown 格式化, 保留样式和排版 - 自动化流程: 使用 Chrome CDP 自动登录、填充、发布 - 智能压缩: 标题和内容超限时自动压缩 - 主题支持: 文章发表支持 default、grace、simple 三种主题 使用时机: - 用户明确要求 "发布到微信公众号"、"发送到公众号" - 用户提供 markdown 文件或内容需要发布 - 用户需要批量发布图文内容 不适用场景: - 用户只是询问如何发布 (提供建议即可) - 用户需要编辑现有公众号文章 (手动操作) - 用户需要发布到其他平台 (使用对应平台工具)
将文章内容拆解为小红书风格的系列配图。支持从 URL、文件或文本生成封面图、内容图和结尾图,自动创建提示词并调用图片生成工具。
基于 PPT 模板生成新内容。PDF 自动转图片 → 分析模板风格 → 拆分文章内容 → 生成提示词 → AI 生图 → 打包 PPTX。
| name | pw-embedded-c-style |
| description | 嵌入式 C 代码风格助手, 基于 51 单片机教学项目的代码规范。默认使用蛇形命名 (snake_case), 可选驼峰命名。用于创建符合嵌入式开发规范的项目结构, 优化代码风格, 提供硬件驱动模板。适用于 51 单片机、STM32 等嵌入式 C 项目开发。 |
嵌入式 C 代码风格助手, 基于《手把手教你学51单片机》302 个 .c 文件和 66 个 .h 文件的代码风格分析。
默认命名风格: 蛇形命名 (snake_case)
默认命名风格: 蛇形命名 (snake_case)
如需使用驼峰命名,请在指令中明确说明 "使用驼峰命名"。
# 基础示例 (默认蛇形命名)
/pw-embedded-c-style 创建一个 LED 闪烁的项目
# 带外设的项目
/pw-embedded-c-style 创建一个带 LCD1602 显示和按键输入的项目
# 指定芯片
/pw-embedded-c-style 为 STM32F103 创建一个串口通信项目
# 明确指定使用驼峰命名
/pw-embedded-c-style 使用驼峰命名创建一个定时器项目
# 优化代码风格 (默认蛇形命名)
/pw-embedded-c-style 帮我优化这段按键扫描代码
# 重构模块
/pw-embedded-c-style 将这段代码重构为独立的驱动模块
# 添加注释
/pw-embedded-c-style 为这段定时器配置代码添加规范注释
# 使用驼峰命名优化
/pw-embedded-c-style 使用驼峰命名优化这段代码
# 生成特定外设驱动
/pw-embedded-c-style 生成 DS1302 实时时钟驱动模板
# 生成通信协议
/pw-embedded-c-style 生成串口通信的收发缓冲区实现
默认风格: 蛇形命名 (snake_case)
// 函数: 蛇形命名
void config_timer0(unsigned int ms);
void lcd_write_cmd(unsigned char cmd);
void init_ds1302(void);
// 变量: 蛇形命名
unsigned char flag_500ms = 0;
unsigned char cnt_rxd = 0;
// 宏/常量: 全大写下划线
#define SYS_MCLK (11059200/12)
#define LCD1602_RS P1^0
// sbit: 全大写或蛇形
sbit LED = P0^0;
sbit EN_LED = P1^4;
备选风格: 驼峰命名 (camelCase/PascalCase)
用户明确要求时使用此风格:
// 函数: 大驼峰
void ConfigTimer0(unsigned int ms);
void LcdWriteCmd(unsigned char cmd);
void InitDS1302(void);
// 变量: 小驼峰
unsigned char flag500ms = 0;
unsigned char cntRxd = 0;
// 宏/常量: 全大写下划线 (相同)
#define SYS_MCLK (11059200/12)
#define LCD1602_RS P1^0
// sbit: 全大写或大驼峰
sbit LED = P0^0;
sbit ENLED = P1^4;
单文件项目
#include <reg52.h>
// 宏定义
// sbit 定义
// 全局变量
// 函数声明
void main() { }
// 函数实现
// 中断函数
多文件项目
config.h - 全局配置 (类型定义、系统参数、IO 定义)
module.h - 模块头文件 (结构体、extern 声明、函数声明)
module.c - 模块实现 (#define _MODULE_C)
main.c - 主程序
定时器配置
void config_timer0(unsigned int ms)
{
unsigned long tmp;
tmp = 11059200 / 12;
tmp = (tmp * ms) / 1000;
tmp = 65536 - tmp;
tmp = tmp + 12;
T0RH = (unsigned char)(tmp>>8);
T0RL = (unsigned char)tmp;
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1;
TR0 = 1;
}
中断服务函数
void interrupt_timer0() interrupt 1
{
static unsigned char tmr_500ms = 0;
TH0 = T0RH;
TL0 = T0RL;
if (++tmr_500ms >= 50)
{
tmr_500ms = 0;
flag_500ms = 1;
}
}
标志位驱动
bit flag_500ms = 0;
// 中断中设置
flag_500ms = 1;
// 主循环检测
while (1)
{
if (flag_500ms)
{
flag_500ms = 0;
// 执行任务
}
}
按键消抖
void key_scan(void)
{
static unsigned char keybuf[4] = {0xFF, 0xFF, 0xFF, 0xFF};
keybuf[i] = (keybuf[i] << 1) | KEY_IN[i];
if ((keybuf[i] & 0x0F) == 0x00)
key_sta[i] = 0; // 稳定按下
}
查表法
unsigned char code led_char[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
P0 = led_char[num];
/* 文件头注释 */
/*
*******************************************************************************
* 文件名称: main.c
* 描 述: 功能描述
* 版本号: v1.0.0
*******************************************************************************
*/
/* 函数注释 */
void lcd_show_str(unsigned char x, unsigned char y,
unsigned char *str, unsigned char len)
// 行内注释
EA = 1; // 使能总中断
config_timer0(10); // 配置 T0 定时 10ms
默认使用蛇形命名 (snake_case):
使用驼峰命名 (camelCase/PascalCase) 的场景:
重要原则: 整个项目必须统一命名风格
问题 1: 定时器不准确
// 错误: 未考虑指令周期补偿
tmp = 65536 - tmp;
// 正确: 加上补偿值
tmp = 65536 - tmp;
tmp = tmp + 12; // 补偿中断响应延迟
问题 2: 按键抖动
// 错误: 直接读取按键状态
if (KEY == 0) { /* 处理 */ }
// 正确: 使用移位寄存器消抖
keybuf = (keybuf << 1) | KEY;
if ((keybuf & 0x0F) == 0x00) { /* 稳定按下 */ }
问题 3: 全局变量冲突
// 错误: 多个模块使用相同变量名
unsigned char flag; // 在多个 .c 文件中定义
// 正确: 使用模块前缀或 static
static unsigned char uart_flag; // 仅本文件可见
extern unsigned char g_system_flag; // 全局共享
基于《手把手教你学51单片机》实际教学项目:
用户需求: "创建一个 LED 每秒闪烁的程序"
助手输出:
用户需求: "创建一个带 LCD1602 显示温度和按键调节的项目"
助手输出:
用户需求: "优化这段串口接收代码"
助手操作:
基于实际教学项目总结, 注重实用性和可读性。默认使用蛇形命名风格, 符合嵌入式 C 项目规范。