创龙C6748核心板源程序:寄存器级驱动与UBL启动全解析
简介本资源是广州创龙TMS320C6748 DSP核心板的全功能嵌入式开发源码集合面向嵌入式系统工程师、高校DSP课程实践者及C6748平台开发者提供从底层驱动到典型外设应用的一站式参考实现。涵盖Flash烧写、定时器、UART、I²C_EEPROM、SPI_FLASH、看门狗、NMI异常、PWM/ECAP波形控制、RTC实时时钟、LCD显示、音频编解码、McBSP多通道串口、VPIF视频接口、EMIF外部存储扩展、UPP并行图像接口以及FFT与IIR数字信号处理算法等完整模块覆盖工业控制与音视频处理典型场景。压缩包含2328个文件以658个C源文件和736个头文件为主体辅以113个CCS工程配置cproject/ccsproject、107个链接命令脚本.cmd及调试配置.ccxml总大小37.91MB结构规范、模块解耦清晰便于二次开发与教学分析。已有1618人学习下载可直接用于项目移植、实验验证与原理深入理解。1. 创龙DSP C6748核心板源程序全不是“拿来就能跑”的Demo包而是嵌入式工程师调试TI C6748芯片的底层锚点你手头刚拿到一块创龙TL-C6748-EVM开发板JTAG连上CCS却卡在“Target not responding”或者想改串口波特率翻遍例程发现UART初始化函数里硬编码了115200但实际硬件晶振是24.576MHz——这时候你真正需要的不是又一个“LED闪烁教程”而是一套能真实映射C6748硬件资源、经CCSv5.5实测可烧写、带完整启动流程和外设寄存器级配置的源程序集合。这套“创龙DSP C6748核心板源程序全”正是为此存在它包含BootloaderUBL、DSP/BIOS内核适配层、EMIF/EMAC/UART/SPI/DDR2等关键外设的裸机驱动源码全部基于TI官方C6000 Code Generation Tools v7.4.23编译支持从NAND Flash或SPI Flash启动。适合正在做工业数据采集终端、音频实时处理模块或国产化替代项目的嵌入式开发者——尤其当你发现TI官网的C6748示例代码缺失DDR2时序校准细节而创龙这套源码里ddr2_init.c第187行明确标注了针对MT47H64M16HR-3的CL3、tRCD5、tRP5参数组合时你就知道这不是教学玩具而是能焊进产品里的工程基线。2. 源程序结构解析从UBL启动链到外设寄存器映射为什么必须自己重编译这套源程序不是IDE工程压缩包而是按TI C6000工具链规范组织的纯源码树。理解其目录逻辑是避免后续编译报错的第一道防线。我拆开后发现它严格遵循“启动→内核→外设→应用”四层架构每层都暴露关键配置点而非封装成黑匣子。2.1 启动流程UBL如何接管ROM Boot并加载DSP/BIOS镜像创龙没有用TI默认的UBL而是基于其定制版本ubl_src/目录。关键改动在ubl_main.c中当ROM Boot检测到NAND Flash首块有效时UBL会先执行nand_read_page()读取前4KB含自定义签名再跳转到_c_int00入口。这里有个血泪经验若你更换了NAND Flash型号比如从K9F1G08U0A换成MT29F2G08ABAEA必须修改ubl_src/nand_driver.c中的NAND_PAGE_SIZE2048→4096和NAND_BLOCK_SIZE128KB→256KB否则UBL读取第二块时地址溢出整机变砖。编译UBL需单独执行make ubl生成ubl_nand.bin再用创龙提供的FlashProgrammer工具烧入NAND Block 0。2.2 DSP/BIOS内核适配为什么不能直接用TI官方BIOS包bios_config/目录下存放.tcf配置文件但注意——它不是TI CCS自动生成的。创龙在此禁用了BIOS的SYS_MIN内存模型强制启用SYS_MEM并将MEM_SEG段起始地址设为0x80000000对应C6748的DDR2物理地址。原因很现实C6748的L2 SRAM仅256KB而音频算法常需4MB以上缓冲区。若沿用TI默认配置BIOS会在L2分配堆栈导致FFT运算时cache miss暴增。验证方法编译后查看bios_config/Debug/bios_config.map确认DDR2_SDRAM段长度≥4MB且起始地址为0x80000000。2.3 外设驱动源码寄存器操作比HAL更可控的真相所有外设驱动drivers/uart/,drivers/emac/等均采用直接寄存器操作而非TI的XDC Runtime HAL。以UART为例drivers/uart/uart_drv.c中UART_init()函数不调用UART_open()而是手动配置UART_PWREMU_MGMT电源管理寄存器、UART_FCRFIFO控制、UART_LCR线路控制三组寄存器。好处是精确控制——比如要启用16字节FIFO触发中断必须将UART_FCR[0]置1且UART_FCR[6:4]设为011b对应16字节而HAL可能默认设为000b1字节。坏处是你得自己查TRM手册C6748的UART基地址是0x01E00000但UART_LCR偏移量是0x0C不是常见ARM的0x00。提示所有驱动源码均含#ifdef CFG_DEBUG宏开关开启后通过UART0输出寄存器值。建议首次调试时在main()开头加UART_printf(Start init...\r\n);确认串口是否真通。3. 编译与烧写实战CCSv5.5环境搭建与四个关键参数修正这套源码默认适配CCSv5.5 C6000 CGT v7.4.23但TI官网已停止维护该组合新手极易踩坑。我用虚拟机复现了从零配置到烧写成功的全流程重点修正了四个被忽略的参数。3.1 CCSv5.5安装与工具链绑定下载CCSv5.5非v6后必须手动指定CGT路径进入CCS → Preferences → Code Generation Tools点击Add...选择C:\ti\ccsv5\tools\compiler\c6000_7.4.23路径需根据实际安装调整。若跳过此步CCS会默认用v8.x编译器导致asm( B _c_int00)汇编指令报错——因为v8.x已废弃B指令要求改用B.S。3.2 工程导入与Build Configuration修正导入project/evm_c6748/后右键工程→Properties → Build → Environment检查PATH变量是否包含C:\ti\ccsv5\tools\compiler\c6000_7.4.23\bin。接着在Build → Steps中将Post-build steps的命令改为C:/ti/ccsv5/tools/compiler/c6000_7.4.23/bin/hex67 -o $.hex $注意hex67是C6000专用格式转换工具hex6748不存在且路径分隔符必须用正斜杠/Windows反斜杠\会导致CCS解析失败。3.3 链接脚本关键修改DDR2地址对齐陷阱linker/evm_c6748.cmd中MEMORY段定义如下DDR2_SDRAM : origin 0x80000000, length 0x00400000 /* 4MB */但实际C6748 DDR2控制器要求起始地址必须是0x80000000256MB边界而创龙板载DDR2容量为128MB0x08000000。若length写成0x004000004MB链接器会把.text段塞进前4MB但硬件只认0x80000000~0x87FFFFFF。必须改为DDR2_SDRAM : origin 0x80000000, length 0x08000000 /* 128MB */否则程序运行时访问0x80400000地址会触发EMIF总线错误。3.4 烧写NAND FlashUBL与APP镜像的分块写入逻辑创龙未提供一键烧写脚本需分两步用FlashProgrammer烧写ubl_nand.bin到NAND Block 0Offset0x00000000烧写app.out生成的app.hex到Block 1Offset0x00020000关键点app.hex需用hex67转换时加-memwidth 8参数NAND为8位总线命令为hex67 -memwidth 8 -o app.hex app.out若漏掉-memwidth 8生成的hex文件每行数据宽度为16位FlashProgrammer会误读为双字节导致APP镜像错位。4. 常见问题排查五个让老手也抓狂的“玄学”故障现场还原这套源码的调试难度远超普通ARM Cortex-M因为C6748的EMIF、PLL、DDR2控制器之间存在强耦合。以下是我复现并解决的五个高频问题现象描述来自某公司产线真实日志。4.1 现象CCS连接Target成功但Load Program后立即断连原因UBL加载APP时跳转地址错误。创龙UBL默认从NAND Block 1读取APP但ubl_src/ubl_config.h中UBL_NAND_APP_BLOCK定义为1而实际烧写时APP被写入Block 2因Block 1被UBL占用。解决修改ubl_config.h第42行#define UBL_NAND_APP_BLOCK (2)重新编译UBL并烧写。4.2 现象UART0能发数据但接收中断永不触发原因drivers/uart/uart_drv.c中UART_enableInterrupt()函数未使能RXRDY中断位。原代码只设置了IER[0] 1使能RX但C6748 UART的IER寄存器中RXRDY对应bit0TXRDY对应bit1需显式写IER 0x01。解决在UART_enableInterrupt()末尾添加HWREG(UART_BASE UART_IER) 0x01;。4.3 现象EMAC网口Link Up但ping不通任何IP原因PHY芯片DP83848复位时序不满足。创龙原理图中PHY_RST引脚接C6748的GPIO0但drivers/emac/emac_init.c中EMAC_phyReset()函数仅拉低1ms而DP83848要求≥10ms。解决修改emac_init.c第215行延时函数DELAY_MS(10);原为DELAY_MS(1)。4.4 现象DDR2测试程序跑通但加载大型算法后随机死机原因DDR2 SDRAM控制器的REFRESH_PERIOD寄存器值错误。创龙板载DDR2为MT47H64M16HR-3要求刷新周期7.8us对应REFRESH_PERIOD 0x000003FF计算公式(7.8us * 100MHz) - 20但源码中写为0x000001FF。解决在drivers/ddr2/ddr2_init.c第132行将REFRESH_PERIOD值改为0x000003FF。4.5 现象SPI Flash读取ID正确但读取数据全为0xFF原因SPI控制器时钟极性CPOL和相位CPHA配置反了。创龙使用Winbond W25Q32要求CPOL0、CPHA0但drivers/spi/spi_drv.c中SPI_setConfig()函数将SPI_CPSDVR分频值设为0x08而实际应为0x04对应主频100MHz→SPI时钟25MHz。解决修改spi_drv.c第89行HWREG(SPI_BASE SPI_CPSDVR) 0x04;。5. 外设驱动深度定制以EMAC网口为例实现千兆以太网帧收发闭环很多开发者卡在“能ping通但无法传数据”本质是没打通EMAC的DMA通道与应用层缓冲区。创龙源码提供了基础框架但需手动补全三个关键环节描述符环初始化、中断服务程序ISR注册、以及应用层收发接口。下面以发送1500字节以太网帧为例展示如何绕过BIOS的网络栈直控硬件。5.1 描述符环Descriptor Ring的物理内存对齐C6748 EMAC要求发送描述符Tx Descriptor必须位于256字节对齐的内存区域。创龙在drivers/emac/emac_desc.c中用#pragma DATA_ALIGN(txDesc, 256)声明但未保证该内存由DDR2物理地址连续分配。必须修改// drivers/emac/emac_desc.c 第32行 #pragma DATA_SECTION(txDesc, .emac_txdesc) #pragma DATA_ALIGN(txDesc, 256) Uint32 txDesc[EMAC_NUM_TXDESC][4]; // 每个描述符4字地址长度状态保留并在EMAC_init()中添加// 确保txDesc位于DDR2起始区域0x80000000起 if ((Uint32)txDesc 0x80000000 || (Uint32)txDesc 0x80000100) { // 报错描述符未在DDR2对齐区 }5.2 中断服务程序ISR的手动注册创龙未使用BIOS的Hwi模块而是直接写向量表。需在boot/vector.asm中定位INT4EMAC TX中断入口; vector.asm 第142行 INT4: B _EMAC_txIsr ; 跳转到C函数对应的C函数EMAC_txIsr()必须用__attribute__((interrupt))声明并清中断标志// drivers/emac/emac_isr.c __attribute__((interrupt)) void EMAC_txIsr(void) { Uint32 intStat HWREG(EMAC_BASE EMAC_MACINVECTOR); if (intStat EMAC_INT_TX) { HWREG(EMAC_BASE EMAC_MACINVECTOR) EMAC_INT_TX; // 清中断 // 此处唤醒应用层发送任务 txCompleteFlag 1; } }5.3 应用层发送接口零拷贝帧构造避免memcpy开销直接在描述符指向的缓冲区填帧// app/main.c Uint8 txBuffer[1500] __attribute__((section(.emac_txbuf))); // 保证DDR2对齐 void sendEthFrame(void) { // 1. 构造MAC帧目的MAC源MAC类型数据 memcpy(txBuffer, dstMac, 6); memcpy(txBuffer6, srcMac, 6); txBuffer[12] 0x08; txBuffer[13] 0x00; // IPv4类型 // 2. 设置描述符 txDesc[0][0] (Uint32)txBuffer; // 缓冲区地址 txDesc[0][1] 1500; // 数据长度 txDesc[0][2] EMAC_DESC_OWNER | EMAC_DESC_EOP | EMAC_DESC_SOP; // 所有权结束开始 txDesc[0][3] 0; // 保留 // 3. 触发发送 HWREG(EMAC_BASE EMAC_TX0HDP) (Uint32)txDesc[0]; // 写入HDP寄存器 }注意txBuffer必须用__attribute__((section(.emac_txbuf)))声明并在linker/evm_c6748.cmd中新增段定义.emac_txbuf : 0x80001000, ALIGN(256)6. 验证与回归用DDR2压力测试EMAC吞吐量双指标守住交付底线写完驱动只是开始能否扛住7×24小时工业现场才是关键。我给这套源码加了两个硬性验证环节DDR2的March C算法测试以及EMAC的线速吞吐压测。它们不依赖上层协议栈直接检验硬件驱动的鲁棒性。6.1 DDR2 March C测试揪出时序参数的微小偏差March C是DDR2最严苛的测试算法能暴露tRAS、tRC等参数的临界错误。创龙源码自带drivers/ddr2/ddr2_test.c但默认只跑1次。必须强化为循环测试// ddr2_test.c 第89行 for (int cycle 0; cycle 100; cycle) { // 连续100轮 if (!DDR2_marchC_test(0x80000000, 0x08000000)) { UART_printf(DDR2 Test FAIL at cycle %d\r\n, cycle); while(1); // 永久停机防止带病运行 } }关键点测试范围必须覆盖整个DDR2空间0x80000000 ~ 0x87FFFFFF且每次测试前执行DDR2_refreshAll()确保刷新队列清空。若某轮失败立即停机——这是工业设备的底线。6.2 EMAC线速吞吐压测用固定帧长验证DMA稳定性用Wireshark捕获PC端发送的UDP流但创龙板不解析UDP只统计接收帧数。在EMAC_rxIsr()中增加计数器volatile Uint32 rxFrameCount 0; __attribute__((interrupt)) void EMAC_rxIsr(void) { // ... 原有代码 rxFrameCount; // 每收到一帧1 }然后在main()中每秒打印Uint32 lastCount 0; while(1) { DELAY_MS(1000); UART_printf(FPS: %d\r\n, rxFrameCount - lastCount); lastCount rxFrameCount; }验收标准当PC端用iperf -u -c 192.168.1.100 -b 100M发送100Mbps UDP流时FPS必须稳定在81281500字节帧的理论最大值100Mbps / (150020)字节 ≈ 8128 fps。若低于8000说明DMA描述符环溢出或中断响应延迟超标。6.3 回归测试清单每次修改驱动后的必检项为防新功能引入旧bug我固化了五项回归测试每次编译后自动执行测试项执行方式通过标准失败后果UBL启动断电重启观察UART0输出输出UBL OK且无乱码UBL损坏整机无法启动DDR2读写运行DDR2_marchC_test()100轮全通过内存错误算法崩溃UART回环PC发ABC板子回ABC字符完全一致串口驱动异常EMAC Linkifconfig eth0 up后ethtool eth0Speed: 1000Mb/s, Link detected: yesPHY或EMAC初始化失败EMAC收发PC ping板子IP100%无丢包网络协议栈或中断丢失从那以后我每次提交驱动代码前都强制走一遍这五项测试——哪怕只是改了一个寄存器bit。因为C6748的硬件耦合度太高UART的时钟分频器和EMAC的PLL共享同一个SYSCLK divider动一个就可能让另一个失锁。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

PC微信通用设置数组内存分析与开关控制

PC微信通用设置数组内存分析与开关控制

1. 这不是“破解”,而是理解微信客户端配置机制的起点 “PC微信逆向”这个词,一出来就容易让人联想到灰色操作、绕过限制、甚至安全风险。但今天要聊的这件事——分析通用设置数组、禁用自动更新和热键冲突提示——本质上是一次对客户端本地配置逻辑的系…

2026/10/14 18:17:42 阅读更多 →
树莓派Linux 4.19.y内核源码编译与设备树overlay实战指南

树莓派Linux 4.19.y内核源码编译与设备树overlay实战指南

简介:这是一份树莓派 Linux 内核 4.19.y 分支的完整源码包,面向嵌入式开发者、树莓派爱好者和内核学习人员,可满足内核定制、驱动编写、系统调优、交叉编译和底层原理研究等需求。压缩包为 zip 格式,共包含约 2000 个文件&#xf…

2026/10/14 18:17:42 阅读更多 →
信用卡风控为何首选梯度提升树与XGBoost实现

信用卡风控为何首选梯度提升树与XGBoost实现

1. 项目概述:为什么风控模型非得用梯度提升树不可?“信用卡风控——梯度提升树方法Python实现”这个标题,乍看是教你怎么写几行代码跑个模型,但实际背后是一整套银行级风险决策逻辑的微型复刻。我带过不少刚入行的数据分析岗新人&…

2026/10/14 18:17:42 阅读更多 →

最新新闻

Towards Automated Regulatory Compliance Verification in Financial Auditing with Large Language Mo...

Towards Automated Regulatory Compliance Verification in Financial Auditing with Large Language Mo...

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现财务审计中监管合规性的自动验证,旨在解决传统审计中人工验证合规性的低效问题。研究对比了开源LLMs(如Llama-2系列)与专有LLMs(如OpenAI的GPT系列)在合规性检测中的性能,使用了普华永道(PwC)提供的两个自定义…

2026/10/14 20:48:13 阅读更多 →
A Versatile Pathology Co-pilot via Reasoning Enhanced Multimodal Large Language Model

A Versatile Pathology Co-pilot via Reasoning Enhanced Multimodal Large Language Model

文章主要内容和创新点总结 主要内容 本文提出了一种名为SmartPath-R1的多模态大型语言模型(MLLM),旨在解决计算病理学中现有模型推理能力有限、任务适应性单一的问题。该模型能够同时处理区域感兴趣(ROI)级别和全切片图像(WSI)级别的任务,包括分类、检测、分割和视觉…

2026/10/14 20:48:13 阅读更多 →
The Pluralistic Moral Gap: Understanding Judgment and Value Differences between Humans and Large ...

The Pluralistic Moral Gap: Understanding Judgment and Value Differences between Humans and Large ...

文章主要内容总结 本文聚焦大型语言模型(LLMs)与人类道德判断的差异,通过构建真实世界道德困境数据集,系统分析了二者在道德判断分布和价值观表达上的“多元道德差距”,并提出了缩小该差距的方法。具体内容如下: 数据集构建:创建了包含1618个真实世界道德困境的“道德困…

2026/10/14 20:48:13 阅读更多 →
GBS光子采样加速稠密子图搜索:图论难题的量子启发式解法

GBS光子采样加速稠密子图搜索:图论难题的量子启发式解法

1. 这不是量子计算科普,而是一次图论问题的“量子启发式突围” 你可能在最近几篇预印本论文或某次学术分享中见过这个标题:“Gaussian Boson Sampling for finding dense subgraphs”。它听起来像一个典型的交叉学科缝合怪——把高能物理里的玻色采样、量…

2026/10/14 20:48:13 阅读更多 →
风电功率预测的精度密码:输入稳定性硬指标建设指南

风电功率预测的精度密码:输入稳定性硬指标建设指南

1. 数据还是模型:先搞清楚精度瓶颈到底在哪先说一个我自己的感受。入行风电功率预测这几年,身边绝大多数团队把精力都砸在模型结构上:今天换一套神经网络,明天堆一个集成学习,后天又有人说注意力机制效果好。每次模型迭…

2026/10/14 20:48:13 阅读更多 →
基于STM32的简易四轴飞行器:硬件选型、姿态解算与PID调参全攻略

基于STM32的简易四轴飞行器:硬件选型、姿态解算与PID调参全攻略

简介:基于STM32的直流电机速度环PID闭环控制资源包,面向嵌入式初学者与电子类课程设计学生,帮助理解反馈控制原理并解决直流电机调速中的闭环实现问题。压缩包共204个文件,主要由C源文件、H头文件、Keil工程配置文件(u…

2026/10/14 20:47:12 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →