APT32F110 RISC-V开发板printf重定向与串口花式表白项目实战

news2026/5/24 12:57:56
1. 项目概述从“Hello World”到“花式表白”的嵌入式浪漫作为一名在嵌入式领域摸爬滚打了十多年的老工程师我调试过无数块开发板写过数不清的“Hello World”。但当我拿到爱普特APT32F110这块基于国产RISC-V内核的开发板时我决定玩点不一样的——用最基础的printf函数来实现一个“花式表白”程序。这听起来可能有点“不务正业”但恰恰是这种看似简单的项目最能考验你对一款MCU基础外设的掌握程度、对开发环境的熟悉度以及最重要的那份将冰冷代码赋予温度和创意的工程师浪漫。APT32F110是一款基于平头哥玄铁E902 RISC-V内核的32位微控制器主打高性价比和低功耗。本次测评的核心就是利用其UART串口通信功能结合我们最熟悉的C标准库函数printf通过串口调试助手在电脑屏幕上打印出精心设计的字符图案和动态效果最终组合成一句或一段“表白”信息。这不仅仅是让串口输出“I Love You”那么简单它涉及到串口初始化、重定向printf、控制字符如换行、清屏的灵活运用、定时器延时精度以及如何用纯文本构建视觉图案的创意编程思维。无论你是刚接触嵌入式的新手想通过一个有趣的项目入门串口通信还是经验丰富的开发者想快速评估这款国产RISC-V芯片的开发体验和基础性能这个“花式表白”项目都是一个绝佳的切入点。2. 核心思路与方案设计如何让串口“说话”更动听要让APT32F110开发板通过串口“表白”我们需要解决几个核心问题第一如何正确配置和使用芯片的UART外设第二如何将我们熟悉的printf函数输出重定向到这个UART端口第三如何设计输出内容使其超越普通文本具备“花式”效果。2.1 硬件连接与UART选型分析APT32F110通常提供多个UART接口。为了最大化兼容性和简化连接我们首选UART0因为它最常被映射到开发板的USB转串口芯片上实现一键下载和调试。你需要确认开发板原理图找到UART0对应的TX发送和RX接收引脚是否连接到了CH340、CP2102这类USB转串口芯片。如果是那么你只需要一根USB线连接开发板和电脑在设备管理器中识别出对应的COM口即可无需额外的USB转TTL模块这大大降低了硬件门槛。注意务必查阅官方开发板资料或原理图确认UART0的引脚连接。有些板子可能默认将UART0用于ISP下载模式而将打印功能放在UART1上。连接错误会导致电脑端无法接收到任何数据。2.2printf重定向的底层原理与实现在桌面编程中printf默认输出到标准输出通常是屏幕。在嵌入式系统里没有屏幕我们需要告诉系统将printf的内容发送到串口。这个过程称为“重定向”。本质上我们需要实现一个底层的_write函数对于GCC/ARM Compiler 6或RISC-V GCC工具链或者fputc函数对于Keil MDK的ARMCC或AC6编译器这个函数的核心任务就是接收一个字符然后通过UART发送出去。以RISC-V GCC环境常见于VS Code PlatformIO或芯来CDK为例重定向的关键代码如下#include stdio.h #include “apt32f110x.h” // 包含芯片寄存器定义头文件 // 假设UART发送单个字符的函数为 uart_send_char(char c) int _write(int file, char *ptr, int len) { int i; (void)file; // 避免未使用参数警告 for (i 0; i len; i) { uart_send_char(*ptr); // 调用你的UART发送函数 } return len; }而uart_send_char函数内部就是操作APT32F110的UART数据寄存器UARTx_TBR等待发送缓冲区为空检查UARTx_FSR的TX_EMPTY位然后将字符写入寄存器。官方提供的标准外设库SPL或者HAL库通常会封装好UART发送函数直接调用即可。实操心得重定向失败是新手最常遇到的问题。除了检查代码务必在工程设置中勾选“Use MicroLIB”如果使用Keil或确保链接了正确的标准库。对于GCC通常不需要特殊设置。另一个排查技巧是先不用printf直接调用UART发送函数发送一个固定字符串如“TEST”确认硬件和基础驱动是通的再叠加printf重定向的复杂性。2.3 “花式”效果的设计策略“花式”的核心在于利用文本和控制字符创造视觉体验。我们主要依赖以下几种手段字符画用星号(*)、点(.)、字母等组合成心形、花朵等图案。这需要提前设计好图案的文本矩阵。动态效果逐字打印每个字符间加入少量延时如50ms产生打字机效果。滚动效果通过不断打印回车换行(\r\n)和空格模拟文字滚动。闪烁效果重复打印“文字”-“空格覆盖”-“文字”利用延时实现。颜色与样式高级部分串口调试助手如MobaXterm、SecureCRT支持ANSI转义序列。通过输出像\033[31m这样的特殊序列可以控制终端文字颜色31m为红色、背景色、加粗等让表白更加绚丽。但这依赖于终端支持属于锦上添花的功能。我们的方案是结合定时器如SysTick实现精准延时确保动态效果流畅将设计好的字符画和文本内容存储在数组或常量中在主循环或特定函数中按照既定节奏调用printf进行输出。3. 开发环境搭建与工程配置详解工欲善其事必先利其器。对于APT32F110这款国产芯片搭建一个顺手、可靠的开发环境是第一步也是避免后续无数坑的关键。3.1 工具链选择官方IDE与第三方环境的权衡爱普特官方通常会提供基于Eclipse或Keil MDK的集成开发环境IDE以及完整的软件开发包SDK。对于初学者和希望获得最稳定支持的用户强烈建议直接从爱普特官网下载官方IDE和SDK。官方包通常包含了芯片支持包、外设库、驱动示例和项目模板能确保编译器和链接器设置是最优的最大程度避免兼容性问题。对于更喜欢轻量级或通用环境的开发者比如我也可以选择VS Code PlatformIO或者VS Code RISC-V GCC工具链 CMake的方案。这种方案更灵活但需要自行配置工具链路径、链接脚本和启动文件对新手挑战较大。避坑指南无论选择哪种环境第一步永远是仔细阅读官方SDK包中的README.md或《快速入门指南》。重点关注1工程模板的目录结构2系统时钟初始化函数system_clock_config的调用位置3链接脚本.ld文件是否适配你的芯片Flash和RAM大小。APT32F110的启动文件可能需要初始化RISC-V内核的机器模式寄存器这部分官方SDK通常已处理好不要随意修改。3.2 工程创建与关键配置项这里以使用官方IDE假设为APT IDE为例简述关键步骤新建项目选择APT32F110对应的芯片型号基于“UART Printf Example”模板创建如果有。如果没有模板就创建空项目然后手动添加官方库文件。添加文件将SDK中的核心文件添加到工程。通常包括apt32f110x.h芯片寄存器定义头文件。apt32f110x_xxx.c/.h标准外设库源文件和头文件如uart、gpio、systick等。startup_apt32f110x.s汇编启动文件。system_apt32f110x.c系统时钟初始化文件。linker_script.ld链接脚本。配置系统时钟在main.c的main()函数开头首要任务是调用系统时钟初始化函数例如system_clock_config()。APT32F110可能支持内部高速/低速RC振荡器以及外部晶振。为了UART波特率准确建议使用内部高速RC时钟或外部晶振并在初始化函数中确认主频例如48MHz。主频不对会导致计算的波特率偏差造成乱码。设置编译器优化与MicroLIB在工程选项的“Target”或“C/C”设置中如果使用Keil勾选“Use MicroLIB”可以显著减少printf等标准库函数的代码体积。优化等级建议先选择-O0无优化便于调试功能稳定后可改为-O1或-O2以减小体积。3.3 串口调试助手的选择与配置电脑端需要一款串口调试助手来接收和显示开发板发来的信息。推荐使用功能丰富、稳定的工具如AccessPort、Putty、MobaXterm或SecureCRT。配置关键点端口号在设备管理器中查看开发板对应的COM口如COM3。波特率必须与程序中UART初始化的波特率完全一致这是出现乱码的首要排查点。常用波特率有9600、115200等本项目为追求输出速度推荐使用115200。数据位8。停止位1。校验位无。流控制无。重要提示打开串口后如果程序正确运行但接收区一片空白首先检查波特率其次检查TX/RX线是否接反如果使用独立USB转TTL模块最后检查代码中UART的GPIO引脚配置是否正确TX应配置为复用推挽输出RX配置为浮空输入或上拉输入。4. 核心代码实现与“花式”技巧拆解环境搭好思路理清接下来就是动手编码。我们将从UART初始化开始逐步实现重定向最后打造表白内容。4.1 UART初始化与printf重定向完整代码假设我们使用UART0波特率115200时钟源为系统主频48MHz。#include “apt32f110x.h” #include “apt32f110x_uart.h” #include “apt32f110x_gpio.h” #include stdio.h // 定义UART0引脚 (请根据实际开发板原理图修改) #define UART0_TX_PIN GPIO_PIN_9 // PA9 #define UART0_RX_PIN GPIO_PIN_10 // PA10 #define UART0_PORT GPIOA // UART0初始化函数 void uart0_init(uint32_t baudrate) { // 1. 使能GPIOA和UART0时钟 CPSR_SYS_LOCK(); // 解锁系统控制寄存器部分芯片需要 RCC_EnableAPBClock(RCC_APB_MASK_UART0); // 使能UART0时钟 RCC_EnableAPBClock(RCC_APB_MASK_GPIOA); // 使能GPIOA时钟 CPSR_SYS_UNLOCK(); // 2. 配置GPIO引脚复用功能 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.Pin UART0_TX_PIN; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStructure.GPIO_Pull GPIO_Pull_Up; GPIO_Init(UART0_PORT, GPIO_InitStructure); GPIO_InitStructure.Pin UART0_RX_PIN; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; // 浮空输入 GPIO_Init(UART0_PORT, GPIO_InitStructure); // 3. 配置UART参数 UART_InitTypeDef UART_InitStructure; UART_InitStructure.BaudRate baudrate; UART_InitStructure.DataBits UART_DATA_8BITS; UART_InitStructure.StopBits UART_STOP_1BIT; UART_InitStructure.Parity UART_PARITY_NONE; UART_InitStructure.HardwareFlowControl UART_HARDWAREFLOWCONTROL_NONE; UART_InitStructure.Mode UART_MODE_TX_RX; // 发送和接收模式 UART_Init(UART0, UART_InitStructure); // 4. 使能UART UART_Enable(UART0, UART_MODE_TX_RX); } // 阻塞式发送一个字符 void uart_send_char(char c) { while (UART_GetFlagStatus(UART0, UART_FLAG_TX_EMPTY) RESET) { // 等待发送缓冲区为空 } UART_SendData(UART0, (uint8_t)c); } // 重定向_write函数 (针对GCC工具链) int _write(int file, char *ptr, int len) { int i; (void)file; for (i 0; i len; i) { uart_send_char(ptr[i]); } return len; } // 如果需要使用Keil环境则重定向fputc /* int fputc(int ch, FILE *f) { uart_send_char((char)ch); return ch; } */ // 简单的毫秒级延时函数基于SysTick或简单循环此处为示例 void delay_ms(uint32_t ms) { for (volatile uint32_t i 0; i ms * 5000; i); // 粗略延时实际项目请用SysTick }4.2 构建“花式”表白内容有了printf我们就可以开始创作了。下面展示几种不同的“花式”效果。效果一经典逐字打印表白void print_love_letter_typing(void) { const char* message “Dear, meeting you is the best thing in my life.\r\n”; printf(“\r\n”); // 先换行 for (int i 0; message[i] ! ‘\0’; i) { printf(“%c”, message[i]); delay_ms(50); // 每个字符间隔50ms模拟打字 } delay_ms(1000); printf(“—- From Your Embedded Engineer\r\n”); }效果二字符画爱心void print_heart_ascii(void) { printf(“\r\n\r\n”); // 空两行 const char* heart[] { “ ** ** “, “ * * * * “, “ * * * “, “* *”, “ * * “, “ * * “, “ * * “, “ * * “, “ ** “ }; int size sizeof(heart) / sizeof(heart[0]); for (int i 0; i size; i) { printf(“%s\r\n”, heart[i]); delay_ms(150); // 每行打印间隔形成绘制动画 } }效果三结合ANSI转义序列的彩色闪烁效果终端需支持void print_colorful_blink(void) { // ANSI转义序列\033[1;31m 表示亮红色 \033[0m 表示重置所有属性 const char* red_on “\033[1;31m”; // 亮红 const char* reset “\033[0m”; // 重置 for (int i 0; i 5; i) { // 闪烁5次 printf(“%sI LOVE YOU%s”, red_on, reset); fflush(stdout); // 确保输出立即刷新部分实现可能需要 delay_ms(300); printf(“\r \r”); // 回车并打印空格覆盖原位置 delay_ms(300); } printf(“%sI LOVE YOU FOREVER!%s\r\n”, red_on, reset); // 最后稳定显示 }主函数整合int main(void) { // 系统初始化 system_clock_config(); // 系统时钟初始化来自官方库 uart0_init(115200); // 初始化UART0波特率115200 printf(“\r\n APT32F110 Printf Love Message Demo \r\n”); delay_ms(1000); while (1) { print_heart_ascii(); delay_ms(1000); print_love_letter_typing(); delay_ms(2000); print_colorful_blink(); delay_ms(3000); // 等待3秒后重新开始循环 printf(“\033[2J”); // ANSI清屏命令准备下一次显示 } return 0; }5. 调试、问题排查与性能优化实录即使代码逻辑清晰在实际烧录和运行中你也一定会遇到各种问题。下面是我在实现过程中遇到的一些典型情况及解决方法。5.1 常见问题速查表问题现象可能原因排查步骤与解决方案串口助手无任何输出1. 电源未接通或开发板未运行。2. 串口线连接错误或COM口选择错误。3. UART引脚配置错误TX/RX反了或模式不对。4. 波特率不匹配。5.printf重定向未生效或标准库未正确链接。1. 检查开发板供电指示灯复位程序。2. 确认USB线已连接在设备管理器查看COM口重新插拔尝试。使用独立USB转TTL时交叉连接TX/RX板TX接模块RX。3. 核对原理图确认TX引脚配置为复用推挽输出RX为输入。4.最常用尝试修改代码和串口助手为9600、115200等常见波特率逐一测试。5. 检查是否实现了_write或fputc函数Keil工程是否勾选“Use MicroLIB”。先写一个简单的uart_send_string(“TEST”)函数测试UART本身是否正常。输出乱码1.波特率不匹配最常见。2. 系统时钟频率设置错误导致波特率发生器计算偏差。3. 串口助手数据格式设置错误数据位、停止位、校验位。1. 双重检查代码初始化波特率和串口助手设置是否完全一致。2. 检查system_clock_config()函数确认系统主频如48MHz与UART波特率计算时的时钟源一致。可以尝试降低波特率如9600测试对时钟误差容忍度更高。3. 确保数据位8停止位1校验位无。程序运行一次后卡死或不再输出1. 重定向函数_write或fputc实现有误导致缓冲区问题。2. 延时函数delay_ms占用大量CPU时间且可能被编译器优化掉。3. 中断冲突或未正确处理。1. 确保重定向函数中等待的是“发送缓冲区空”标志TX_EMPTY而不是“发送完成”。有些UART的“发送完成”标志可能在最后一个字节离开移位寄存器后才置位容易造成死等。2. 将delay_ms函数中的循环变量声明为volatile防止被优化。更好的方法是使用SysTick定时器实现非阻塞延时。3. 本项目未使用中断但如果工程中开启了其他中断需检查优先级和中断服务函数是否正确。printf输出不完整或丢失字符1. 发送函数uart_send_char未等待“缓冲区空”就退出导致数据覆盖。2. 波特率过高而MCU主频较低处理不过来。3. 串口助手接收缓冲区大小不足或显示速度慢。1.务必在uart_send_char中加入while循环等待TX_EMPTY标志。2. 适当降低波特率或检查是否有更高优先级的任务打断了串口发送流程。3. 在串口助手中清空接收区或换用其他调试助手测试。5.2 性能优化与进阶思考当基本功能实现后我们可以思考如何做得更好使用DMA发送当前是“阻塞式”发送每个字符都要等待。对于大量文本如复杂的字符画这会浪费大量CPU时间。可以启用UART的DMA发送功能将整个字符串的搬运工作交给DMACPU在此期间可以处理其他任务或进入低功耗模式。非阻塞延时与状态机当前的delay_ms是阻塞的整个表白过程MCU被独占。可以改用SysTick定时器实现非阻塞延时结合状态机编程让表白动画与其他任务如按键检测、传感器读取并发执行。将内容存储到Flash表白文本和图案作为常量数组默认会占用RAM。在定义时使用const关键字并将其放到自定义的代码段如.rodata编译器会将其存储到Flash中节省宝贵的RAM空间。制作字库实现真正图形化如果想显示更复杂的图形或中文字符可以提取点阵字库通过编程控制每个像素点再结合串口终端或LCD屏实现真正的图形化表白这将是另一个层次的挑战和乐趣。6. 项目总结与延伸应用通过这个“printf花式表白”项目我们实际上完成了一次对APT32F110开发板的深度初探。从最基础的GPIO和UART外设配置到C语言标准库在嵌入式系统的重定向再到利用定时器控制程序节奏最后融合创意进行应用层编程——这个过程覆盖了嵌入式开发中硬件驱动、系统集成、应用逻辑等多个核心环节。这个项目的价值远不止于“表白”。它验证了开发环境是否正常工作确认了芯片最基本的外设功能是否稳定printf的重定向更是后续所有调试的基石。你可以很容易地将这个框架改造成一个“系统状态监控器”定期打印芯片的温度、电压、各个外设的工作状态或者变成一个“数据记录仪”将传感器采集的数据通过串口格式化输出方便在电脑端用软件分析。我个人在操作中的体会是国产RISC-V芯片如APT32F110其开发流程和生态正在快速完善。官方提供的库函数和示例代码质量是上手快慢的关键。遇到问题时善用printf进行“打印调试”定位问题范围再结合寄存器手册或库函数源码深入分析是最高效的解决路径。最后别忘了编程的乐趣用代码去表达一些有趣的想法就像这个花式表白项目一样它能让你在钻研技术的同时保持一份创造的热情和温度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2637091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…