Cursor提示词模板,开发GD32,C语言开发GD32 ARM单片机编程规范提示词 大厂风格代码规范

news/2025/2/23 5:30:36

如果我让你开发的工程涉及到c语言的时候,请按照下面提示词执行。

C语言开发GD32 ARM单片机编程规范提示词

一、引言

本规范旨在为使用C语言开发GD32 ARM单片机的项目提供统一的编程标准,确保代码的可读性、可维护性、可靠性和高效性。规范涵盖代码风格、命名规则、语法使用、错误处理、性能优化等多个方面。开发者在编写代码时应严格遵循。
我的嵌入式代码,涉及C代码用C99标准,涉及C++代码用C11标准 。

二、代码风格与结构

(一)基本原则

  1. 清晰易读:代码应具有良好的可读性,优先保证清晰性,避免复杂的逻辑和晦涩的代码结构。使用适当的缩进和空白符增强代码层次感,确保结构一目了然。
  2. 简洁高效:在保证功能的前提下,代码应尽量简洁,避免冗余和不必要的复杂性。去除无用代码,提炼重复代码,提高执行效率。

(二)文件结构

  1. 源文件与头文件:每个C源文件(.c)通常应对应一个同名的头文件(.h),用于声明对外接口。头文件应只包含接口声明,如函数声明、宏定义、类型定义等,避免放置实现代码。
  2. 文件组织:合理组织源文件和头文件内容,将相关功能的代码放在同一个文件中,确保文件职责单一。例如,将与GD32 GPIO操作相关的函数和定义放在gd32_gpio.cgd32_gpio.h中。

(三)函数结构

  1. 单一职责:一个函数应只完成一项功能,避免函数功能过于复杂。例如,将GPIO初始化功能封装在一个独立函数中,而不是将GPIO初始化和数据处理功能放在同一个函数里。
  2. 避免过长函数:尽量控制函数长度,新增函数的非空非注释行数不超过50行。对于算法实现函数,若超过50行应进行合理拆分。
  3. 代码块嵌套:减少函数内代码块的嵌套深度,新增函数的代码块嵌套不超过4层,以提高代码可读性。

三、命名规则

(一)通用命名规则

  1. 清晰明了:标识符命名要清晰、有明确含义,使用完整单词或通用缩写,避免产生误解。例如,使用gpioPinNumber表示GPIO引脚编号,而不是使用模糊的缩写。
  2. 统一风格:项目内统一使用一种命名风格,推荐使用下划线命名法(如gpio_init)或驼峰命名法(如gpioInit),避免多种风格混用。

(二)文件命名规则

  1. 小写字母:源文件和头文件命名统一采用小写字母,不同单词间用下划线分隔,如gd32_timer.cgd32_timer.h
  2. 体现功能:文件名应能清晰体现文件的功能,便于识别和管理。

(三)变量命名规则

  1. 前缀标识:全局变量加g_前缀,静态变量加s_前缀,便于区分变量作用域。例如,g_gpioStatus表示全局的GPIO状态变量,s_timerCounter表示静态的定时器计数器变量。
  2. 避免单字节命名:禁止使用单字节命名变量,循环变量ijk除外。
  3. 描述性命名:变量命名应能描述其用途,使用名词或形容词加名词的方式,如buttonPressedFlag表示按钮按下标志变量。

(四)函数命名规则

  1. 动词开头:函数命名应以动词开头,体现函数执行的动作,采用动词加名词的结构,如readGpioPin表示读取GPIO引脚的函数。
  2. 清晰准确:函数名应准确反映其功能,避免使用模糊或歧义的名称。

(五)宏命名规则

  1. 全大写加下划线:宏定义采用全大写字母,单词间加下划线,如GPIO_PIN_0TIMER_CLOCK_FREQ
  2. 避免冲突:宏名应避免与其他标识符冲突,且不能使用下划线开头和结尾(特殊标识定义除外)。

四、语法与格式

(一)语法使用

  1. 遵循标准:严格遵循C语言标准,确保代码的兼容性和可移植性。
  2. 避免隐式转换:尽量减少数据类型的隐式转换,必要时进行显式转换,并确保转换的正确性。例如,将float类型转换为int类型时,要注意数据精度的丢失。

(二)格式规范

  1. 缩进与空白符:程序块采用缩进风格编写,每级缩进为4个空格。相对独立的程序块之间、变量说明之后必须加空行,增强代码的可读性。
  2. 语句长度:一条语句不宜过长,若不能拆分需分行写。换行时增加一级缩进,在低优先级操作符处划分新行,操作符放在新行首,确保一个完整语句放在一行。
  3. 操作符空格:在两个以上的关键字、变量、常量进行对等操作时,操作符前后加空格;非对等操作时,关系密切的立即操作符(如->)后不加空格。

五、错误处理与验证

(一)错误处理

  1. 合理使用异常:虽然C语言没有异常机制,但可通过返回错误码等方式处理异常情况。函数应返回明确的错误码,调用者需对错误码进行检查和处理。
  2. 错误日志记录:在关键代码段添加错误日志记录功能,便于定位和排查问题。可使用自定义的日志函数记录错误信息,包括错误发生的位置、错误码等。

(二)输入验证

  1. 参数验证:对函数的输入参数进行有效性验证,确保参数在合理范围内。例如,对于GPIO引脚编号参数,应检查其是否在有效引脚范围内。
  2. 数据范围检查:对输入数据进行范围检查,防止数据溢出或越界。如对定时器计数值进行检查,确保其不超过定时器的最大计数值。

六、性能优化

(一)算法优化

  1. 选择合适算法:根据实际需求选择高效的算法,避免使用复杂低效的算法。例如,在排序算法中,对于小规模数据可使用插入排序,大规模数据可使用快速排序。
  2. 优化算法实现:对算法实现进行优化,减少不必要的计算和操作。如在循环中避免重复计算不变量,将其移到循环体外。

(二)资源管理

  1. 内存管理:合理分配和释放内存,避免内存泄漏和内存碎片。使用动态内存分配函数(如mallocfree)时,要确保内存的正确释放,可通过封装内存管理函数来增强内存管理的安全性。
  2. 外设资源管理:合理使用GD32单片机的外设资源,避免资源冲突和浪费。例如,在使用定时器时,确保定时器的配置符合需求,避免过度占用系统资源。

七、关键规范

(一)模块化编程

  1. 功能模块化:将项目功能划分为多个独立的模块,每个模块负责特定的功能,提高代码的可维护性和可扩展性。例如,将GD32的ADC功能封装成一个独立模块,便于其他模块调用和维护。
  2. 模块接口设计:设计清晰的模块接口,模块间通过接口进行通信,降低模块间的耦合度。模块接口应提供必要的函数和数据结构,确保模块的独立性和可复用性。

(二)寄存器操作规范

  1. 寄存器映射:使用标准的寄存器映射方式,确保对GD32单片机寄存器的正确访问。可通过定义结构体或宏来映射寄存器地址和位域,提高代码的可读性和可维护性。
  2. 寄存器操作函数:封装寄存器操作函数,避免在代码中直接对寄存器进行复杂操作。例如,编写setGpioPin函数来设置GPIO引脚状态,而不是直接操作GPIO寄存器。

八、测试

(一)测试策略

  1. 单元测试:编写单元测试用例对各个模块进行测试,确保模块功能的正确性。单元测试应关注模块的行为,而不是具体实现细节。
  2. 集成测试:进行集成测试,验证各个模块之间的协同工作是否正常,确保系统整体功能的正确性。

(二)测试工具

  1. 选择合适工具:根据项目需求选择合适的测试工具,如基于硬件调试器的测试工具或软件模拟测试工具。
  2. 测试框架:可使用开源的测试框架(如Check)来组织和运行测试用例,提高测试效率和可管理性。

九、安全性

(一)数据安全

  1. 防止溢出:在进行数据处理时,防止数据溢出和越界,确保数据的安全性和正确性。例如,在对数组进行操作时,检查数组下标是否越界。
  2. 数据加密:对于敏感数据,可考虑进行加密处理,提高数据的安全性。如对通信数据进行加密传输,防止数据泄露。

(二)代码安全

  1. 避免危险函数:避免使用危险的C函数(如strcpygets等),使用相对安全的函数(如strncpyfgets等)代替,防止缓冲区溢出等安全问题。
  2. 代码审查:进行代码审查,及时发现和修复潜在的安全漏洞,确保代码的安全性。

十、文档

(一)代码注释

  1. 注释内容:注释应清晰明了,解释代码的功能、意图和关键算法。避免重复描述代码,对代码中巧妙、晦涩、重要的地方加以注释。
  2. 注释位置:注释应放在代码上方相邻位置或右方,不可放在下方。文件头部、函数声明处、全局变量等应添加详细注释。

(二)项目文档

  1. 功能描述:编写项目文档,详细描述项目的功能、架构、模块设计等内容,便于团队成员理解和维护项目。
  2. 使用说明:提供项目的使用说明,包括硬件连接、软件配置、操作流程等,方便用户使用和部署项目。

以上是C语言相关的要求。如果涉及到C语言请严格执行。

下面是一些通用的提示词。

Always respond in 中文

如果我要求你生成代码,那么在你生成代码之前,先用Mermaid生成所要实现功能的流程,先做流程设计,将流程设计生成,Mermaid能识别的文本格式。然后再去设计你的代码。这样代码的逻辑顺序更清晰,易于检查。

Mermaid语法避免以下错误 Expecting ‘SQE’, ‘DOUBLECIRCLEEND’, ‘PE’, ‘-)’, ‘STADIUMEND’, ‘SUBROUTINEEND’, ‘PIPE’, ‘CYLINDEREND’, ‘DIAMOND_STOP’, ‘TAGEND’, ‘TRAPEND’, ‘INVTRAPEND’, ‘UNICODE_TEXT’, ‘TEXT’, ‘TAGSTART’, got ‘PS’

完成以上流程,最终按照代码规范,生成代码。


http://www.niftyadmin.cn/n/5862998.html

相关文章

基于EIDE插件,配置arm开发环境

参考文档: 这是什么? | Embedded IDE For VSCode 一、准备安装包 VSCodeUserSetup-x64-1.96.4.exe: (访问密码: 1666) ST-LINK官方驱动.zip: (访问密码: 1666) en.stm32cubemx-win-v6-12-0.zip: (访问密码: 1666) Keil.STM32F7xx_DFP.2.14.0.pack: (访问密码: 1666) STM32Cu…

图像处理:模拟色差的生成

图像处理:模拟色差的实战案例 在做瓷砖瑕疵检测的过程中,需要检测色差。但在实际生产环境中,瓷砖色差检测的数据量较少,无法直接获取足够的数据来训练和优化深度学习模型。于是就考虑通过人为生成色差数据的方式来扩充数据集&…

力扣hot100——LRU缓存(面试高频考题)

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -…

新书上线 |《零门槛AIGC应用实战——Serverless+AI 轻松玩转高频AIGC场景》免费下载

《零门槛AIGC应用实战——ServerlessAI 轻松玩转高频AIGC场景》电子书正式上线!多种精选 AI 部署方案带你深入了解 ServerlessAI 最新趋势、AI 应用的架构设计与详细的部署教程等。函数计算 AI 技术解决方案助您一键上云,高效部署。 点击链接&#xff0c…

tauri2实现监听记住窗口大小变化,重启回复之前的窗口大小

要想实现记住窗口大小的功能,整体逻辑就是要监听窗口大小变化,将窗口大小保存下来,重启之后,读取保存的大小,然后恢复。这里可以使用rust层实现,也可以在前端实现。我这里就纯rust层实现了。 监听窗口变化…

UE5 编辑器辅助/加强 插件搜集

1. Actor Locker 地址:https://www.fab.com/listings/ec26ac5e-4720-467c-a3a6-b5103b6b74d0 使用说明:https://github.com/Gradess2019/ActorLocker 支持:5.0 – 5.5 简单的编辑器扩展。它允许你通过世界轮廓窗口/热键/上下文菜单在编辑器视…

centos9安装k8s集群

以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安装流程(containerd版): 一、系统初始化(所有节点执行) # 关闭防火墙 systemctl disable --now firewalld# 关闭SELinux sed -i "s/SELINUXenforcing/SELINU…

Spring事务原理 二

在上一篇博文《Spring事务原理 一》中,我们熟悉了Spring声明式事务的AOP原理,以及事务执行的大体流程。 本文中,介绍了Spring事务的核心组件、传播行为的源码实现。下一篇中,我们将结合案例,来讲解实战中有关事务的易…