FreeRTOS在ARM Cortex-M上的移植原理与工程实践

news2026/4/13 1:17:04
1. FreeRTOS_ARM项目概述FreeRTOS_ARM并非一个独立的第三方开源项目而是指FreeRTOS实时操作系统在ARM架构微控制器上的官方适配与工程实践体系。FreeRTOS本身是一个轻量级、可裁剪、开源MIT License的实时内核其核心设计目标是为资源受限的嵌入式设备提供确定性任务调度、同步机制与内存管理能力。ARM架构——涵盖Cortex-M0/M0/M3/M4/M7/M23/M33等主流MCU内核——是FreeRTOS应用最广泛、支持最成熟的硬件平台。FreeRTOS官方代码仓库中/portable/目录下的GCC/ARM_CMx子目录如ARM_CM3、ARM_CM4F、ARM_CM7即为针对不同ARM Cortex-M内核的底层移植层Port Layer它们构成了FreeRTOS_ARM工程实践的技术基石。该移植层的核心价值在于将FreeRTOS内核的抽象调度逻辑精确映射到ARM Cortex-M处理器特有的异常模型、寄存器上下文、系统定时器SysTick及内存保护单元MPU上。它不是简单的“编译通过”而是深度耦合硬件特性的工程实现。例如Cortex-M系列采用向量中断表VTOR、自动压栈/出栈PSP/MSP切换、BASEPRI寄存器实现优先级屏蔽等机制FreeRTOS_ARM移植层必须严格遵循ARMv7-M/v8-M架构规范确保中断响应时间Interrupt Latency和任务切换时间Context Switch Time满足硬实时要求。一个典型的Cortex-M4F内核在168MHz主频下FreeRTOS的任务切换开销通常稳定在1.2~1.8μs之间这正是移植层高效汇编代码与精巧C语言封装协同作用的结果。FreeRTOS_ARM的适用范围覆盖从超低功耗的Cortex-M0如STM32L0、nRF52810到高性能双精度浮点运算的Cortex-M7如STM32H7、i.MX RT1060。其工程化落地不依赖特定厂商SDK但与ST HAL、NXP MCUXpresso SDK、Renesas FSP等主流外设库具有天然兼容性。开发者可直接在裸机Bare Metal环境下启动FreeRTOS亦可在CMSIS-RTOS v2 API抽象层之上构建可移植应用。这种“内核轻量、移植严谨、生态开放”的特性使其成为工业控制、物联网终端、医疗电子及汽车电子ASIL-B级功能安全应用需配合SafeRTOS或经TUV认证的FreeRTOS版本等领域的事实标准。2. ARM Cortex-M移植层核心架构解析FreeRTOS_ARM的移植层位于源码树FreeRTOS/Source/portable/GCC/路径下按Cortex-M内核代际划分目录。其架构严格遵循分层设计原则由汇编层Assembly Layer、C语言接口层C Interface Layer和配置层Configuration Layer构成三者协同完成内核与硬件的桥接。2.1 汇编层上下文切换与异常入口的基石汇编层是移植层性能与可靠性的关键全部使用GNU ARM汇编语法.s文件直接操作CPU寄存器。核心文件包括portasm.s或port.c中内联汇编定义vPortSVCHandlerSVC调用处理、xPortPendSVHandlerPendSV任务切换和xPortSysTickHandlerSysTick节拍中断三个关键异常服务例程ISR。portmacro.h定义与架构强相关的宏如portRESTORE_CONTEXT()、portSAVE_CONTEXT()其内部调用汇编函数完成上下文保存与恢复。以Cortex-M4F的xPortPendSVHandler为例其核心逻辑如下xPortPendSVHandler: /* 判断当前使用PSP还是MSP */ mrs r0, psp tst r0, #4 it eq mrseq r0, msp /* 将R4-R11压入当前堆栈任务堆栈 */ stmdb r0!, {r4-r11} /* 保存当前堆栈指针到pxCurrentTCB-pxTopOfStack */ str r0, [r3] /* 加载下一个任务的堆栈指针 */ ldr r0, [r3] /* 恢复R4-R11 */ ldmia r0!, {r4-r11} /* 更新MSP/PSP */ msr psp, r0 bx lr此代码精准利用Cortex-M的PSPProcess Stack Pointer和MSPMain Stack Pointer分离机制在任务切换时仅保存/恢复被调用者保存寄存器R4-R11避免了对调用者保存寄存器R0-R3, R12的冗余操作将上下文切换时间压缩至极致。若启用浮点单元FPU则需额外保存/恢复S0-S31及FPSCR寄存器此时portasm.s中会包含VSTMDB/VLDMIA指令序列。2.2 C语言接口层内核与硬件的粘合剂C语言层port.c提供FreeRTOS内核调用的标准化接口其实现高度依赖汇编层。关键函数包括函数名作用工程要点xPortStartScheduler()启动调度器配置SysTick重装载值、使能SysTick中断、设置PendSV优先级NVIC_SetPriority(PendSV_IRQn, configLIBRARY_LOWEST_INTERRUPT_PRIORITY)、触发SVC进入第一个任务vPortEndScheduler()停止调度器通常为空实现MCU无真正“停机”概念实际项目中多用于进入低功耗模式xPortSysTickHandler()SysTick节拍处理调用xTaskIncrementTick()更新系统节拍计数并检查是否有延时到期任务需就绪若启用了configUSE_TICK_HOOK则在此处调用用户钩子函数vPortEnterCritical()/vPortExitCritical()进入/退出临界区通过修改BASEPRI寄存器屏蔽低于指定优先级的中断而非简单关总中断cpsid i保证高优先级中断如ADC DMA完成仍可响应vPortEnterCritical()的典型实现void vPortEnterCritical( void ) { portDISABLE_INTERRUPTS(); // 宏展开为 msr basepri, #configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY uxCriticalNesting; if( uxCriticalNesting 1 ) { /* 禁用SysTick防止节拍中断干扰临界区 */ SysTick-CTRL ~SysTick_CTRL_ENABLE_Msk; } }此处configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY是关键配置项其值必须严格大于等于FreeRTOS内核使用的最高优先级中断如PendSV、SysTick否则将导致死锁。例如若configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5ARM NVIC优先级数值越小优先级越高则PendSV中断优先级必须设为≤5如NVIC_SetPriority(PendSV_IRQn, 5)。2.3 配置层裁剪与定制的中枢FreeRTOSConfig.h是FreeRTOS_ARM工程的“宪法”所有移植相关配置均在此定义。与ARM平台强相关的配置项如下表所示配置项典型值说明configCPU_CLOCK_HZSystemCoreClock系统主频用于计算SysTick重装载值SysTick-LOAD (configCPU_CLOCK_HZ / configTICK_RATE_HZ) - 1configTICK_RATE_HZ1000系统节拍频率Hz默认1ms。过高增加中断开销过低影响延时精度。Cortex-M4F在168MHz下1kHz节拍开销约0.05% CPU负载configLIBRARY_LOWEST_INTERRUPT_PRIORITY0xFFNVIC最低优先级数值8位对应ARM优先级分组下的最低有效位。需与NVIC_PriorityGroupConfig()匹配configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY0x10系统调用允许的最高中断优先级。必须≥内核中断PendSV/SysTick优先级且≤configLIBRARY_LOWEST_INTERRUPT_PRIORITYconfigUSE_PORT_OPTIMISED_TASK_SELECTION1启用位运算优化的任务就绪列表扫描__CLZ()指令在Cortex-M3/M4/M7上显著提升就绪任务查找速度configENABLE_BACKWARD_COMPATIBILITY0禁用旧版API兼容减小代码体积并强制使用新API如xTaskCreateStatic()替代xTaskCreate()特别注意configPRIO_BITS配置Cortex-M内核的NVIC优先级寄存器位宽可配置3~4位configPRIO_BITS必须与NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4)等分组设置严格一致。若硬件使用4位优先级NVIC_PriorityGroup_4则configPRIO_BITS必须为4否则BASEPRI屏蔽将失效。3. 关键API详解与工程实践FreeRTOS_ARM的API分为内核API与移植层API两大类。内核API如xTaskCreate、vTaskDelay跨平台通用而移植层API如portYIELD_FROM_ISR则与ARM特性深度绑定。以下聚焦ARM平台特有API的工程化解读。3.1 中断安全的上下文切换portYIELD_FROM_ISR在中断服务程序ISR中若操作导致更高优先级任务就绪如xQueueSendFromISR向高优先级任务发送消息需立即触发任务切换而非等待中断返回后再由SysTick处理。portYIELD_FROM_ISR是实现此需求的ARM专属API。void USART1_IRQHandler(void) { BaseType_t xHigherPriorityTaskWoken pdFALSE; uint8_t ucData; if (__HAL_UART_GET_FLAG(huart1, UART_FLAG_RXNE) ! RESET) { ucData huart1.Instance-RDR; /* 向队列发送数据若唤醒高优先级任务则标记 */ xQueueSendFromISR(xRxQueue, ucData, xHigherPriorityTaskWoken); } /* 关键若需切换则触发PendSV */ portYIELD_FROM_ISR(xHigherPriorityTaskWoken); }portYIELD_FROM_ISR宏展开为#define portYIELD_FROM_ISR( x ) \ do { \ if( ( x ) ! pdFALSE ) \ { \ portNVIC_INT_CTRL_REG portNVIC_PENDSVSET_BIT; \ } \ } while( 0 )其本质是向NVIC的ICPRInterrupt Control and State Register写入PENDSVSET位强制挂起PendSV异常。当当前ISR执行完毕CPU将立即响应PendSV执行xPortPendSVHandler完成上下文切换。此机制避免了在ISR中直接调用vTaskSwitchContext()带来的栈溢出风险是ARM Cortex-M中断响应确定性的保障。3.2 低功耗集成vPortSuppressTicksAndSleep对于电池供电设备FreeRTOS_ARM提供了vPortSuppressTicksAndSleep钩子函数允许在空闲任务Idle Task中进入深度睡眠模式如Cortex-M4的WFE/WFI指令同时保持节拍精度。void vApplicationIdleHook( void ) { /* 计算下次节拍唤醒时间 */ const TickType_t xExpectedIdleTime xNextTaskUnblockTime - xTickCount; if( xExpectedIdleTime configEXPECTED_IDLE_TIME_BEFORE_SLEEP ) { /* 进入低功耗前关闭外设时钟、配置GPIO */ __HAL_RCC_PWR_CLK_ENABLE(); HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); /* 调用移植层睡眠函数 */ vPortSuppressTicksAndSleep( xExpectedIdleTime ); } }vPortSuppressTicksAndSleep在Cortex-M4F上的实现逻辑读取SysTick当前计数值SysTick-VAL计算剩余节拍时间xExpectedIdleTime * configTICK_RATE_HZ若剩余时间足够配置SysTick为单次模式SysTick-CTRL ~SysTick_CTRL_TICKINT_Msk并设置重装载值执行__WFI()指令进入Wait-for-Interrupt状态被SysTick中断或外部中断唤醒后校准xTickCount补偿睡眠期间丢失的节拍此方案比单纯在空闲任务中调用HAL_PWR_EnterSLEEPMode()更精准避免了因节拍中断被屏蔽导致的vTaskDelay()等函数计时不准确问题。3.3 MPU内存保护xTaskCreateRestricted在Cortex-M3/M4/M7带MPU的芯片上FreeRTOS_ARM支持为每个任务分配独立的内存区域实现硬件级隔离。xTaskCreateRestricted是创建受保护任务的核心API。/* 定义任务内存区域 */ const MemoryRegion_t xMemoryRegions[] { /* Region 0: 任务栈RW */ { (uint32_t)ucTaskStack[0], 1024, portMPU_REGION_READ_WRITE }, /* Region 1: 任务代码段RX */ { (uint32_t)pvTaskCode, 4096, portMPU_REGION_PRIVILEGED_READ_ONLY_EXECUTE }, /* Region 2: 外设寄存器RW */ { 0x40000000, 0x10000, portMPU_REGION_READ_WRITE } }; TaskParameters_t xTaskParameters; xTaskParameters.pvTaskCode pvTaskCode; xTaskParameters.pcName MPU_Task; xTaskParameters.usStackDepth 1024; xTaskParameters.pvParameters NULL; xTaskParameters.uxPriority tskIDLE_PRIORITY 1; xTaskParameters.pvPortBuffer ucTaskStack[0]; xTaskParameters.xRegions xMemoryRegions; xTaskParameters.ucNumRegions sizeof(xMemoryRegions) / sizeof(xMemoryRegions[0]); xTaskCreateRestricted(xTaskParameters, xHandle);xTaskCreateRestricted在创建任务时会调用prvSetupMPU函数根据xMemoryRegions数组配置MPU的8个region寄存器MPU_RBAR,MPU_RASR为任务栈、代码、外设等分配权限。若任务越界访问如向只读代码段写入将触发MemManage异常由xPortMemManageHandler捕获并终止任务极大提升系统鲁棒性。4. 典型工程集成示例4.1 STM32CubeMX FreeRTOS_ARM最小系统以STM32F407VGCortex-M4F为例使用STM32CubeMX生成初始化代码后集成FreeRTOS_ARM的完整流程如下添加FreeRTOS源码将FreeRTOS/Source/目录复制到工程添加portable/GCC/ARM_CM4F/及include/路径到编译器包含目录。配置FreeRTOSConfig.h#define configCPU_CLOCK_HZ (168000000UL) #define configTICK_RATE_HZ (1000UL) #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xF0 #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 0x10 #define configUSE_TIMERS 1 #define configUSE_MUTEXES 1修改main.c/* 在MX_GPIO_Init()后创建任务 */ osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128); osThreadCreate(osThread(defaultTask), NULL); /* 启动调度器 */ osKernelStart(); /* 此后永不返回 */ for(;;);关键链接脚本调整在STM32F407VGTx_FLASH.ld中确保_estack栈顶地址高于FreeRTOS任务栈分配区域避免栈溢出覆盖内核数据。4.2 FreeRTOS_ARM与HAL库的中断协同HAL库的HAL_UART_RxCpltCallback等回调函数运行在中断上下文需严格遵循FreeRTOS中断安全规则void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { BaseType_t xHigherPriorityTaskWoken pdFALSE; if(huart-Instance USART1) { /* 使用FromISR API传入xHigherPriorityTaskWoken */ xQueueSendFromISR(xUartRxQueue, rx_data, xHigherPriorityTaskWoken); /* 重新启动DMA接收 */ HAL_UART_Receive_DMA(huart, rx_buffer, RX_BUFFER_SIZE); } /* 强制上下文切换若需要 */ portYIELD_FROM_ISR(xHigherPriorityTaskWoken); }若错误地在回调中调用xQueueSend非FromISR版本将导致HardFault因为xQueueSend内部调用vTaskSuspendAll()而该函数在中断中禁用调度器会导致不可预测行为。4.3 Cortex-M23/M33 TrustZone集成在支持TrustZone的Cortex-M23/M33如LPC55S69上FreeRTOS_ARM可部署于Secure World通过TZ_SecureGate调用Non-Secure World的外设驱动。关键配置configRUN_FREERTOS_SECURE_ONLY 1仅在Secure World运行内核portUSING_MPU_WRAPPERS 1启用MPU包装器隔离Secure/Non-Secure内存在port.c中实现TZ_SecureGate调用桩通过SG指令跳转此模式下FreeRTOS_ARM作为可信执行环境TEE的实时内核管理安全任务如密钥派生、生物特征处理而传感器采集、网络协议栈等非安全任务运行于Non-Secure World通过标准化IPC通信。5. 调试与性能优化实战5.1 使用SEGGER SystemView分析任务行为SystemView是分析FreeRTOS_ARM运行时行为的黄金工具。需在FreeRTOSConfig.h中启用#define configUSE_TRACE_FACILITY 1 #define configUSE_STATS_FORMATTING_FUNCTIONS 1 #define INCLUDE_vTraceDumpStack 1并在main.c中初始化#include SEGGER_SYSVIEW.h #include SEGGER_SYSVIEW_FreeRTOS.h int main(void) { HAL_Init(); SystemClock_Config(); SEGGER_SYSVIEW_Conf(); SEGGER_SYSVIEW_Init(0x00000000, 0x00000000, SYSVIEW_X_OS_TraceAPI, NULL); SEGGER_SYSVIEW_Start(); // ... 创建任务 osKernelStart(); }SystemView可直观显示各任务的运行时间占比CPU Utilization任务切换、队列发送/接收、信号量获取/释放的精确时间戳中断服务程序的执行时长与嵌套深度内存堆heap_4的碎片化程度通过分析可快速定位“任务饥饿”某任务长期得不到CPU、“优先级反转”低优先级任务持有高优先级任务所需资源等问题。5.2 最小化RAM占用heap_4 vs heap_5FreeRTOS_ARM默认使用heap_4.c最佳适配算法但对RAM极度敏感的应用如Cortex-M0可选用heap_5.c进行显式内存分区/* 定义多个不连续内存块 */ static uint8_t ucHeap1[1024] __attribute__((section(.ram1))); static uint8_t ucHeap2[2048] __attribute__((section(.ram2))); /* 初始化heap_5 */ void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ) { *ppxIdleTaskTCBBuffer xIdleTaskTCB; *ppxIdleTaskStackBuffer ucHeap1; *pulIdleTaskStackSize configMINIMAL_STACK_SIZE; } /* 在main()中注册内存块 */ vPortDefineHeapRegions( xHeapRegions );heap_5允许将TCB、任务栈、内核对象分别放置于不同物理RAM区域如SRAM1、SRAM2、CCMRAM避免单一块内存因碎片化导致大内存分配失败是资源受限场景的终极优化手段。5.3 高可靠性设计看门狗协同在工业现场需防止单个任务卡死导致系统僵死。FreeRTOS_ARM提供vTaskSetApplicationTaskTag与xTaskCallApplicationTaskFunction实现看门狗协同/* 为每个任务设置唯一Tag */ void vTask1(void *pvParameters) { vTaskSetApplicationTaskTag(NULL, (TaskHookFunction_t)0x01); for(;;) { // 任务逻辑 vTaskDelay(100); } } /* 独立看门狗任务 */ void vWatchdogTask(void *pvParameters) { TickType_t xLastWakeTime xTaskGetTickCount(); for(;;) { vTaskDelayUntil(xLastWakeTime, 1000); // 每秒检查一次 // 遍历所有任务检查Tag是否更新 if (!isTaskAlive(0x01)) { HAL_NVIC_SystemReset(); // 复位 } } }此方案将看门狗逻辑与业务任务解耦即使某个任务因死循环或阻塞无法执行看门狗任务仍能检测并复位符合IEC 61508 SIL2功能安全要求。FreeRTOS_ARM的工程实践本质上是一场与ARM Cortex-M硬件特性的深度对话。从汇编层对PSP/MSP的精准操控到C层对BASEPRI寄存器的巧妙运用再到配置层对NVIC优先级分组的严丝合缝每一个细节都指向同一个目标在资源受限的硅片上构建出确定、可靠、可预测的实时行为。当工程师在portasm.s中写下第一行stmdb r0!, {r4-r11}他不仅是在保存寄存器更是在为整个系统的实时性奠基。

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