找回密码
 立即注册
查看: 52|回复: 6

117-不停电下载-USB-CDC方式里usb.h文件,usb.c文件在哪里

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-10-03 07:41:18

10

主题

16

回帖

356

积分

中级会员

积分
356
发表于 前天 08:56 | 显示全部楼层 |阅读模式
最近在研究usb不停电下载,移植布丁老师的 “117-不停电下载-USB-CDC方式-PC端发送指令,触发MCU复位并自动下载”,编译时出现大量警告,问题出在usb_init();语句,行进去看看但找不到这个函数,在usn.h文件里有声明,有usb.h文件,对应usb.c到哪里,求高手解惑
111.png
22222.png
回复

使用道具 举报 送花

3

主题

1928

回帖

704

积分

等待验证会员

积分
704
发表于 前天 08:58 | 显示全部楼层
您好,关于您在研究“117-不停电下载-USB-CDC方式”项目中遇到的关于 usbinit() 函数未定义以及 usbc 文件缺失的问题,以下是我的专业分析与解答:

在基于 USB-CDC 实现“不停电下载”(也称“无断电升级”或“热升级”)的嵌入式项目中,通常涉及多个模块的协同工作,包括 USB 主机协议栈(usbh)、USB 设备协议栈(usbc)、CDC 类驱动、以及 Bootloader 与 Application 的切换机制等。

您提到的“usbinit();”函数未找到,以及“usbc 文件找不到”,本质上是由于工程结构不完整或模块引用路径错误所致。

一、关于 usbinit() 函数未找到的问题

1. 函数定义缺失或未包含正确头文件
在大多数嵌入式 USB 协议栈中(如 STM32 HAL、LPCUSBLib、ChibiOS USB 等),usbinit() 并非标准函数名,可能是项目中自定义的初始化函数。
检查 usbh 文件夹中的 .c 文件是否包含该函数的实现,或是否在某处被宏定义替换。
同时检查 .h 文件中是否声明了该函数,且在调用处是否正确包含了头文件。

2. 工程未包含 USB 设备侧(usbc)模块
usbh 通常代表 USB Host(主机端)模块,而 usbc 代表 USB Device(设备端)模块。
如果工程中仅包含 usbh 文件而缺少 usbc 文件,则可能导致 USB 初始化函数缺失。
建议查找原始项目中是否有 usbc 文件夹,并确认其是否被正确添加到工程中。

3. 函数名称拼写错误或版本差异
有时函数名可能为 USBInit() 或 usbdeviceinit() 等,注意大小写和拼写差异。
如果项目是基于某个特定芯片平台(如 STM32、NXP、GD32 等),建议查阅该平台的 USB 协议栈文档或官方例程。

二、关于 usbc 文件缺失的问题

1. 文件路径或工程结构问题
usbc 文件夹通常包含 USB Device 控制器驱动、设备描述符、端点处理、类驱动(如 CDC)等。
若工程中未添加 usbc 文件夹,可能是因为:
下载的项目不完整;
源码未正确解压;
文件夹名称被误改(如 usbc 被重命名为 usbdevice 等);
IDE 中未正确添加源文件路径。

2. 建议解决方法
确认项目来源完整性:重新下载完整项目,确保包含 usbc 文件夹。
查看工程结构:在 IDE(如 Keil、IAR、STM32CubeIDE)中检查工程目录是否包含 usbc 源文件。
查找替代文件:若找不到 usbc 文件夹,可参考官方 USB-CDC 例程(如 STM32 的 usbdevice/cdc 示例)进行移植。
检查 Makefile 或编译配置:确保 usbc 源文件被包含在编译列表中。

三、关于不停电下载机制的简要说明

在“不停电下载”方案中,通常是通过 USB-CDC 接口接收新固件,并在不复位系统电源的前提下完成 Bootloader 到 Application 的跳转或更新。其关键点包括:
USB-CDC 通信:用于接收 PC 端发送的升级指令与固件数据;
Bootloader 与 Application 分区管理:需要合理划分 Flash 地址空间;
中断向量表重映射:Application 启动时需将中断向量表重定向;
无复位跳转机制:通过函数指针跳转到 Application 入口地址;
电源管理:确保在跳转过程中系统电源不中断。

四、建议排查步骤总结

1. 检查工程是否包含完整的 usbc 文件夹;
2. 查找 usbinit() 函数的定义位置,确认是否拼写错误或路径未包含;
3. 确认 usbh 与 usbc 模块是否都添加到工程中;
4. 查阅芯片平台的 USB-CDC 官方例程作为参考;
5. 若使用 STM32 平台,可参考 STM32CubeMX 配置 USB Device CDC 模式;
6. 检查编译器输出的警告与错误信息,定位缺失符号的具体来源。

如您方便,也可以提供更详细的错误日志、工程结构截图或项目来源链接,以便更精准地定位问题。

祝您调试顺利!

—— 国芯人工智能

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:315
  • 最近打卡:2025-10-02 12:32:59
已绑定手机

83

主题

3209

回帖

7092

积分

荣誉版主

无情的代码机器

积分
7092
发表于 前天 10:48 | 显示全部楼层
这个是LIB库集成的,没源码。

官网下载各型号实验箱例程包里有一些范例代码

截图202510011048332032.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:576
  • 最近打卡:2025-10-03 00:13:48
已绑定手机

19

主题

3268

回帖

5986

积分

论坛元老

积分
5986
发表于 前天 11:50 来自手机 | 显示全部楼层
usb使用库函数。已经封装在lib文件所以无c文件一般闭源的都这样。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-10-03 07:41:18

10

主题

16

回帖

356

积分

中级会员

积分
356
发表于 前天 12:32 | 显示全部楼层
erci*** 发表于 2025-10-1 10:48
这个是LIB库集成的,没源码。

官网下载各型号实验箱例程包里有一些范例代码

答非所问,我是移植他的程序,编译出现错误,最后发现加上usb_init();就报错,在usb.h文件找到这个函数的声明,在usb.h文件里右键查找这个函数,找不到,理论上有usb.h文件,切usb.h文件里声明了函数,就应对应usb.c文件,布丁老师的程序里也找不到usb.c文件,也找不到usb_init();这个函数,在他程序里编译就0警告0错误,这是为什么

点评

这是对.lib的作用完全不知道啊! 你想要的.c文件就是别人已经封装成.lib文件了,你只能调用接口,看不到源码的。 [attachimg]116661[/attachimg]  详情 回复 发表于 前天 21:25
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:315
  • 最近打卡:2025-10-02 12:32:59
已绑定手机

83

主题

3209

回帖

7092

积分

荣誉版主

无情的代码机器

积分
7092
发表于 前天 21:25 | 显示全部楼层
dong*** 发表于 2025-10-1 12:32
答非所问,我是移植他的程序,编译出现错误,最后发现加上usb_init();就报错,在usb.h文件找到这个函数的 ...


这是对.lib的作用完全不知道啊!
你想要的.c文件就是别人已经封装成.lib文件了,你只能调用接口,看不到源码的。
截图202510012124302972.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:59
  • 最近打卡:2025-10-03 07:41:18

10

主题

16

回帖

356

积分

中级会员

积分
356
发表于 昨天 13:56 | 显示全部楼层
erci*** 发表于 2025-10-1 21:25
这是对.lib的作用完全不知道啊!
你想要的.c文件就是别人已经封装成.lib文件了,你只能调用接口,看不到 ...

不好意思,你这么一句话,我也看不懂,感觉你说的集成库我也加上了,昨天我又看了看冲哥usb的视频,他也是一句话带过,不带走疑问去看,很容易忽略,关键在keil配置中添加 “REMOVEUNUSED”。我查了查,在Keil开发环境中,REMOVEUNUSED指令通过分析代码依赖关系,自动识别程序中未被调用的函数、变量等资源,并在编译链接时排除这些冗余内容。例如,当源代码中存在未被工程调用的代码段时,该指令可减少数据段和代码段的体积,显著降低程序占用空间,我没有加“REMOVEUNUSED”库里好多未被调用的代码告警,你今天这么说,我就大体知道了,最后向你表示衷心的感谢
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-3 08:51 , Processed in 0.121052 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表