Token导航 LogoToken导航

Agent Skill · AI 工具

pw-embedded-c-style(pw 嵌入式 c 风格)

pw-embedded-c-style 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

pw-embedded-c-style 是AI 工具类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为权限未标注;许可证为 MIT,第三方扫描已通过,按安装量在AI 工具类的 2,536 个 Skill 里排第 750。

总安装 2,188周安装 94GitHub Stars 21下载 767核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:pw-embedded-c-style(pw 嵌入式 c 风格)
来源仓库:https://github.com/plugins-world/pw-skills
仓库路径:skills/pw-embedded-c-style
安装命令:
npx skills add https://github.com/plugins-world/pw-skills --skill pw-embedded-c-style
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/plugins-world/pw-skills --skill pw-embedded-c-style

这个 Skill 是做什么的

AI 工具类 Skill 用来扩展助手本身的能力,例如接模型、接检索、接外部服务。

用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息。适合在 Codex、Claude、Cursor、Gemini CLI 中围绕仓库状态和协作事项进行整理时使用。可结合来源仓库和原始 README 核验具体用法和功能边界。安装前建议确认权限范围、维护状态,以及是否会触发联网或文件操作。

涉及敏感操作时应注意运行环境隔离和数据保护。

来源仓库内路径:skills/pw-embedded-c-style

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/plugins-world/pw-skills --skill pw-embedded-c-…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    权限没有明确标注,第一次使用时只给一个无关紧要的任务,观察它到底读了哪些文件和网络。

常见问题

6 条

pw-embedded-c-style 怎么安装?

在终端执行 npx skills add https://github.com/plugins-world/pw-skills --skill pw-embedded-c-style。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

pw-embedded-c-style 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

pw-embedded-c-style 需要什么权限?

权限级别没有明确标注。第一次使用时建议只给无关紧要的任务,观察它实际读写了哪些内容。

pw-embedded-c-style 是免费的吗?

来源标注的许可证是 MIT。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

pw-embedded-c-style 用的人多吗?

公开数据是累计安装 2,188 次,近一周安装 94 次,下载 767 次,GitHub 21 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

pw-embedded-c-style 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 3 个目录同时收录,说明这个 Skill 流传比较广。
  • 许可证明确为 MIT,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理AI 工具类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

AI 工具类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
executing-plans

执行计划 · Codex、Claude

1,515,336173,110只读MIT通过
verification-before-completion

完成前的验证 · Codex、Claude

1,319,472173,121权限未标注MIT通过
subagent-driven-development

子 Agent 驱动开发 · Codex、Claude

1,312,416173,138只读MIT通过
copy-editing

复制编辑 · Codex、Claude

1,209,57625,632只读MIT通过
paywall-upgrade-cro

付费专区升级 cro · Codex、Claude

1,030,17625,617只读MIT通过
pw-embedded-c-style

pw 嵌入式 c 风格 · 本页

2,18821权限未标注MIT通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

pw-embedded-c-style

嵌入式 C 代码风格助手, 基于《手把手教你学51单片机》302 个.c 文件和 66 个.h 文件的代码风格分析。

默认命名风格: 蛇形命名 (snake_case)

使用场景

适用情况

  • 创建新的嵌入式 C 项目 (51 单片机、STM32 等)
  • 优化现有嵌入式代码的命名和结构
  • 生成硬件驱动模块 (定时器、串口、LCD、按键等)
  • 规范化项目文件组织和代码风格
  • 学习嵌入式 C 编程的最佳实践

不适用情况

  • 非嵌入式的通用 C/C++ 项目
  • 需要 RTOS 或复杂架构的项目
  • 纯算法实现 (无硬件交互)

使用方式

默认命名风格: 蛇形命名 (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

代码风格特点

  • 简洁直接, 避免过度抽象
  • 直接操作硬件寄存器
  • 使用 sbit 定义 IO 口
  • 中断向量号直接指定 (interrupt 1)
  • 存储区域修饰符 (code, pdata)
  • 标志位驱动主循环
  • 查表法处理数据映射

最佳实践

命名风格选择

默认使用蛇形命名 (snake_case):

  • 符合 Linux 内核和大多数开源嵌入式项目的风格
  • 单词分隔明显, 可读性好
  • 适合生产项目和团队协作

使用驼峰命名 (camelCase/PascalCase) 的场景:

  • 教学项目或参考教材使用驼峰命名
  • 团队明确要求使用驼峰命名
  • 需要与现有驼峰命名代码保持一致

重要原则: 整个项目必须统一命名风格

项目创建建议

  1. 单文件项目: 适用于简单功能 (LED 闪烁、按键检测等)
  2. 多文件项目: 适用于多外设协同 (LCD + 按键 + 串口等)
  3. 模块化驱动: 每个外设独立为.h/.c 文件对

代码优化建议

  1. 命名规范: 默认使用蛇形命名 (函数/变量), 宏用全大写下划线
  2. 中断精简: 中断函数只设置标志位, 主循环处理业务逻辑
  3. 硬件抽象: 使用宏定义隔离硬件相关代码, 便于移植
  4. 注释清晰: 关键寄存器配置必须添加行内注释

常见错误处理

问题 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;  // 全局共享

注意事项

  • 中断函数必须尽快返回, 避免长时间占用
  • 全局变量在中断和主循环共享时, 使用 volatile 修饰
  • 大数组使用 code 修饰符存储在 ROM 中, 节省 RAM
  • 延时函数不要在中断中调用
  • 多文件项目必须使用 extern 正确声明全局变量

技术参数说明

支持的芯片平台

  • 51 系列: AT89C51, STC89C52, STC15 等
  • STM32 系列: F103, F407 等 (需调整寄存器定义)
  • 其他 8051 兼容芯片

代码规范来源

基于《手把手教你学51单片机》实际教学项目:

  • 302 个.c 源文件
  • 66 个.h 头文件
  • 涵盖 20+ 种常用外设驱动
  • 默认采用蛇形命名, 更符合嵌入式 C 项目规范

输出格式

  • 单文件项目: 生成 main.c
  • 多文件项目: 生成 config.h, module.h, module.c, main.c
  • 驱动模块: 生成 driver.h, driver.c

示例场景

场景 1: 快速原型验证

用户需求: "创建一个 LED 每秒闪烁的程序"

助手输出:

  • 单个 main.c 文件
  • 包含定时器配置和中断函数
  • 使用标志位驱动 LED 翻转

场景 2: 模块化项目

用户需求: "创建一个带 LCD1602 显示温度和按键调节的项目"

助手输出:

  • config.h (系统配置)
  • lcd1602.h/c (LCD 驱动)
  • key.h/c (按键驱动)
  • ds18b20.h/c (温度传感器驱动)
  • main.c (主程序)

场景 3: 代码优化

用户需求: "优化这段串口接收代码"

助手操作:

  • 检查命名规范
  • 优化缓冲区管理
  • 添加溢出保护
  • 补充注释说明

基于实际教学项目总结, 注重实用性和可读性。默认使用蛇形命名风格, 符合嵌入式 C 项目规范。

平台分布

Claude Code

30.83%
按下载量换算236

trae

22.55%
按下载量换算173

OpenCode

18.41%
按下载量换算141

Gemini CLI

12.97%
按下载量换算99

Antigravity

7.7%
按下载量换算59

Cursor

3.31%
按下载量换算25

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

权限未标注

当前来源未能明确判断权限范围,默认进入异常复核队列。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

继续浏览同类 Skills