RT-Thread中断管理实战:从Cortex-M硬件机制到线程通信

news2026/5/15 17:53:51
1. 项目概述从内核到中断RT-Thread的实战拼图搞嵌入式开发尤其是用RTOS中断处理是绕不开的一道坎。之前我们聊RT-Thread的线程、IPC、内存管理都是在“太平盛世”下进行的线程们按部就班地运行、等待、通信。但现实世界是“多事之秋”外部事件比如按键、定时器到点、数据接收完成随时可能打断CPU的当前工作这就是中断。在RT-Thread里尤其是在其精简的Nano版本中理解中断如何与内核协同工作是能否把RTOS真正用起来、用好的关键。这篇文章我们就来彻底搞懂RT-Thread特别是基于我们最熟悉的Cortex-M架构比如STM32其中断管理的“内功心法”。这不仅是内核学习的最后一块拼图也是对我们前面所有知识的一次实战检验和串联。你会发现之前学的线程调度、临界区保护在中断来临的那一刻全都“活”了过来。2. 内核中断管理框架与设计思路在裸机开发中中断服务函数ISR里我们想干啥就干啥但到了RTOS环境ISR不再是“法外之地”。RT-Thread对中断处理有一套清晰的框架目的是在保证实时性的前提下维护系统的稳定性和确定性。2.1 RT-Thread中断处理的三段式模型RT-Thread将完整的中断处理过程抽象为三个部分中断前导程序、用户中断服务程序和中断后续程序。这个模型是理解其中断管理的核心。中断前导程序这是中断发生后跳转到你的ISR之前由RT-Thread内核自动插入的“预处理”代码。它的核心任务包括保存线程上下文将当前被打断线程的CPU寄存器如R0-R3, R12, LR, PC, PSR等压入该线程的栈中。这是后续能够正确切换回来的基础。通知内核进入中断调用rt_interrupt_enter()函数。这个函数会将一个全局的中断嵌套计数器rt_interrupt_nest加1。内核通过这个计数器知道当前是否处于中断上下文这对于许多内核API比如某些不允许在中断中调用的函数的行为至关重要。切换到系统中断栈如果启用对于某些架构或配置为了节省线程栈空间内核可能会在中断发生时将栈指针切换到一块独立的中断栈。这在Cortex-M的RT-Thread Nano默认配置中不常见更多是使用当前被打断线程的栈但需要了解这个概念。用户中断服务程序这就是你写的那个中断处理函数比如TIM2_IRQHandler()。在这里你应该遵循“快进快出”原则快速响应只做最紧急、必须立即处理的事情比如清除硬件中断标志、读取关键数据。避免耗时操作严禁使用rt_thread_delay()、rt_sem_take()可能带超时等待等可能引起线程挂起的函数。可以调用rt_sem_release(),rt_mb_send(),rt_mq_send()等释放型IPC来通知等待的线程。减少关中断时间尽量缩短在ISR内部手动关中断的时长。中断后续程序这是你的ISR执行完毕后由RT-Thread内核自动执行的“收尾”工作通知内核离开中断调用rt_interrupt_leave()将中断嵌套计数器减1。上下文恢复与调度决策这是最精妙的一步。内核会检查在本次中断处理过程中包括你的ISR以及可能由ISR触发的、在中断后续程序中处理的线程就绪事件是否有更高优先级的线程就绪了。如果没有则直接恢复之前被打断线程的上下文从它被中断的指令处继续执行。如果有则不会立即恢复原线程而是触发一次线程调度。中断后续程序会直接切换到就绪的最高优先级线程的上下文去执行。这意味着线程切换的时机可能发生在中断退出的时候而不是一定要等到下一个系统滴答。这个三段式模型特别是“中断后续程序”中的调度决策是RT-Thread保证高优先级任务能及时响应外部事件的基石。它实现了中断到线程的高效衔接。2.2 为什么需要这套框架—— 与裸机中断的对比在裸机程序中中断服务函数结束后CPU自然回到被中断的代码继续执行。但在多线程环境中问题变复杂了资源竞争中断和线程可能访问共享资源全局变量、硬件外设。如果没有保护会导致数据错乱。实时性保障中断处理中释放了一个信号量唤醒了一个高优先级线程。这个线程应该何时得到执行如果等到当前被中断的低优先级线程自然执行完就失去了实时性。系统状态管理内核需要精确知道当前CPU是运行在线程上下文还是中断上下文因为很多内核API在这两种上下文中的行为是不同的例如不允许在中断中挂起线程。RT-Thread的三段式模型通过rt_interrupt_enter/leave()来标记中断上下文通过在中断退出前进行调度检查优雅地解决了上述问题。它使得中断既能快速响应硬件又能高效地唤醒合适的线程来处理后续业务逻辑实现了“中断处理”与“线程处理”的分离与协作。3. Cortex-M架构下的中断实现剖析理论很美好但最终要落地到芯片上。对于我们最常用的Cortex-M内核ARMv7-M架构RT-Thread的中断管理是如何与硬件紧密结合的呢答案是它深度依赖并遵循Cortex-M内核自身的中断机制。3.1 硬件基础NVIC与中断向量表Cortex-M内核集成了一个强大的中断控制器——嵌套向量中断控制器NVIC。它支持中断优先级、优先级分组、中断嵌套高优先级中断可打断低优先级中断服务等功能。这些功能都是硬件实现的效率极高。当中断发生时硬件会自动完成以下动作压入当前上下文PSR, PC, LR, R12, R3-R0到当前栈主栈或进程栈。根据中断向量表IVT自动跳转到对应的中断服务程序入口地址。更新LR寄存器为一个特殊值如0xFFFFFFF9指示返回时需从中断栈中恢复上下文。中断向量表是一个存储在Flash固定起始地址通常是0x08000000的数组数组的每个元素都是一个函数指针指向对应异常或中断的服务程序。例如复位异常是第一个SysTick中断、外部中断等依次排列。芯片厂商的启动文件如startup_stm32l051xx.s会定义这个表的初始框架。3.2 RT-Thread在Cortex-M上的适配理解了硬件机制再看RT-Thread就清晰了。在Cortex-M上RT-Thread并没有重新发明轮子去“管理”中断的响应和跳转而是“遵守”这套硬件规则。中断入口的接管在RT-Thread的移植层libcpu/arm/cortex-m0等目录你会找到context_xxx.S这样的汇编文件。里面定义了PendSV_Handler用于上下文切换和SysTick_Handler系统时钟节拍等关键异常的处理程序。这些函数是RT-Thread内核调度的心脏。用户中断的兼容对于用户外设中断如USART1, TIM2RT-Thread完全不做干预。你只需要像在裸机开发中一样在CubeMX生成的stm32xxxx_it.c文件中或者自己实现对应的弱函数如void TIM2_IRQHandler(void)并在其中调用rt_interrupt_enter()和rt_interrupt_leave()即可。// 示例在RT-Thread环境下的定时器中断服务函数 void TIM2_IRQHandler(void) { /* 进入中断 */ rt_interrupt_enter(); if (__HAL_TIM_GET_FLAG(htim2, TIM_FLAG_UPDATE) ! RESET) { __HAL_TIM_CLEAR_FLAG(htim2, TIM_FLAG_UPDATE); // 1. 紧急处理清除标志读取数据等 // 2. 通知线程例如释放一个信号量 rt_sem_release(timer_sem); } /* 离开中断 */ rt_interrupt_leave(); }中断锁的实现我们之前学过的临界区保护函数rt_hw_interrupt_disable()和rt_hw_interrupt_enable()在Cortex-M上就是通过操作PRIMASK或BASEPRI寄存器来实现的全局中断开关。这是最底层的保护手段。一个关键认知在Cortex-M的RT-Thread尤其是Nano中所谓“中断管理API”很多是对其他架构如RISC-V的抽象。对于Cortex-M你直接操作NVIC寄存器通过HAL库或标准库函数来使能、设置优先级中断直接编写标准的中断服务函数并在其中使用rt_interrupt_enter/leave()和内核IPC就完成了绝大部分工作。rt_hw_interrupt_install/mask/umask这类API在Cortex-M的移植中通常是空实现或直接映射到NVIC操作。4. 实战在RT-Thread Nano中集成定时器中断光说不练假把式。我们以一个具体的例子将中断机制融入我们已有的RT-Thread Nano工程中。目标创建一个定时器每1秒触发一次中断在中断中释放一个信号量由一个高优先级线程等待该信号量并打印当前系统tick。4.1 环境准备与工程配置假设我们基于STM32L051使用STM32CubeMX生成基础HAL库代码并已集成RT-Thread Nano例如通过STM32CubeMX的Software Packs或手动添加。确保系统滴答定时器Systick已配置为RT-Thread的时钟源通常CubeMX自动完成。已有一个串口用于打印日志如USART2。工程中已包含rt-thread/include和rt-thread/libcpu/arm/cortex-m0根据你的内核等路径。4.2 外设定时器配置以TIM2为例在CubeMX中激活TIM2选择内部时钟源。配置预分频器PSC和自动重载值ARR使其产生1秒的更新中断。例如当APB时钟为32MHz时设置PSC31999ARR999则定时器频率为 32MHz / (319991) / (9991) 1 Hz。使能更新中断Update interrupt。生成代码。4.3 编写中断服务与线程通信代码在生成的stm32l0xx_it.c文件中找到TIM2_IRQHandler函数修改如下/* 引入RT-Thread头文件 */ #include rtthread.h /* 声明一个信号量用于中断与线程同步 */ static struct rt_semaphore timer_sem; void TIM2_IRQHandler(void) { /* 进入中断必须 */ rt_interrupt_enter(); if (__HAL_TIM_GET_FLAG(htim2, TIM_FLAG_UPDATE) ! RESET) { __HAL_TIM_CLEAR_FLAG(htim2, TIM_FLAG_UPDATE); /* 用户中断服务程序核心是释放信号量通知线程 */ rt_sem_release(timer_sem); } /* 离开中断必须 */ rt_interrupt_leave(); }在main.c或你的应用文件中创建信号量和处理线程#include rtthread.h #include stdio.h // 用于rt_kprintf /* 定义线程栈和控制块 */ ALIGN(RT_ALIGN_SIZE) static char thread1_stack[256]; static struct rt_thread thread1; /* 线程入口函数 */ static void thread1_entry(void *parameter) { rt_err_t result; while (1) { /* 无限等待信号量当信号量被中断释放时线程才继续执行 */ result rt_sem_take(timer_sem, RT_WAITING_FOREVER); if (result RT_EOK) { /* 成功获取到信号量说明中断发生了 */ rt_kprintf([Thread] Timer INT! Current tick: %d\n, rt_tick_get()); } } } int main(void) { rt_err_t ret RT_EOK; /* 初始化信号量初始值为0最大为1二进制信号量 */ ret rt_sem_init(timer_sem, tsem, 0, RT_IPC_FLAG_FIFO); if (ret ! RT_EOK) { rt_kprintf(Semaphore init failed!\n); return -1; } /* 初始化线程 */ ret rt_thread_init(thread1, timer_thread, thread1_entry, RT_NULL, thread1_stack[0], sizeof(thread1_stack), 5, /* 较高优先级比如5 */ 10); if (ret RT_EOK) { rt_thread_startup(thread1); } else { rt_kprintf(Thread init failed!\n); } /* 用户自己的硬件初始化包括启动定时器 */ HAL_TIM_Base_Start_IT(htim2); /* RT-Thread调度器已经由启动文件自动启动这里进入主线程循环如果创建了的话或空闲线程 */ while (1) { rt_thread_mdelay(1000); // 主线程可以干其他事 } }4.4 关键操作解析与注意事项rt_interrupt_enter/leave()必须成对调用这是RT-Thread内核正确管理中断嵌套计数的关键。忘记调用可能导致内核状态错乱影响调度和某些API的判断。ISR中只能使用释放型IPC我们在中断中调用rt_sem_release()这是安全的。绝对不能在ISR中调用rt_sem_take(..., RT_WAITING_FOREVER)这会导致系统挂起。中断优先级与线程优先级Cortex-M的中断优先级是硬件优先级数值越小优先级越高。RT-Thread的线程优先级是软件优先级默认数值越小优先级越高。要小心处理SysTick中断和PendSV中断的优先级在RT-Thread移植层通常被设置为最低如0xFF以确保它们不会打断用户中断和关键线程。用户的中断优先级应合理设置。如果某个中断服务非常紧急且短小可以设高优先级。如果中断服务中需要调用内核API如释放信号量要确保中断优先级不低于RT_INTERRUPT_PRIORITY_MAX一个在rtconfig.h中可配置的宏用于保护临界区的中断锁否则可能在API内部被屏蔽。中断服务函数要简短理想的中断服务函数只做标志位清除、数据读取和释放信号量/事件等操作。复杂的处理如数据解析、长时间计算应交给被唤醒的高优先级线程去做。这符合“快进快出”原则减少中断屏蔽时间提高系统响应其他中断的能力。5. 阶段小结与知识串联从Nano到实战至此我们已经完成了RT-Thread内核最核心部分的学习闭环。让我们回顾一下并看看中断如何将之前的知识点串联起来线程管理我们创建了timer_thread来等待信号量。中断作为异步事件生产者线程作为消费者。这体现了RT-Thread以线程为基本调度单元的设计思想。时间管理我们在中断中使用了rt_tick_get()来获取系统时间戳。SysTick中断由RT-Thread内核管理是系统心跳的来源它驱动了rt_tick的增长和软件定时器的检查。临界区保护rt_hw_interrupt_disable/enable()是最终极的临界区保护手段它通过直接开关全局中断来实现。在更上层我们也可以用rt_enter_critical/rt_exit_critical()它们可能基于中断锁或调度器锁实现。IPC机制信号量这是中断与线程通信的经典桥梁。中断释放信号量线程获取信号量。同样邮箱、消息队列、事件集也可以用于中断到线程的通信。切记中断中只能用rt_mb_send(),rt_mq_send(),rt_event_send()等非阻塞发送函数。内存管理在更复杂的应用中中断可能通过消息队列传递一块动态分配rt_malloc的内存地址给线程处理处理完再由线程释放。这需要仔细设计内存生命周期防止内存泄漏。关于RT-Thread Nano我们现在所做的正是使用RT-Thread Nano进行开发的标准模式。Nano包含了内核调度、线程、IPC、内存、定时器和与硬件相关的移植层如Cortex-M的上下文切换、中断入口包装。它不包含设备驱动框架、文件系统、网络协议栈等组件因此非常精简通常10KB以下ROM占用。我们通过HAL库或标准库直接操作外设在中断服务函数中遵循RT-Thread的规则调用enter/leave使用IPC就能构建出响应迅速、结构清晰的实时应用程序。6. 常见问题与调试技巧实录在实际集成中断时你可能会遇到以下典型问题6.1 中断不触发或只触发一次检查外设时钟和GPIO配置这是最基础也最容易出错的地方。确保定时器/USART等外设的时钟已使能引脚配置正确。检查NVIC配置在CubeMX中确认中断已使能Enabled并且优先级已设置。生成的代码会调用HAL_NVIC_SetPriority()和HAL_NVIC_EnableIRQ()。检查中断标志清除在ISR中必须在处理逻辑前清除相应的硬件中断标志如__HAL_TIM_CLEAR_IT(htimx, TIM_IT_UPDATE)否则中断会持续触发导致程序卡死在中断中。确认中断服务函数名正确函数名必须与启动文件中定义的向量表名称完全一致如TIM2_IRQHandler。大小写错误、拼写错误都会导致中断无法跳转到你的函数从而进入默认的Default_Handler通常是一个死循环。6.2 系统在中断后卡死或行为异常忘记调用rt_interrupt_enter/leave()这会导致内核的中断嵌套计数错误。可能使得内核误判当前不在中断上下文从而允许调用了某些禁止在中断中使用的API如带永久等待的rt_sem_take最终导致调度异常或死锁。在中断中进行了线程切换操作除了特定的、以_try或_from_isr结尾的API绝大多数RTOS的线程挂起、延时等操作都不能在中断中使用。仔细检查ISR中的每一个RT-Thread API调用。中断优先级设置不当如果用户中断优先级高于SysTick或PendSV且中断服务时间很长会阻塞系统心跳和任务调度导致系统“假死”。建议将SysTick和PendSV优先级设为最低用户中断优先级不要设置得过高除非有特别紧急的需求。栈溢出中断使用的是当前线程的栈除非配置了独立中断栈。如果中断服务函数或它调用的函数使用了大量局部变量或者发生了深层次函数调用可能导致线程栈溢出破坏内存。可以通过RT-Thread的msh命令或list_thread来查看线程栈使用情况。6.3 使用调试器进行中断调试打断点在中断服务函数入口处打上断点触发中断后看是否能停住。这能验证中断向量是否正确连接。查看NVIC寄存器在调试器的寄存器窗口查看NVIC-ISER中断使能寄存器和NVIC-IPR中断优先级寄存器确认你的中断号对应的位是否已正确设置。单步调试ISR进入ISR后单步执行观察标志位清除、IPC操作等是否按预期执行。特别注意执行到rt_interrupt_leave()后是返回到原线程还是切换到了其他线程。利用rt_interrupt_get_nest()可以在调试时在可疑的地方调用此函数打印中断嵌套深度帮助判断是否意外嵌套或enter/leave不匹配。6.4 性能与优化考量测量中断响应时间使用一个空闲的GPIO引脚在中断入口处拉高在出口处拉低用示波器测量脉冲宽度即可得到中断服务的总执行时间包括RT-Thread的前导和后续开销。确保这个时间满足你的实时性要求。减少ISR开销如果对中断响应时间极其敏感可以考虑将rt_interrupt_enter/leave()调用封装成宏并检查在最高优化等级下是否足够高效。对于极其简单、仅需置位一个标志的中断可以尝试在非常严格的控制下确保无资源竞争不调用RT-Thread的接口但一般不推荐因为这脱离了内核管理。使用DMA来搬运数据将中断频率降到最低。中断是连接硬件异步事件和RTOS多线程世界的桥梁。理解并正确使用RT-Thread的中断管理机制尤其是rt_interrupt_enter/leave()这一对关键函数和中断中IPC的使用规范是写出稳定、高效实时程序的关键。当你把中断、线程、IPC流畅地组合在一起时你会发现RT-Thread这样的RTOS能让你以更清晰、更模块化的方式去驾驭复杂的嵌入式系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2615623.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…