以江协科技STM32入门教程的方式打开FreeRTOS——STM32C8T6如何移植FreeRTOS - 教程

news/2025/10/17 13:04:32/文章来源:https://www.cnblogs.com/slgkaifa/p/19147573

以江协科技STM32入门教程的方式打开FreeRTOS——STM32C8T6如何移植FreeRTOS - 教程

本文介绍了FreeRTOS实时操作系统在STM32F103C8T6上的移植过程。相关文件建议从官网下载方便以后自己建立,当然也可以通过我的主页资源获取全套资源,或者在评论区留言,我会给你私发。

一、FreeRTOS 的基础作用

FreeRTOS 是一款轻量级的实时操作系统(RTOS),核心作用是帮助嵌入式系统实现多任务管理与实时调度,让多个任务能 “有序并发” 运行,解决传统 “大循环” 架构(单任务)的局限性。

举个例子:传统单任务系统中,如果你想同时实现 “按键检测”“LED 闪烁”“串口接收”,只能在一个死循环里轮流执行这三个功能,一旦某个功能(比如串口接收)耗时过长,其他功能就会卡顿。而有了 FreeRTOS,你可以把这三个功能拆分成三个 “任务”,RTOS 会像 “调度员” 一样,根据任务的优先级或时间片,合理分配 CPU 资源,让它们看起来像 “同时运行”,且能保证高优先级任务(比如紧急的串口数据处理)优先执行,这就是 “实时性” 的体现。

二、FreeRTOS 在 STM32F103C8T6 标准库移植的基本原理

移植的核心是让 FreeRTOS 能 “适配” STM32F103 的硬件环境,本质是解决三个问题:

  1. 任务上下文切换:当 RTOS 切换任务时,需要保存当前任务的 CPU 寄存器状态(比如 R0-R15、PSP 栈指针等),并恢复下一个任务的寄存器状态。这依赖于 ARM Cortex-M3 内核的特殊指令(如PendSV中断)和硬件机制。
  2. 系统时钟节拍(Tick):RTOS 需要一个周期性的 “心跳” 来触发任务调度(比如每 1ms 一次),通常用 STM32 的SysTick定时器实现,每次中断会更新系统时间并检查是否需要切换任务。
  3. 内存管理:FreeRTOS 创建任务、队列等对象时需要动态内存,移植时需适配 STM32 的 RAM(F103C8T6 有 64KB RAM),提供内存分配 / 释放的接口。

三、移植(针对 STM32F103C8T6 + 标准库)

准备模版

首先我们有一个江协科技的工程模版,然后我们要把里面的System中的Delay文件都删除掉(因为前面我们已经知道,FreeRTOS需要借助SysTick定时器实现,而江科大的Delay基于SysTick),之后我们的FreeRTOS相关文件都放在这个System文件夹,【标准库的delay_ms()是 “阻塞式空等”(会占用 CPU),改用 FreeRTOS 的vTaskDelay()(任务进入阻塞态,CPU 可执行其他任务)】

获取FreeRTOS

FreeRTOS的github官网

进入FreeRTOS-Kernel

FreeRTOS有多个版本这里以为我自己使用的10.4.3为例

下载ZIP并解压

移植源码

我们需要主目录下所有的.c文件,一共7个(摁住Ctrl逐个选中,然后复制到模版System文件夹)

把include文件夹也复制到System然后把这个readme格式的删掉

FreeRTOS 的源码中,portable文件夹包含了不同架构的适配代码,STM32F103 是 Cortex-M3 内核。我们自己在System文件建立一个portable文件夹,之后先把RVDS的ARM_CM3中的文件中的全复制过来。

内存与任务栈配置:选择堆大小heap_4.c,一般都用方案4,这种动态分配方式的。

把MemMang中的heap_4.c复制到我们的portable文件夹中。

接下来是重中之重的FreeRTOSConfig.h文件,这个文件需要我们自己搞,我这里提供一个我修改STM32Cubemx生成的HAL库用的FreeRTOSConfig.h的魔改版,对于不同型号的芯片需要进行不同的配置,这个是魔改版(所以可以忽略注释中的V10.3.1)

/* USER CODE BEGIN Header */
/** FreeRTOS Kernel V10.3.1* Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.** Permission is hereby granted, free of charge, to any person obtaining a copy of* this software and associated documentation files (the "Software"), to deal in* the Software without restriction, including without limitation the rights to* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of* the Software, and to permit persons to whom the Software is furnished to do so,* subject to the following conditions:** The above copyright notice and this permission notice shall be included in all* copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.** http://www.FreeRTOS.org* http://aws.amazon.com/freertos** 1 tab == 4 spaces!*/
/* USER CODE END Header */
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
/*-----------------------------------------------------------* Application specific definitions.** These definitions should be adjusted for your particular hardware and* application requirements.** These parameters and more are described within the 'configuration' section of the* FreeRTOS API documentation available on the FreeRTOS.org web site.** See http://www.freertos.org/a00110.html*----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* Section where include file can be added */
/* USER CODE END Includes */
/* Ensure definitions are only used by the compiler, and not by the assembler. */
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)#include extern uint32_t SystemCoreClock;
#endif
#ifndef CMSIS_device_header
#define CMSIS_device_header "stm32f1xx.h"
#endif /* CMSIS_device_header */
#define configUSE_PREEMPTION                     1
#define configSUPPORT_STATIC_ALLOCATION          0
#define configSUPPORT_DYNAMIC_ALLOCATION         1
#define configUSE_IDLE_HOOK                      0
#define configUSE_TICK_HOOK                      0
#define configCPU_CLOCK_HZ                       ( SystemCoreClock )
#define configTICK_RATE_HZ                       ((TickType_t)1000)
#define configMAX_PRIORITIES                     ( 56 )
#define configMINIMAL_STACK_SIZE                 ((uint16_t)128)
#define configTOTAL_HEAP_SIZE                    ((size_t)8192)
#define configMAX_TASK_NAME_LEN                  ( 16 )
#define configUSE_TRACE_FACILITY                 1
#define configUSE_16_BIT_TICKS                   0
#define configUSE_MUTEXES                        1
#define configQUEUE_REGISTRY_SIZE                8
#define configUSE_RECURSIVE_MUTEXES              1
#define configUSE_COUNTING_SEMAPHORES            1
#define configUSE_PORT_OPTIMISED_TASK_SELECTION  0
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES                    0
#define configMAX_CO_ROUTINE_PRIORITIES          ( 2 )
/* Software timer definitions. */
#define configUSE_TIMERS                         1
#define configTIMER_TASK_PRIORITY                ( 2 )
#define configTIMER_QUEUE_LENGTH                 10
#define configTIMER_TASK_STACK_DEPTH             256
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
#define INCLUDE_vTaskPrioritySet            1
#define INCLUDE_uxTaskPriorityGet           1
#define INCLUDE_vTaskDelete                 1
#define INCLUDE_vTaskCleanUpResources       0
#define INCLUDE_vTaskSuspend                1
#define INCLUDE_vTaskDelayUntil             1
#define INCLUDE_vTaskDelay                  1
#define INCLUDE_xTaskGetSchedulerState      1
#define INCLUDE_xTimerPendFunctionCall      1
#define INCLUDE_xQueueGetMutexHolder        1
#define INCLUDE_uxTaskGetStackHighWaterMark 1
#define INCLUDE_xTaskGetCurrentTaskHandle   1
#define INCLUDE_eTaskGetState               1
/** The CMSIS-RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used* by the application thus the correct define need to be enabled below*/
#define USE_FreeRTOS_HEAP_4
/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */#define configPRIO_BITS         __NVIC_PRIO_BITS
#else#define configPRIO_BITS         4
#endif
/* The lowest interrupt priority that can be used in a call to a "set priority"
function. */
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY   15
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
/* Interrupt priorities used by the kernel port layer itself.  These are generic
to all Cortex-M ports, and do not rely on any particular library functions. */
#define configKERNEL_INTERRUPT_PRIORITY 		( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
/* USER CODE BEGIN 1 */
#define configASSERT( x ) if ((x) == 0) {taskDISABLE_INTERRUPTS(); for( ;; );}
/* USER CODE END 1 */
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler    SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
/* IMPORTANT: After 10.3.1 update, Systick_Handler comes from NVIC (if SYS timebase = systick), otherwise from cmsis_os2.c */
#define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 0
/* USER CODE BEGIN Defines */
/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
/* USER CODE END Defines */
#endif /* FREERTOS_CONFIG_H */

以下是该FreeRTOSConfig.h主要设置项的精简对应(核心配置内容)【可以不看】:

  1. 中断优先级配置

    • 中断优先级位数:configPRIO_BITS = 4(对应 STM32 中断分组 4,抢占优先级 0~15)。
    • 内核中断(PendSV、SysTick)优先级:设为系统最低(逻辑值 15,映射为 NVIC 寄存器值 240)。
    • 允许调用 FreeRTOS API 的中断优先级上限:逻辑值 5(仅优先级 5~15 的中断可调用,0~4 禁止)。
  2. 任务与调度核心

    • 启用抢占式调度(configUSE_PREEMPTION = 1)。
    • 系统时钟:使用 STM32 实际主频(configCPU_CLOCK_HZ = SystemCoreClock)。
    • 系统节拍:1ms 一次(configTICK_RATE_HZ = 1000)。
    • 任务最大优先级:56 级(configMAX_PRIORITIES = 56)。
  3. 内存管理

    • 动态内存分配:启用(configSUPPORT_DYNAMIC_ALLOCATION = 1),禁用静态分配。
    • 堆大小:8KB(configTOTAL_HEAP_SIZE = 8192)。
    • 内存管理算法:使用heap_4.c(支持碎片整理)。
    • 最小任务栈:128 字(512 字节,configMINIMAL_STACK_SIZE = 128)。
  4. 功能开关

    • 启用软件定时器(configUSE_TIMERS = 1),定时器任务优先级 2,栈深度 256 字。
    • 启用常用 API:任务创建 / 删除、优先级调整、延时等(如INCLUDE_vTaskDelete = 1)。
    • 调试断言:出错时禁用中断并死循环(configASSERT配置)。
  5. 内核与硬件映射

    • 映射 FreeRTOS 内核中断到 STM32 标准中断名(如vPortSVCHandler对应SVC_Handler)。

6.系统时钟配置与 SysTick 适配

  1. 时钟频率:STM32F103 通常配置为 72MHz(外部晶振 + PLL),需在FreeRTOSConfig.h中定义configCPU_CLOCK_HZ = 72000000,确保 RTOS 计算时间正确。
  2. SysTick 定时器:FreeRTOS 默认用 SysTick 作为时钟节拍源,需保证其中断频率正确(比如configTICK_RATE_HZ = 1000即 1ms 一次中断)。注意:标准库中若已初始化过 SysTick,需禁用(或由 RTOS 接管),避免冲突。
keil操作

把文件都加进来

把System里面的include和portable加入编译

之后我们编译一下,一定会报错

把stm32f10x-it.c里面这三个Handler函数的弱定义都注释掉即可

测试

运行我给的示例程序

一下为main.c(LED是我自己写的,中间的FreeRTOS.h和task.c是我们移植的)

#include "stm32f10x.h"                  // Device header
#include "FreeRTOS.h"
#include "task.h"
#include "LED.h"
#define TASK1_PRIORITY    2       // 任务1优先级(数值越大优先级越高)
#define TASK2_PRIORITY    2       // 任务2优先级
void vTask1(void *pvParameters);  // 任务1:示例任务(低优先级)
void vTask2(void *pvParameters);  // 任务2:示例任务(高优先级)
void Hardware_Init(void)
{LED_Init();GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)1);
}
int main(void)
{Hardware_Init();// 创建任务BaseType_t xReturn1, xReturn2;xReturn1 = xTaskCreate(vTask1, "Task1", 128, NULL, TASK1_PRIORITY, NULL);xReturn2 = xTaskCreate(vTask2, "Task2", 128, NULL, TASK2_PRIORITY, NULL);// 检查任务创建结果if (xReturn1 != pdPASS || xReturn2 != pdPASS)
{// 任务创建失败,可通过LED闪烁提示(需单独配置)while (1){GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)!GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0));for(int i=0;i<1000000;i++); // 简单延时}
}// 启动FreeRTOS调度器(启动后任务开始运行)vTaskStartScheduler();// 若调度器启动成功,程序不会执行到这里// 若执行到这里,说明调度器启动失败(通常是内存不足)while (1);
}
void vTask1(void *pvParameters)
{while (1){GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);vTaskDelay(pdMS_TO_TICKS(1000));  // 延时1000ms(毫秒转FreeRTOS ticks)GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);vTaskDelay(pdMS_TO_TICKS(1000));  // 延时1000ms(毫秒转FreeRTOS ticks)}
}
void vTask2(void *pvParameters)
{while (1){GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)1);vTaskDelay(pdMS_TO_TICKS(1000));  // 延时500msGPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0);vTaskDelay(pdMS_TO_TICKS(1000));  // 延时500ms}
}

LED.c

#include "LED.h"
void LED_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);
}

LED.h

#ifndef __LED_H__
#define __LED_H__
#endif
#include "stm32f10x.h"                  // Device header
void LED_Init(void);

如果观察到那个LED能近乎同频闪烁则移植成功

总结

FreeRTOS 的核心是 “多任务实时调度”,移植到 STM32F103 的关键是让 RTOS 适配硬件的 “上下文切换”“时钟节拍” 和 “内存”,重点关注中断优先级、内存大小和配置文件的正确性。初学者可先从官方示例(或简化移植包)入手,逐步理解每个配置的作用,避免一开始陷入细节。这里面的很多东西是什么其实我也不知道

本文介绍了FreeRTOS实时操作系统在STM32F103C8T6上的移植过程。相关文件建议从官网下载方便以后自己建立,当然也可以通过我的主页资源获取全套资源,或者在评论区留言,我会给你私发。

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

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

相关文章

2025年陶瓷过滤板厂家推荐排行榜,白刚玉陶瓷过滤板,棕刚玉陶瓷过滤板,扇形陶瓷板,真空陶瓷过滤板,陶瓷滤膜,陶瓷过滤机配件公司推荐

2025年陶瓷过滤板厂家推荐排行榜:白刚玉、棕刚玉、扇形陶瓷板专业解析行业背景与发展现状在工业生产过程中,固液分离技术一直是关键环节,而陶瓷过滤板作为核心过滤材料,其性能直接影响生产效率和产品质量。随着环保…

springboot结合阿里巴巴easyexcel,实现一键把Excel数据导入数据库

技术说明: springboot:2.1.4.RELEASE jQuery Ajax mysql:8.0.32 作业背景 我现在有个Excel表,里面有1000行数据,我不可能一个个录入数据库的,必须使用一键导入Excel,实现全部自动导入数据库。接下来就是实现这个…

2025年10月长白山度假酒店推荐:民俗与国际品质兼得

在选择长白山度假酒店时,关键在于找到最适合自身实际需求的解决方案。中国旅游研究院《2024年四季度冰雪旅游满意度调研》显示,长白山区域酒店整体用户满意度达87.4%,其中“文化体验深度”与“服务响应时效”成为游…

2025年10月长白山度假酒店推荐:民俗与国际范兼得

在选择长白山度假酒店时,关键在于找到最适合自身实际需求的解决方案。中国旅游研究院《2024冰雪旅游用户满意度调研》显示,长白山区域度假酒店整体满意度为82.7%,其中“文化体验深度”与“服务响应效率”成为游客复…

2025年10月访客系统推荐:五强榜单与选型要点

在选择访客系统时,关键在于找到最适合自身实际需求的解决方案。中国安全防范产品行业协会2024年度《出入口控制与管理设备应用现状报告》显示,2023年国内访客管理软硬件市场规模已达47.6亿元,同比增长18.4%;其中Sa…

2025年工业设备安装厂家权威推荐榜:管道/电气/暖通空调/空压系统/纯水系统/厂房通风/车间配电/机械设备专业安装服务全景解析

2025年工业设备安装厂家权威推荐榜:管道/电气/暖通空调/空压系统/纯水系统/厂房通风/车间配电/机械设备专业安装服务全景解析随着我国制造业向高质量发展转型,工业设备安装行业作为支撑制造业基础设施建设的核心环节…

实习内推】机器人操作系统Dora-rs团队招募实习生(北京)

岗位: AI机器人开发实习生 地点: 北京市海淀区五道口 关于我们: Dora-rs是一个新兴的机器人开发平台,致力于解决传统机器人系统(如ROS)在面对现代AI应用时的性能瓶颈和集成难题。我们以Rust语言为核心,追求极致…

2025 上海财税服务机构优选榜:上海注册公司与代理记账领域靠谱服务商推荐

随着金税四期全面落地与企业数字化转型加速,上海企业对专业财税服务的需求持续攀升,注册公司代办、代理记账等服务已成为初创及成长型企业的刚需。2025 年上海日均新设企业突破 400 家,其中 85% 的企业选择委托专业…

实训题

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from multiprocessing import freeze_support import sys def load_data(): tran…

GoodSync 2025年10月17日

GoodSync 2025年10月17日https://www.autoahk.com/archives/53171www.cnblogs.com/delphixx

书本p66实训题第2题

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt import numpy as np 数据预处理 transform = t…

2025全屋定制厂家推荐:聚焦异形空间+特色色系,森佰特木业领衔优质之选

伴随家居个性化需求的持续升级,2025 年全屋定制市场不再局限于基础款式,而是朝着 “精准适配空间”“特色风格表达” 方向发展,异形空间全屋定制“莫兰迪色系全屋定制”“现代风全屋定制” 等细分需求显著增长。然而…

springboot 上传图片到服务器之后,前段不能正确加载图片问题

技术说明: springboot:2.1.4.RELEASE jQuery Ajax mysql:8.0.32 问题描述: springboot打成jar包,上传到服务器之后,在同目录下,又创建了一个upload目录,用来储存照片,但是前端引用url路径之后不能显示图片 问…

springboot 设置文件上传大小

技术说明: springboot:2.1.4.RELEASE jQuery Ajax mysql:8.0.32 问题描述: 上传文件一直报错,提示这问题,在yml配置了也没有用,后来发现问题了#文件上传servlet:multipart:# 设置单个文件最大内存max-file-size…

【光照】UnityURP[屏幕空间环境光遮蔽SSAO]原理剖析实践

本文探讨Unity URP中屏幕空间环境光遮蔽(SSAO)技术的实现。SSAO通过计算像素周围几何体的遮挡关系增强场景真实感,其发展经历了传统算法、优化改进和URP集成三个阶段。核心技术包括深度纹理采样、法线重建、遮蔽计算和…

Ai元人文:讨论一种新的决策科学

Ai元人文:讨论一种新的决策科学 岐金兰: 其实,问题的根源是人们狭隘的偏见, 更是,人们在工程化“价值”时忘记了, 或者是,有意无意地在回避, 在现实中,面对价值冲突时的真实场景和解决方法。 而且,在我们的构…

2025年流量计厂家权威推荐榜单:热式/模拟式/数字式/高压/高温/耐腐蚀/多气体/4-20mA/RS485/分体式/不锈钢高精度流量计公司精选

2025年流量计厂家权威推荐榜单:热式/模拟式/数字式/高压/高温/耐腐蚀/多气体/4-20mA/RS485/分体式/不锈钢高精度流量计公司精选在工业自动化与过程控制领域,流量计作为关键测量设备,其性能直接影响生产效率和产品质…

深入解析:云原生时代的数据流高速公路:深入解剖Apache Pulsar的架构设计哲学

深入解析:云原生时代的数据流高速公路:深入解剖Apache Pulsar的架构设计哲学pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

DeepResearch代码浅析

DeepResearch代码浅析 概述 代码:DeepResearch 主要看一下inference下面的ReAct推理流程。 inference ├── eval_data │ ├── example_with_file.jsonl │ ├── example.jsonl │ └── file_corpus │…

2025年连铸机厂家权威推荐榜单:扇形段/大包回转台/钢包中间罐/结晶器总成/拉矫机/引锭杆/输送辊道/液压剪等核心部件专业供应商

2025年连铸机厂家权威推荐榜单:扇形段/大包回转台/钢包中间罐/结晶器总成/拉矫机/引锭杆/输送辊道/液压剪等核心部件专业供应商在钢铁工业持续转型升级的背景下,连铸机作为钢铁生产流程中的关键设备,其性能直接影响…