Keil5工程文件创建与管理:从.c/.h文件规范到模块化设计
1. 项目概述从零构建你的第一个Keil5工程如果你刚开始接触嵌入式开发或者刚从51单片机转向STM32这类ARM Cortex-M内核的芯片那么第一个拦路虎往往不是复杂的电路也不是深奥的算法而是如何正确地使用开发工具搭建一个清晰、规范的代码工程。Keil MDK-ARM我们常说的Keil5作为行业标杆级的集成开发环境IDE其强大的功能和略显“复古”的界面常常让新手感到无所适从。新建一个.c源文件和.h头文件听起来是再基础不过的操作但其中涉及的工程结构管理、编译链配置、头文件包含逻辑恰恰是写出健壮、可维护嵌入式代码的基石。我见过太多初学者直接把所有代码塞进一个main.c里或者头文件包含关系混乱导致编译报错时一头雾水。一个规范的工程结构不仅能让你当下的开发更顺畅更能为后续的功能扩展、代码复用和团队协作铺平道路。今天我们就抛开那些复杂的驱动和协议回归最本质的一步在Keil5中如何像一个经验丰富的工程师那样新建并组织你的.c和.h文件。这个过程远不止是点击几次鼠标那么简单。2. 工程结构与文件角色的深度解析在动手创建文件之前我们必须先理解在Keil5的工程语境下不同类型的文件扮演着什么角色以及它们应该如何被组织。这决定了你工程的“基因”是否健康。2.1 核心文件类型及其职能一个典型的Keil5工程包含多种文件但最核心的莫过于以下几类项目文件.uvprojx或.uvproj这是Keil5的工程文件它本身不包含你的代码而是一个“索引”或“配置清单”。它记录了工程中包含哪些源文件、头文件路径在哪里、使用哪种型号的芯片、编译优化等级如何设置、调试器配置等所有元信息。你双击这个文件就能在Keil5中打开整个工程。C语言源文件.c文件这是程序功能的实现主体。里面包含了函数的定义即函数的具体实现代码、全局变量的定义分配存储空间、静态变量等。简单说所有需要被编译成机器指令的“实干”代码都放在.c文件里。一个工程可以有多个.c文件例如main.c负责主流程gpio.c负责管脚操作uart.c负责串口通信。C语言头文件.h文件这是程序的“接口说明书”和“声明清单”。它的核心作用有三个声明函数告诉编译器“这个函数存在它的返回值类型和参数列表是这样的具体实现请去对应的.c文件里找”。例如void GPIO_Init(void);。声明外部变量用extern关键字声明在其他.c文件中定义的全局变量使得多个源文件可以共享该变量。定义宏、类型和常量集中管理工程中使用的宏定义如#define LED_PIN GPIO_PIN_13、自定义数据类型如typedef struct {...} MyStruct_t;和常量。条件编译通过#ifdef,#ifndef,#endif等防止头文件被重复包含。关键理解.h文件通常不包含具体的函数实现内联函数除外和变量存储空间分配。它和.c文件的关系就像餐厅的菜单.h和后厨.c。菜单告诉你有什么菜函数声明和价格宏定义但具体的烹饪过程函数实现在后厨完成。2.2 为何要建立多文件工程很多教程为了简单把所有代码写进一个main.c。这在学习单个例程时没问题但一旦项目规模扩大弊端立现编译效率低下修改一行代码整个工程所有代码都要重新编译。代码耦合度高所有函数、变量挤在一起牵一发而动全身修改和维护极其困难。无法复用你想把调试好的串口驱动代码用到下一个项目需要从几千行的main.c里小心翼翼地剥离极易出错。可读性差功能模块混杂寻找特定代码如同大海捞针。正确的做法是采用“模块化”设计。将不同的功能封装到不同的模块中每个模块由一个.c文件和一个对应的.h文件组成。例如bsp_gpio.c/bsp_gpio.h 硬件抽象层管脚初始化与控制。drv_uart.c/drv_uart.h 驱动程序层串口收发实现。app_control.c/app_control.h 应用逻辑层业务逻辑处理。main.c 主函数负责模块初始化和调度。这样main.c只需要包含bsp_gpio.h、drv_uart.h等头文件就可以调用各个模块的功能而无需关心其内部实现。下次做新项目直接拷贝bsp_gpio和drv_uart这一对文件再包含它们的头文件驱动代码就复用了。3. 步步为营新建Keil5工程与文件实操理解了理论我们开始动手。这里我以创建一个用于STM32F103C8T6的简单LED闪烁工程为例演示最规范的操作流程。3.1 创建新工程与选择设备启动Keil5创建新工程点击Project - New uVision Project...。选择工程保存路径这是第一个关键点。我强烈建议你为每一个项目建立一个独立的文件夹名称最好有明确意义如Project_LED_Blink。在这个文件夹内再创建几个子文件夹以便管理例如User 存放用户自己编写的应用代码main.c,app_*.c/h。BSP或Hardware 存放与硬件板级相关的驱动bsp_gpio.c/h。MDK-ARM Keil5会自动生成这个文件夹存放编译输出文件.axf,.hex,.map等。我们也可以把工程文件.uvprojx放在这里让根目录更干净。Docs 存放设计文档、芯片手册等。 在文件对话框中导航到你刚创建的项目根目录Project_LED_Blink然后在“文件名”处输入你的工程名例如LED_Blink。选择目标设备Device点击“OK”后会弹出设备选择库。在搜索框输入你的芯片型号例如STM32F103C8。在列表中找到确切的型号如STM32F103C8Tx点击“OK”。这一步决定了编译器会使用哪个芯片的启动文件和外设寄存器定义。3.2 管理工程文件夹与添加组工程创建后左侧Project窗口通常只有一个Target 1。我们需要创建“组”Group来模拟我们规划好的文件夹结构让工程视图更清晰。右键点击Target 1选择Manage Project Items...。在Project Items标签页你可以在Groups区域点击中间的New (Insert)按钮创建新的组。我们创建User,BSP。可以点击Set as Current Group来指定后续添加文件默认归属的组。在Files区域可以添加已经存在的文件到当前选中的组。点击“OK”后你的工程结构就从单一的Target 1变成了Target 1 ├── User ├── BSP └── 可能还有其他系统组如CMSIS、Device这只是一个逻辑分组不影响文件在硬盘上的实际位置。但通过分组我们可以将main.c拖到User组下将bsp_gpio.c拖到BSP组下一目了然。3.3 创建并添加你的第一个.c文件现在我们来创建最重要的源文件。确定当前组在Project窗口点击你想要添加文件的组例如User组使其高亮表示它是“当前组”。新建文件点击工具栏的“新建文件”按钮一张白纸的图标或者按CtrlN。这会打开一个空的编辑窗口。立即保存并命名这是新手最容易犯错的地方务必先保存这个空文件再开始编写代码。点击保存按钮或按CtrlS。导航到你在硬盘上预先创建好的对应文件夹例如Project_LED_Blink/User/。在“文件名”处输入完整的文件名包括后缀例如main.c。关键点保存对话框的“保存类型”必须选择C Source file (*.c)。如果你不小心保存成了.txt或其他格式Keil5将无法识别其为C源文件。将文件添加到工程保存后这个文件还只是硬盘上的一个文件并未关联到工程。右键点击目标组User选择Add Existing Files to Group User...。在弹出的对话框中导航到User文件夹选择刚才保存的main.c点击Add然后Close。现在你可以在User组下看到main.c了。编写基础代码双击打开main.c输入最基本的框架。对于STM32通常需要先包含核心头文件然后写主函数。// main.c #include stm32f1xx.h // 这是STM32标准外设库或HAL库的核心头文件具体名称取决于你用的库 #include bsp_gpio.h // 这是我们即将创建的硬件驱动头文件 int main(void) { // 硬件初始化 GPIO_Init(); // 假设这是我们在bsp_gpio.c中定义的函数 // 主循环 while(1) { // LED闪烁逻辑将在这里实现 } }3.4 创建并管理对应的.h头文件头文件与源文件通常成对出现且命名一致如bsp_gpio.c和bsp_gpio.h。新建头文件同样点击“新建文件”按钮或CtrlN打开一个新的空白编辑窗口。保存并命名立即按CtrlS保存。导航到对应文件夹Project_LED_Blink/BSP/。在“文件名”处输入bsp_gpio.h。关键点保存类型必须选择Header file (*.h)。添加头文件到工程可选但推荐严格来说Keil5在编译时只需要知道头文件的路径并不需要把头文件像.c文件一样添加到工程的分组里。但是为了在IDE中方便地浏览和编辑我强烈建议你也将.h文件添加到对应的组中。右键点击BSP组选择Add Existing Files...然后选择bsp_gpio.h。添加后你可以在工程树中看到它但它前面会有一个“H”的图标表示这是头文件。编写规范的.h文件内容头文件的编写有固定范式核心是防止重复包含。// bsp_gpio.h #ifndef __BSP_GPIO_H // 如果没有定义过 __BSP_GPIO_H 这个宏 #define __BSP_GPIO_H // 那么就定义它 // 包含必要的系统头文件 #include stm32f1xx.h // 宏定义 #define LED_GPIO_PORT GPIOB #define LED_GPIO_PIN GPIO_PIN_13 // 函数声明 void GPIO_Init(void); void LED_ON(void); void LED_OFF(void); void LED_Toggle(void); #endif /* __BSP_GPIO_H */ // 结束条件编译#ifndef、#define、#endif这套组合拳是头文件的“守卫”。当多个源文件都包含了bsp_gpio.h时编译器在第一次处理它后会定义__BSP_GPIO_H后续再遇到包含该头文件的指令时由于宏已定义#ifndef到#endif之间的内容就会被跳过避免了重复声明导致的编译错误。完善对应的.c文件现在回到bsp_gpio.c实现头文件中声明的函数。// bsp_gpio.c #include bsp_gpio.h // 包含对应的头文件确保声明和实现一致 void GPIO_Init(void) { // 1. 使能GPIOB时钟 RCC-APB2ENR | RCC_APB2ENR_IOPBEN; // 2. 配置PB13为推挽输出模式速度50MHz LED_GPIO_PORT-CRH ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13); LED_GPIO_PORT-CRH | GPIO_CRH_MODE13_1; // 3. 初始化为高电平LED灭 LED_GPIO_PORT-BSRR LED_GPIO_PIN; } void LED_ON(void) { LED_GPIO_PORT-BRR LED_GPIO_PIN; // 置低电平点亮LED假设低电平驱动 } void LED_OFF(void) { LED_GPIO_PORT-BSRR LED_GPIO_PIN; // 置高电平熄灭LED } void LED_Toggle(void) { LED_GPIO_PORT-ODR ^ LED_GPIO_PIN; // 异或操作翻转引脚状态 }在main.c中调用现在你可以在main.c的while(1)循环中调用这些函数了。while(1) { LED_ON(); Delay_ms(500); // 需要一个简单的延时函数 LED_OFF(); Delay_ms(500); }3.5 配置头文件包含路径这是让编译器找到你的头文件的关键一步。你虽然在main.c里写了#include bsp_gpio.h但编译器默认只在工程根目录和系统库目录里找。我们的头文件在./BSP/文件夹里所以需要告诉编译器这个位置。点击魔术棒按钮Options for Target。选择C/C选项卡。找到Include Paths输入框右侧的...按钮点击它。在弹出的对话框中点击右上角的“新建文件夹”图标然后点击末尾的...按钮导航并选择你的头文件所在目录例如../BSP../表示上一级目录因为MDK-ARM文件夹和BSP文件夹是兄弟目录。也可以添加多个路径。点击OK确认。完成这一步后编译器在遇到#include bsp_gpio.h时就会去你指定的../BSP目录下寻找从而成功找到并包含该头文件。4. 高级管理与常见问题排查掌握了基本操作我们来看看如何更高效地管理工程以及如何解决那些令人头疼的报错。4.1 工程文件管理最佳实践使用相对路径在添加文件和设置包含路径时尽量使用相对路径如../BSP而不是绝对路径如C:\Users\...\Project_LED_Blink\BSP。这样当你的工程文件夹被移动到其他位置或者分享给同事时依然能正常编译。善用“Groups”逻辑分组应与物理文件夹结构尽量对应。例如在BSP组下只添加BSP文件夹里的.c/.h文件。这能极大提升代码的可读性和可维护性。定期“Rebuild All”在Project菜单下选择Rebuild all target files或按F7旁边的刷新按钮。这能强制清理所有中间文件并重新编译有时可以解决一些因依赖关系未更新导致的诡异问题。备份关键配置魔术棒Options for Target里的配置特别是C/C、Asm、Linker、Debug、Utilities选项卡是你工程的灵魂。更换电脑或重装Keil后只要你有.uvprojx文件和这些配置它们被保存在工程文件中就能快速恢复环境。4.2 编译与链接错误精讲新建文件后点击“编译”Translate快捷键F7或“构建”Build快捷键F7你可能会遇到以下常见错误错误类型典型提示信息原因分析解决方案编译错误error: #5: cannot open source input file stm32f1xx.h: No such file or directory编译器找不到头文件。检查C/C选项卡下的Include Paths是否包含了该头文件所在的目录。对于芯片标准库通常需要添加类似Drivers/CMSIS/Device/ST/STM32F1xx/Include和Drivers/STM32F1xx_HAL_Driver/Inc的路径。编译错误error: #20: identifier GPIO_Init is undefined在main.c中调用了GPIO_Init()但编译器没有找到它的声明。1. 检查main.c是否包含了声明该函数的头文件#include bsp_gpio.h。2. 检查头文件路径是否已正确配置。3. 检查头文件中函数声明的拼写是否正确。链接错误error: L6218E: Undefined symbol GPIO_Init (referred from main.o).链接器报错。编译器通过了因为找到了函数声明但链接器在将所有.c文件生成的.o目标文件合并时找不到GPIO_Init函数的具体实现定义。1.最常见原因对应的.c文件如bsp_gpio.c没有被添加到工程中。右键点击相应分组确认文件已添加。2. 检查.c文件中的函数定义名是否与头文件声明完全一致包括拼写和参数列表。3. 检查该.c文件是否被成功编译查看Build Output窗口该文件是否被处理。链接错误error: L6406E: No space in execution regions with .ANY selector...程序代码或数据太大超出了芯片的Flash或RAM容量。1. 检查芯片型号是否选对例如STM32F103C8只有64K Flash20K RAM。2. 优化代码减少全局变量和大数组的使用。3. 在Options for Target - Linker中可以勾选Use Memory Layout from Target Dialog并适当调整IRAM1和IROM1的起始地址和大小高级操作需谨慎。4.3 头文件包含的“”与“”之谜在#include指令中使用双引号和尖括号有明确区别#include stdio.h编译器会优先在系统标准库目录和编译器内置的包含路径中查找stdio.h。用于包含编译器自带的或环境标准的头文件。#include bsp_gpio.h编译器会优先在当前源文件所在的目录下查找bsp_gpio.h如果没找到再去系统目录找。用于包含你自己编写的、位于项目目录中的头文件。实操建议对于所有项目内部的、你自己创建的头文件一律使用#include filename.h。对于芯片厂商提供的库文件如stm32f1xx.h虽然它们也在你的项目文件夹里但为了清晰区分通常也使用#include stm32f1xx.h但前提是你必须正确设置了包含路径。有些严格的编码规范会要求所有头文件都用而通过精心配置的包含路径来区分系统文件和用户文件。5. 从项目到产品工程结构的进阶思考当你熟练掌握了单个工程的文件创建与管理后可以进一步思考如何让代码结构更具可扩展性和专业性。5.1 模块化与分层架构一个中等复杂度的项目建议采用分层架构硬件抽象层HAL/BSPbsp_gpio.c,bsp_uart.c,bsp_i2c.c。这一层直接操作MCU寄存器或使用底层库封装硬件差异。当更换MCU或板子时理论上只需修改这一层。驱动程序层Driverdrv_sensor.c,drv_motor.c。这一层基于HAL/BSP实现特定外设器件如OLED屏、温湿度传感器的驱动逻辑。中间件层Middlewaremiddleware_fifo.c,middleware_cmd.c。提供通用的软件组件如环形队列、命令解析器、状态机框架等。应用层Applicationapp_main.c,app_control.c。实现具体的产品业务逻辑它调用下层提供的接口而不关心硬件细节。每一层都有其对应的.c/.h文件对并且下层为上层提供清晰的接口通过.h文件暴露。上层只能包含直接下层的头文件禁止跨层调用或包含这被称为“依赖倒置”或“分层隔离”是写出高质量嵌入式代码的关键。5.2 使用版本控制如Git即使是一个人开发我也强烈建议从第一个工程开始就使用Git。在项目根目录初始化一个Git仓库git init然后创建一个.gitignore文件忽略掉所有编译生成的中间文件和工程配置文件如MDK-ARM/文件夹下的.o,.axf,.uvguix.*等。只将你的源代码User/,BSP/、文档和必要的工程文件.uvprojx纳入版本管理。这能让你放心地尝试任何修改因为随时可以回退到上一个稳定版本。5.3 编写有意义的注释与文档在头文件中对每个公开的函数、宏和数据类型进行清晰的注释说明其功能、参数、返回值和注意事项。你可以使用Doxygen风格的注释/** ... */这样后期可以用工具自动生成API文档。在.c文件的开头也可以简要说明本模块的功能、作者、修改历史等。一个清晰的工程结构加上规范的注释几个月后当你自己再回头看这段代码或者交给同事维护时你会感谢当初这些“麻烦”的准备工作。新建.c和.h文件是嵌入式开发万里长征的第一步也是塑造良好编码习惯和工程思维的第一步。把它做对、做规范后面的路会平坦很多。

相关新闻

深入理解electron-vibrancy源码:跨平台实现原理剖析

深入理解electron-vibrancy源码:跨平台实现原理剖析

深入理解electron-vibrancy源码:跨平台实现原理剖析 【免费下载链接】electron-vibrancy Make your electron windows vibrant! 项目地址: https://gitcode.com/gh_mirrors/el/electron-vibrancy electron-vibrancy是一个让Electron窗口实现毛玻璃效果的强大…

2026/8/13 21:54:55 阅读更多 →
5.5m/s自主穿行密林!FlowPilot:用双流Transformer把世界模型塞进了无人机

5.5m/s自主穿行密林!FlowPilot:用双流Transformer把世界模型塞进了无人机

「18ms实现感知规划一体化」 目录 01 整套架构三大核心原创设计 1.1 双流混合Transformer(MoT)双向耦合世界与动作 1.2 7阶伯恩斯坦多项式:控制器原生友好轨迹表征 1.3 三级深度金字塔双阶段训练策略 1.4 流匹配联合损失函数 02 …

2026/8/13 21:54:55 阅读更多 →
全国大学生电子设计竞赛E题:放大器非线性失真研究装置全解析

全国大学生电子设计竞赛E题:放大器非线性失真研究装置全解析

1. 项目概述:一场关于“放大器非线性失真研究装置”的硬仗 2020年全国大学生电子设计竞赛(电赛)的E题,题目叫“放大器非线性失真研究装置”。这名字听起来就挺学术的,不像小车、无人机那么直观,但恰恰是这类…

2026/8/13 21:54:55 阅读更多 →

最新新闻

泉州网站建设哪里优惠:揭秘中小企业低成本建站的底层逻辑与避坑指南

泉州网站建设哪里优惠:揭秘中小企业低成本建站的底层逻辑与避坑指南

作为一名在泉州互联网行业摸爬滚打多年的“老兵”,我见过太多老板在起步阶段因为不懂技术、不懂市场,最后花了几万甚至十几万冤枉钱,做出来的网站不仅没人看,还成了“电子墓地”。最近不少朋友加我微信,问得最多的一句话就是:“泉州网站建设哪里优惠?”听起来很简单吧?…

2026/8/14 1:00:47 阅读更多 →
Navicat试用期到期不用愁:navicat-key三步重置15天试用

Navicat试用期到期不用愁:navicat-key三步重置15天试用

Navicat试用期到期不用愁:navicat-key三步重置15天试用 【免费下载链接】navicat-key navicat-key 项目地址: https://gitcode.com/gh_mirrors/na/navicat-key 试用期又到期了?工作正做到一半,屏幕上却弹出了续费提醒,别提…

2026/8/14 1:00:47 阅读更多 →
三明网站建设tudouly深度解析与企业官网数字化转型的避坑指南

三明网站建设tudouly深度解析与企业官网数字化转型的避坑指南

在这个数字化浪潮席卷而来的时代,如果说生意是水流,那么网络就是承载水流的河床。对于很多在三明扎根的企业老板或者创业伙伴来说,大家可能有一个误解,觉得“三明网站建设tudouly”这个事儿,不就是找个美工设计个页面,再找个程序员写几行代码,最后把网站搭建起来,挂个域…

2026/8/14 1:00:47 阅读更多 →
菏泽网站建设fuyucom如何从0到1打造让本地企业真正获客的专业官网

菏泽网站建设fuyucom如何从0到1打造让本地企业真正获客的专业官网

在这个互联网触手可及的时代,很多菏泽的企业老板或者市场负责人都有一个共同的痛点:明明产品很好,技术也很硬,可一到线上就歇菜。你打开自己的电脑或者手机,搜一下自家公司的名字,结果要么是一片空白,要么跳出来的是一个十几年前风格的简陋页面,加载速度慢得像老牛拉车…

2026/8/14 0:59:47 阅读更多 →
网站建设怎么开发客户:从源头到转化的全流程实战指南

网站建设怎么开发客户:从源头到转化的全流程实战指南

咱们今天不聊那些虚头巴脑的大词,也不堆砌那些晦涩难懂的技术术语。咱们就坐下来,像朋友聊天一样,掏心窝子地谈谈一个很多做网站、做建站服务的老板和从业者们最头疼的问题:网站建设怎么开发客户。我知道,现在的环境真的挺卷的。你去打开招聘软件或者行业论坛,到处都是“…

2026/8/14 0:59:47 阅读更多 →
「传感器视界」——用工程师的眼睛,拆解每一个感知世界的元件

「传感器视界」——用工程师的眼睛,拆解每一个感知世界的元件

五路灰度传感器是一种广泛应用于机器人、智能小车、自动化设备中的光电检测模块,主要用于检测地面灰度差异、识别轨迹线、判断边缘位置等场景。它因结构简单、成本低廉、响应迅速而在电子竞赛、创客教育和工业自动化中广受欢迎。1. 什么是五路灰度传感器&#xff1f…

2026/8/14 0:59:47 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →