基于 STM32+FPGA 的通用工业控制器设计(一)系统方案设计

本章首先介绍了现有 PLC 系统的概况,然后提出了本文设计的通用工业控制器的
整体方案架构,分析了硬件和软件上需要实现的功能,最后对各部分功能进行分析并提
出具体的实现方案。
2.1 PLC 系统简介
可编程逻辑控制器( Programmable Logic Controller PLC )是以微处理器为基础,
综合了计算机技术、自动控制技术和通讯技术而发展起来的一种新型、通用的自动控制
装置 [14] 。它采用一类可编程的存储器,用于其内部存储程序、执行逻辑运算、顺序控制、
定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入 / 输出控制各种类型
的机械或生产过程,是工业控制的核心部分 [15]
西门子 S7-200 系列的 PLC 就是整体式 PLC ,图 2-4 是其中一款 PLC 基本单元内部
结构图,其结构由三部分组成:上面部分是核心板即 CPU ,其中包含拨码开关、扩展单
元接口;中间部分是接口板,包括 I/O 接口、 RS485 通讯接口、 220V 交流电源输入接口、
24V 直流电源输出接口等;下面部分是开关电源板, 220V 交流输入,24V 直流输出。

2.1.3 PLC 的软件系统
PLC 的软件包括系统程序和用户程序。系统程序是固化在中央处理器芯片内部的的
程序,用户不能直接对其进行更改操作,系统程序包含异常状态的检测、 I/O 单元的操
作、用户程序的执行、与外界的通信等功能。用户程序是用户使用与 PLC 控制器配套
的开发软件所开发的程序,最常用的开发语言为梯形图语言( LD ),此外还有指令表语
言( IL )、功能模块图语言( FBD )、顺序功能流程图语言( SFC )、结构化文本语言( ST )。
对于用户来讲,不必详细了解系统程序,只需根据实际生产需求编写用户程序,实现逻
辑控制即可 [28]
在编辑梯形图时会经常用到许多现成的功能块,如定时器模块、计数器模块、高速
计数器模块、模拟量输入模块、模拟量输出模块、 PID 模块、通信模块等功能块,这些
功能块的实现过程都包含在系统程序内,用户程序在使用这些功能块时只是调用了这些
实现过程 [29]
2.2 整体方案架构
本文采用整体式 PLC 结构,如图 2-7 所示,整体结构分为主控制器和远程模块,主
控制器由核心板、接口板、开关电源构成,集成中央处理单元( CPU )、 I/O 单元、电源
于一体。远程模块作为扩展模块,作用于面积大、范围广的工业现场,以便主控制器需
要控制距离较远的现场设备,同时能够为主控制器增加 I/O 点数,使控制器能够向大型
化、多功能方向靠拢。远程模块主要包括数字量输入模块( DI )、数字量输出模块( DO )、
模拟量输入模块( AI )、模拟量输出模块( AO )和以太网通信模块( EN ),其中以太网
通信模块主要负责与主控制器通信,将各个远程模块的状态与数据发送给主控制器以及
接收主控制器发来的控制命令。

本文设计的控制器主要实现以下结构和功能:
硬件方面:硬件 PCB 板需包含核心板、接口板、开关电源、以太网通信模块、数
字量输入模块、数字量输出模块、模拟量输入模块、模拟量输出模块。接口板上需要包
含数字量输入输出接口、模拟量输入输出接口、数字量高速输入输出接口、高速 USB
通信接口、 RS485 通信接口、以太网通信接口等。
软件方面: modbus 通信协议,作为主控制器与远程模块通信时的数据协议;远程
模块内部通信协议,作为各个远程模块之间通信时的数据协议。设计模块化控制功能,
包括工业现场经常使用到的运动控制和过程控制,同时会用到 PID 控制算法,如果需要
驱动变频器或者逆变器,还会需要用到 SPWM 算法、 SVPWM 算法。设计高速计数器
模块,用于采集旋转编码器之类的传感器信号。设计人机交互界面,便于现场工人操作
控制器。设计用户程序的编程语言,作为人类自然语言与底层芯片编程语言之间的桥梁,
方便没有任何编程语言基础的普通工人进行现场编程和测试工作。
2.3 主控制器方案设计
主控制器的总体方案设计如图 2-8 所示,分为核心板、接口板、开关电源。
信迈提供STM32+FPGA的运动控制解决方案。
主控制器几乎所有的对外接口都设计在接口板上,只有连接本地扩展模块的接口设
计在核心板上。 由于主控制器的体积有限,因此所包含的接口数量、 I/O 点数有限,如
需更多的 I/O 点数需要以太网接口连接远程模块来使用。主控制器上对外接口包含 16
路数字量输入接口、 16 路数字量输出接口(继电器输出)、 8 路数字量高速输出接口(晶
体管输出)、 220V 交流电源输入接口、 24V 直流电源输出接口、高速 USB 通信接口、
RS485 通信接口、以太网通信接口。在主控制器内部,开关电源与接口板相连,接口板
将从外界输入进来的 220V 交流电源输入到开关电源板,然后经过开关电源后会得到稳
定的 24V 直流电源。接口板与核心板相连,一是将 24V 经过 DC/DC 降压后得到的 5V
电源传递到核心板,二是与核心板上的控制芯片进行 I/O 信号的传递以及串口通信。
2.3.1 核心板方案设计
核心板的硬件结构包括控制芯片电路、下载电路、晶振电路、复位电路、芯片电源
电路、 RS485 通信电路、状态选择电路、状态指示电路、 I/O 指示电路、电平转换电路
等。
控制芯片采用目前较为流行的“ MCU+FPGA ”的方式进行控制 [32] MCU 是微控制
单元( Micro Controller Unit ),又称单片微型计算机或单片机,是将中央处理器、内存、
计数器、 USB A/D 转换、 UART PWM DMA 等周边接口集成到一片芯片上,形成
芯片级计算机,应用于手机、遥控器、汽车、机械臂等控制领域。 FPGA 是现场可编程
门阵列( Field Programmable Gate Array ),它是专用集成电路中的一种半定制电路,通
过编程对底层逻辑门阵列进行组合,从而实现内部各模块之间以及 I/O 之间的连接方式。
FPGA 具有以下优点:并行度高,可以支持多个模块同时进行独立的计算;可定制,即
通过编程实现自己的逻辑电路,并且可以无限次编程;运算速度快,通常情况下任务在
硬件上跑比软件上跑得要快,比如比较一个 64 位数高 32 位和低 32 位的大小,在 CPU
下需要 2 条区数指令,两条位与指令,一条移位指令一条比较指令和一条写回指令,而
FPGA 下只要一个比较器就行了。 FPGA 同时也存在着缺点,所有功能均依靠硬件实
现,无法实现分支条件跳转等操作,同时诸如 A/D 转换、 flash 等外设很少,这正好能
够靠 MCU 来弥补。因此本文利用 MCU FPGA 组合的方式,能够最大的发挥两者各
自的优势 [33]
MCU 选择意法半导体集团开发的 32 STM32 微控制器,该芯片是基于 ARM
Cortex-M 处理器内核的嵌入式单片机,有着集成度高、低功耗等特点。 FPGA 选择
ALTERA Cyclone IV 系列芯片,该系列芯片在 Cyclone CycloneII CycloneIII 的基
础上提升了性能并降低成本。 STM32 利用其自身丰富的外设作为主控芯片,使用 UART
与外界通信; FPGA 利用运算速度快、并发性好的特点,对 I/O 信号进行处理。 STM32
FPGA 之间的通信方式有串行通信、并行通信以及共用存储器通信。串行通信所需引
脚少,但是速率没有另外两种通信方式快;共用存储器通信方式在硬件线路上较为复杂,
一般用在数据交换量较大的场合,用在这里有点大材小用;并行通信虽然占用引脚较多,
但是通信效率高 [34] 。综合来看选择并行通信方式。
电源电路需要根据控制芯片所需电压来决定,核心板上选择的控制芯片 STM32
具体型号为 STM32F103ZET6 ,工作电压为 3.3V FPGA 的具体型号是 EP4CE6E22C8
工作电压为 3.3V 2.5V 1.2V
STM32 的下载方式包括 SWD JTAG 方式, SWD 模式比 JTAG 在高速模式下面更
加可靠,在大数据量的情况下面 JTAG 下载程序会失败,但是 SWD 发生的几率会小很
多,并且 SWD 需要的引脚数量少,可以节省 PCB 空间。 STM32 虽然有 8MHz 内部晶
振,但是精度没有外部配置的高速晶振精度高。外部晶振有高速晶振和低速晶振两种,
典型的低速晶振为 32.768KHz ,高速晶振可选择 4~32MHz ,然后可以经过锁相环设置将
主频升至 72MHz 。核心板上需要预留的扩展模块接口用于连接多个扩展模块,而与扩
展模块之间的通信方式这里选择 RS485 通信,因为 RS485 支持一主多从模式。同时
STM32 周围需要设计状态选择电路和状态指示电路,状态选择电路是用拨码开关作为
STM32 的引脚输入,状态指示电路是用 LED 作为 STM32 的引脚输出。
FPGA 没有片内 flash ,因此 FPGA 的程序需要存储到片外 flash 中,这里选择
EPCS4SI8N 作为 FPGA 的片外 flash FPGA 的下载方式有 JTAG 模式、 AS 模式和 PS
模式。 AS 模式是将程序烧入到配置芯片 EPCS 中, FPGA 每次上电时,作为控制器从配
置芯片 EPCS 中读取数据; PS 模式是将 EPCS 作为控制器件,将 FPGA 作为存储器, FPGA
上电时, EPCS 会主动将数据写入到 FPGA 中,此模式可以实现对 FPGA 的在线编程;
JTAG 模式是最常用的一种模式,直接把程序烧录到 FPGA SRAM 中,所以掉电后程
序会消失。 FPGA 在正常工作时,它的配置数据存储在 SRAM 中,加电时须重新下载。
在实验系统中,通常用计算机或控制器进行调试,因此可以使用 PS 。但是在实用系统
中,多数情况下必须由 FPGA 主动引导配置操作过程,这时 FPGA 将主动从外围专用存
储芯片中获得配置数据,而此芯片中 FPGA 配置信息是用普通编程器将设计所得的 .pof
格式的文件通过 AS 烧录进去。通过 JTAG 模式烧录 .sof 文件会将程序烧录到 SRAM 中,
但是通过文件转换,将 .sof 文件转换成 .jic 文件,通过 JTAG 模式烧录会将程序通过 FPGA
固化到配置芯片 EPCS 中,这样 FPGA 重新上电是会从 EPCS 中读取程序。本文最终考
虑到调试的方便性,所以选择了 JTAG 模式。
FPGA 的主频需要用到外部晶振, STM32 内部有晶振的起振电路故可以用无源晶振,
FPGA 没有,所以 FPGA 外部只能接有源晶振,这里选择 50MHz 作为 FPGA 时钟源,
通过锁相环的倍频后可以得到高达 300MHz 的时钟。
FPGA 的引脚既可以配置为输入模式,也可以配置为输出模式,都是 3.3VTTL 信号,
FPGA 输入输出引脚直接控制 LED ,作为 I/O 指示灯,共 40 个, 16 个输入点、 16 个输
出点、 8 个高速输出点。核心板与接口板通过接插件接在一起,用来传递 I/O 点数据信
号,在 FPGA 与接插件之间还要接入电平转换芯片,在 3.3VTTL 信号与 5VTTL 信号之
间转换,并且电平转换芯片能够起到保护作用,避免 FPGA 引脚直接与外部连接 [35]
2.3.2 接口板方案设计
接口板的硬件结构包括光耦输入电路、继电器输出电路、晶体管输出电路、 RS485
通信电路、 USB 通信电路、以太网通信模块、 DC/DC 降压电路、与核心板和电源板的
接口电路等。
光耦输入电路用于对外部开关量信号的输入,一般 PLC 的输入模块由若干输入点
和一个公共端组成。如图 2-9 a) b) PLC 直流输入电路的两种不同形式,区别在于
当外部开关闭合时, a) 中的电流从公共端 M 流出 PLC (源型输入), b) 中的电流从公共
M 流入 PLC (漏型输入)。当开关闭合时, PLC 内部光耦的发光二极管点亮,光敏三
极管饱和导通,再将该信号传送至中央处理器,认为有输入信号。 c) d) 分别是 a) b)
的多路信号结构。为了适应更多的现场设备,本文使用 e) 所示的混合型输入电路,光耦
选择双向输入型光耦,外部接线形式既能源型输入也能漏型输入。

2.5 软件方案设计
2.5.1 嵌入式操作系统
虽然嵌入式应用程序能够在芯片上直接运行,但是为了能够更加合理的调用多任务、
充分利用系统资源,本文采用在 STM32 上移植嵌入式操作系统的方案。目前常用的嵌
入式操作系统有 μClinux μC/OS-II eCos FreeRTOS
μClinux micro-control Linux )是微控制 Linux ,同标准 Linux 相比, μClinux 内核
小,但仍然继承了 Linux 良好的稳定性、可移植性,并具有强大的网络功能、出色的文
件系统、标准丰富的 API 以及 TCP/IP 网络协议等。在移植方面,由于 μClinux Linux
针对嵌入式系统的一种改良,所以其结构比较复杂,目标处理器需要足够容量的外部
ROM RAM ,对于 STM32F103 来说,移植此系统需要至少 512KB RAM 空间, 1MB
ROM/FLASH 空间,而 STM32F103 仅有 256KB FLASH ,所以需要外接存储器,
这就增加了硬件成本。并且 μClinux 结构复杂,移植难度大,实时性也差,不适合作为
本系统的移植方案。
μC/OS-II 是用 C 语言编写的一个结构小巧、抢占式的多任务实时内核。 μC/OS-II
最多支持 64 个任务,分别对应优先级 0~63 ,其中 0 代表优先级最高, 63 为最低,系统
保留了 4 个最高优先级和 4 个最低优先级,所以用户可以使用的任务数有 56 个。
μC/OS-II
能够提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,
具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。在移植方面, μC/OS-II
支持当前流行的大部分 CPU ,由于其本身内核小,最小代码仅有 2KB ,需要数据空间
仅有 4KB RAM ,所以移植相对简单,只需要修改与处理器相关的代码即可,比较适
合在本系统上移植。
eCos embedded Configurable operating system )是嵌入式可配置操作系统,是一种
源代码开元的能够配置、可移植、面向深度嵌入式应用的实时操作系统。其最大的特点
就是内核可配置,采用模块化的设计方式带来的灵活的配置,核心部分由小同的组件构
成,通过 eCos 配置工具能够方便的配置内核、 C 语言库和底层运行包等组件,能够很
好的满足不同嵌入式应用需求。在移植方面, eCos 内核小,最小代码仅有 10KB ,所需
数据空间仅有 10KB RAM ,可移植性好,比 μClinux μC/OS-II 都更加容易,但是
其应用并不广泛,资料没有 μC/OS-II 多,更适用于例如消费电子领域中的应用。
FreeRTOS 是一款完全免费并能够在小 RAM 单片机上运行的实时操作系统,具有源
代码开元、可移植性强、可裁剪、调度策略灵活等特点。 FreeRTOS 操作系统能够完成
任务管理、时间管理、信号量、消息队列、内存管理、记录等功能,可以满足一个最小
操作系统的基本需求。在移植方面, FreeRTOS 能够方便的移植到不同处理器上,例如
ARM MSP430 PIC AVR C8051F 等, STM32 的内核就是 ARM ,所以 FreeRTOS
适合本系统移植,也是本文所采用嵌入式操作系统。
2.5.2 软件系统
软件系统由系统程序和用户程序组成。系统程序是固化在控制芯片中的程序,本控
制器由主控制器和远程模块构成,主控制器上有 STM32 FPGA 两个控制芯片, 5
远程模块为实现各自功能分别有一个 STM32 作为控制芯片,因此需要设计 7 套不同的
系统程序,编程语言包含 STM32 所需的 C 语言和 FPGA 所需的 Verilog HDL 语言。用
户程序的编辑本文设计了两套方案,一是设计一款 PC 端编程软件,通过 USB 端口下载
到主控制器 STM32 上的 flash 中,另一种是现场编程功能,即通过人机交互界面,利用
关键词让没有编程基础的普通用户能够编写简单的测试程序,方便现场调试 [36][37]
2.5.3 模块化功能
本文设计了模块化功能,运动控制和过程控制。运动控制经常用于机械、机床、机
器人、电梯控制等场合,用于驱动步进电机、伺服电机或交流电动机,此时需要控制器
产生相应的驱动信号,如驱动异步交流电动机需要用 SPWM SVPWM 算法,同时运动
控制还会经常用到编码器来测量速度和位置,本文在软件上设计高数计数器功能。过程
控制经常用于冶金、化工、锅炉控制等场合,用于对温度、压力、流量等模拟量的闭环
控制,此时需要控制器实现 PID 算法。
2.5.4 通信协议
各个 PLC 厂商一般都有自己的通信协议,比如罗克韦尔的 PLC 都支持 DF1 协议,
GE 90-70 90-30 系列 PLC 支持 SNP 协议,西门子 S-200 系列 PLC 支持 MPI PPI
等协议,施耐德 PLC 支持 Modbus Modbus Plus 协议,欧姆龙 PLC 支持 Host Link
议,三菱 PLC 支持 CC-Link 协议,松下 PLC 支持 MEWTOCOL-COM 协议。这其中Modbus
已经不仅仅是 PLC 的通信协议,在许多智能仪表、变频器中也有应用,已经在工控领
域中得到广泛的应用 [38] 。本文选择 Modbus 作为主控制器与远程模块之间通信的数据协
议,上述的协议中 MEWTOCOL-COM 协议对外开放且简单,本文在其基础上做些更改
作为 RMEN I/O 模块之间通信的数据协议,后称为 RM-COM 协议。

信迈提供STM32+FPGA的运动控制解决方案。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ, Dashboard, 控制台安装

文章说明 本文主要说明RocketMQ的控制台(Dashboard)的安装过程。工作中一直用的是别人装好的,这次终于自己亲手装了一遍。 由于每次都要启动三个应用,比较烦,于是我写了一键启动脚本,分享给大家。这个脚本…

7. Spring Boot 配置文件

目录 1. 配置文件作用 2. 配置文件格式 3. properties 配置文件说明 3.1 properties 基本语法 3.2 读取配置文件 3.3 缺点 4. yml 配置文件说明 4.1 properties 基本语法 4.2 读取配置文件 4.3 yml 配置不同的数据类型 布尔值 整数值 null 值 配置对象 配置集合 …

国产化 | 记一次基于达梦创建数据库模式思考过程

开篇 首先,我们先来了解一下达梦数据库中用户与模式的概念,以及用户与模式之间的关系。 用户:主要是用来登录连接数据库,以及操作数据库对象等等。 模式:数据库中相关对象的集合。 关系:用户&#xff0…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)六:后台主页功能实现下

一、本章内容 接上一章,继续实现后端主页内容,主要实现工具栏对应相关内容的实现,包括系统消息、系统公告、全屏切换、语言切换、主题切换等。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 基于VUE3+Layui从头搭建通用后台管理系统合集…

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据

在我之前的文章: Elasticsearch:如何使用 Elasticsearch ingest 节点来丰富日志和指标 Elasticsearch:enrich processor (7.5发行版新功能) 我有详细描述如何使用 ingest pipeline 来丰富数据。在今天的文章中里&am…

【已解决】 Celery 报错:AttributeError: ‘EntryPoints‘ object has no attribute ‘get‘

【已解决】 Celery 报错:AttributeError: EntryPoints object has no attribute get 1、起因2、实验环境3、解决方案 1、起因 今天闲来无事学习 Celery 分布式任务队列,写好代码发布并执行,报错了 AttributeError: EntryPoints object has n…

【数据结构】实验七:字符串

实验七 字符串实验报告 一、实验目的与要求 1)巩固对串的理解; 2)掌握串的基本操作实现; 3)掌握 BF 和 KMP 算法思想。 二、实验内容 1. 给定一个字符串ababcabcdabcde和一个子串abcd,查找字串是否在主串中出现。…

Oracle 多条记录根据某个字段获取相邻两条数据间的间隔天数,小于31天的记录都筛选出来

需求描述:在Oracle中 住院记录记录表为v_hospitalRecords,表中FIHDATE入院时间,FBIHID是住院号, 我想查询出每个患者在他们的所有住院记录中是否在一个月内再次入院(相邻的两条记录进行比较),并且住院记录大于一的患者…

【高分论文密码】大尺度空间模拟预测与数字制图教程

详情点击链接:【高分论文密码】大尺度空间模拟预测与数字制图 一,R语言空间数据及数据挖掘关键技术 1、R语言空间数据及应用特点 1)R语言基础与数据科学 2)R空间矢量数据 3)R栅格数据 2、R语言空间数据挖掘关键技术 二,R语言空间数据高…

ChatGPT有几个版本,哪个版本最强,如何选择适合自己的?

​ChatGPT就像内容生产界的瑞士军刀。它可以是数学导师、治疗师、职业顾问、编程助手,甚至是旅行指南。只要你知道如何让它做你想做的事,ChatGPT几乎可以提供你要的任何东西。 但重要的是,你知道哪个版本的ChatGPT最能满足你的需求吗&#x…

C++容器——list的模拟实现

目录 一.list的基本结构 二. 接下来就是对list类构造函数的设计了: 三.链表数据的增加: 四.接下来就是迭代器的创建了: 四.简单函数的实现: 五.构造与析构 六.拷贝构造和赋值重载 传统写法: 现代写法: 七.迭…

运维高级--shell脚本完成分库分表

为什么要进行分库分表 随着系统的运行,存储的数据量会越来越大,系统的访问的压力也会随之增大,如果一个库中的表数据超过了一定的数量,比如说MySQL中的表数据达到千万级别,就需要考虑进行分库分表; 其…

基于拉格朗日-遗传算法的最优分布式能源DG选址与定容(Matlab代码实现)

目录 1 概述 2 数学模型 2.1 问题表述 2.2 DG的最佳位置和容量(解析法) 2.3 使用 GA 进行最佳功率因数确定和 DG 分配 3 仿真结果与讨论 3.1 33 节点测试配电系统的仿真 3.2 69 节点测试配电系统仿真 4 结论 1 概述 为了使系统网损达到最低值&a…

Paragon NTFS2023最新版Mac读写NTFS磁盘工具

Paragon NTFS for Mac是Mac平台上一款非常优秀的读写工具,可以在Mac OS X中完全读写、修改、访问NTFS硬盘、U盘等外接设备的文件。这款软件最大的亮点简书可以让我们读写 NTFS 分区,因为在Mac OS X 系统上,默认状态下我们只能读取NTFS 分区&a…

【Ubuntu18.04免密码登录SSH】

Ubuntu18.04免密码登录SSH 1 查看Ubuntu18.04系统中是否存在SSH服务2 配置SSH2.1 先删除一下ssh的目录,重新配置2.2 生存公钥和私钥2.3 将公钥上传到需要登录的服务器2.4 测试登录 1 查看Ubuntu18.04系统中是否存在SSH服务 sudo ps -e |grep ssh没有的话&#xff0…

网络安全(黑客)自学基础到高阶路线

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

[JavaWeb]MySQL的安装与介绍

MySQL的安装与介绍 一.数据库相关概念1.1 数据库1.2 常见的关系型数据库管理系统 二.MySQL数据库1.MySQL的安装2.配置环境变量3.新建MySQL配置文件4.初始化MySQL5.注册MySQL的服务6.修改默认账户与密码7.连接MySQL服务8.MySQL的卸载 三.MySQL的数据模型1.关系型数据库 一.数据库…

Gitlab 备份与恢复

备份 1、备份数据(手动备份) gitlab-rake gitlab:backup:create2、备份数据(定时任务备份) [rootlocalhost ]# crontab -l 00 1 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 说明:每天凌晨1点备份数据…

C++之lambda表达式/function/using/typedef用法总结(一百六十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…