当前位置: 首页 > article >正文

嵌入式ARM RISCV toolchain工具 梳理arm-none-eabi-gcc

嵌入式TOOLchain工具 梳理

简介

本文总结和梳理一下一些toolchain的规则和原理,方便后续跨平台的时候,给大家使用toolchain做一个参考。

解释如何理解arm-none-eabi-gcc等含义,以及如何一看就知道该用什么编译器。

当然如果有哪里写的不是很正确的,欢迎评论区纠正,大家讨论讨论看看自己用的编译器什么含义。

toolchain命名规则

首先我们根据最熟悉的arm-none-eabi-gcc 来理解命名规则,最后的gcc是工具,可能是gdb啥其他的,前面的

命名规则为:arch [-vendor] [-os] [-(gnu)eabi]

  • arch - 体系架构,如ARM,MIPS
  • vendor - 工具链提供商(这里如果没有厂商名称常用的是none和Unkonwn)
  • os - 目标操作系统(这里可能是linux,或者其他OS平台等)
  • eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface)

仔细看这个命名规则,可以看到中间的os其实是可选项

第一个参数是arch架构,具体有哪些待会介绍。

第二个参数是vendor 这个具体厂商自己编译的toolchain 我们就不讲了,一般很多小公司会自己定义toolchain,

重点介绍常见的noneunknown

  • none: 通常指特别指明没有特定厂商, 通用的编译器
  • unknown: 这里表示目标平台的 操作系统未知没有特定的操作系统 这个是代码中的默认指,应该是即可能指没有os,也可能指没有厂商(很多可能自己编译,没有设置特定的值,就是该值)

例如:arm-linux-gnueabi-gcc

看这个参数就带了linux的参数代表基于linux平台的编译器,通常用来编译liunx操作系统相关的bin。

GCC源码

所有这些呢都来自于GCC源码:

https://gcc.gnu.org/git/gcc.git

我们来看下arm-none-eabi-gcc

官网

https://developer.arm.com/downloads/-/gnu-rm

官网中有介绍

Features:
All GCC 10.3 features.

在这里插入图片描述

所以大概率是基于10.3.0 的版本进行编译

另外从要下载的内容中可以看到最后一个参数是平台的相关参数,代表你要在windows上跑exe还是在linux上跑非exe的包,这里你要知道你的操作系统,windows只要下载win32即可。linux根据笔记本或者电脑芯片是ARM的还是x86的选择对应的,macos也有。
在这里插入图片描述

我们下载执行一下-v命令

这里有很多内容,具体哪里是我们需要参考的呢,这里有很多,大都是在用gcc编译的时候的参数
在这里插入图片描述

Configured
with:
/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/src/gcc/configure
--build=x86_64-linux-gnu
--host=i686-w64-mingw32
--target=arm-none-eabi
--prefix=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/install-mingw
--libexecdir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/install-mingw/lib
--infodir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/install-mingw/share/doc/gcc-arm-none-eabi/info
--mandir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/install-mingw/share/doc/gcc-arm-none-eabi/man
--htmldir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/install-mingw/share/doc/gcc-arm-none-eabi/html
--pdfdir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/install-mingw/share/doc/gcc-arm-none-eabi/pdf
--enable-languages=c,c++
--enable-mingw-wildcard
--disable-decimal-float
--disable-libffi
--disable-libgomp
--disable-libmudflap
--disable-libquadmath
--disable-libssp
--disable-libstdcxx-pch
--disable-nls
--disable-shared
--disable-threads
--disable-tls
--with-gnu-as
--with-gnu-ld
--with-headers=yes
--with-newlib
--with-python-dir=share/gcc-arm-none-eabi
--with-sysroot=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/install-mingw/arm-none-eabi
--with-libiconv-prefix=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/build-mingw/host-libs/usr
--with-gmp=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/build-mingw/host-libs/usr
--with-mpfr=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/build-mingw/host-libs/usr
--with-mpc=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/build-mingw/host-libs/usr
--with-isl=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/build-mingw/host-libs/usr
--with-libelf=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-338_20211018_1634516203/build-mingw/host-libs/usr
--with-host-libstdcxx='-static-libgcc
-Wl,-Bstatic,-lstdc++,-Bdynamic
-lm'
--with-pkgversion='GNU
Arm
Embedded
Toolchain
10.3-2021.10'
--with-multilib-list=rmprofile,aprofile

我们用命令arm-none-eabi-gcc -march=?

结果如下

arm-none-eabi-gcc: error: unrecognized -march target: ?
arm-none-eabi-gcc: note: valid arguments are: armv4 armv4t armv5t armv5te armv5tej armv6 armv6j armv6k armv6z armv6kz armv6zk armv6t2 armv6-m armv6s-m armv7 armv7-a armv7ve armv7-r armv7-m armv7e-m armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a armv8.5-a armv8.6-a armv8-m.base armv8-m.main armv8-r armv8.1-m.main iwmmxt iwmmxt2
arm-none-eabi-gcc: error: missing argument to '-march='
arm-none-eabi-gcc: fatal error: no input files
compilation terminated.

大概了解这个支持这么多的架构,当然每种架构的芯片都有很多种,这个目前大部分是

ARM

刚才的页面是嵌入式单独的页面,下面我们就来上强度,来个全一点的内容:

https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

源码: https://git.gitlab.arm.com/tooling/gnu-devtools-for-arm.git

这里的toolchain 超级多,会不会有选择困难?理解下面几个概念

架构

  • AArch32
    • 是 32 位的 ARM 架构,适用于 ARMv7 及更早版本。
    • 主要用于低功耗、资源受限的嵌入式设备。
    • 一般就是类似于STM32F4,F1等系列的单片机
  • AArch64
    • 是 64 位的 ARM 架构,属于 ARMv8 及更高版本。
    • 提供更大的寻址空间和更高效的指令集。
    • 一般就是类似于RK3588的ARM的64bit的SOC

可执行文件

  • ELF (Executable and Linkable Format)
    • 是一种通用的文件格式,用于可执行文件、目标文件和共享库。
    • 适用于多种架构,包括 32 位和 64 位。
  • EABI (Embedded Application Binary Interface)
    • 是针对嵌入式系统的二进制接口规范。这个体积会更小
    • 定义了数据类型、寄存器使用、堆栈组织等标准。
    • 主要用于 32 位 ARM 架构。

简单理解就是: elf搭配aarch64 支持的架构更大,像64bit的寻址,elf的文件类型也更通用,当然需要的资源和编译出来的bin也就更大。

eabi搭配aarch32 则针对嵌入式的小型的32bit的系统寻址,eabi的接口规范编译出来的也更针对嵌入式,编译出来的会小一些,但是也就适合小型的系统。

  • arm-none-eabi: 嵌入式的stm32之类的,无os的,32bit的MCU
  • arm-none-linux-gnueabihf: 代表工具链生成的可执行文件,是运行在linux操作系统上的。none代表通用
  • aarch64-none-elf: 这个支持更大的64bit的MCU,无os运行的,比如RK3588上直接执行裸机程序
  • aarch64-none-linux-gnu: 这个是生成在linux上执行的bin文件

host主机

host主机就是你当前希望编译器在哪颗CPU上运行,就是你当前用的电脑的架构

host主机分为以下几种:

  • i686: 一种 32 位的 x86 架构,主要用于个人电脑和服务器,例如Pentium Pro、Pentium II、Pentium III、Pentium 4 等, i686 架构已逐渐被 64 位的 x86_64 架构逐步取代,所以不用关心
  • x86_x64: 向后兼容 32 位应用程序,同时支持 64 位应用程序,这个是我们常见的intel和amd的cpu架构
  • aarch64: 通常也有可能,比如你用RK3588当作小电脑来运行。
  • linux/macos/windowns: 接下来就选择你常用的操作系统,通常是windows

所以常用的,就选择windows,ubuntu就选linux

note 这里我们没有看到unknown字样,实际上我觉得这样理解:出现unknown基本都是编译的时候缺省值,不是官方或者正常发布toolchain机构发布的

接下来我们就知道当前如果是windows的话,想编译STM32等裸机的话,大概率用下面的编译器

arm-gnu-toolchain-14.2.rel1-mingw-w64-x86_64-arm-none-eabi.zip

如果遇到大型的linux嵌入式,大概率用下面的

arm-gnu-toolchain-14.2.rel1-mingw-w64-x86_64-arm-none-linux-gnueabihf.zip

mingw 主要是为了告诉你是在mingw里面进行编译的toolchain

MinGW-w64 是一个开源的编译器工具链,用于在 Windows 平台上开发原生的 C/C++ 程序。 它是 MinGW(Minimalist GNU for Windows)项目的扩展,提供了对 64 位和 32 位程序的支持

macos也分为darwin-x86_64 (intel CPU) 和darwin-arm64 (arm CPU m1)

GNU

另外对于linux平台还有下面的专业术语解释以下:

arm-none-linux-gnueabihf:
使用 硬件浮点(Hard Float),默认浮点运算使用浮点寄存器(-mfloat-abi=hard),性能更好。就是编译的时候,遇到浮点运算会帮你转成使用CPU中的浮点寄存器的汇编。
aarch64-none-linux-gnu:
默认也支持硬件浮点,但通常不需要显式指定浮点 ABI,因为 AArch64 架构本身都支持浮点运算。

gnu种eabihf代表支持硬件浮点,一般FPU,通常linuxarm 32位的话,默认支持硬件浮点寄存器。

GNU什么含义:

GNU 全称:GNU’s Not Unix, GNU 提供了一系列用于开发和编译软件的工具,包括 GCC(GNU 编译器集合)、GDB(GNU 调试器)、Binutils(二进制工具集)等,

通常linux后面都跟着gnu, linux-gnu,估计用到LInux了,就支持更全的GNU

可以看到下面的toolchain,开头也有gnu字样,代表工具链里面的gcc,gdb等集成工具。

arm-gnu-toolchain-14.2.rel1-mingw-w64-x86_64-arm-none-eabi.zip

EABI

EABI(Embedded Application Binary Interface,嵌入式应用二进制接口)是由 ARM 公司及其合作伙伴共同开发的标准。它定义了在 ARM 架构上,编译器、汇编器、链接器等工具如何生成目标文件和可执行文件,以确保不同编译器生成的代码可以在 ARM 系统上互操作。

RISCV

RISCV的比较官方的toolchain如下:

https://github.com/riscv-collab/riscv-gnu-toolchain

从仓库中可以看到,

有以下几个子仓库:

binutils

https://sourceware.org/git/binutils-gdb.git

GCC:

https://gcc.gnu.org/git/gcc.git

glibc:

https://sourceware.org/git/glibc.git

gdb:

https://sourceware.org/git/binutils-gdb.git

从网站https://toolchains.bootlin.com/

大概了解到,组成一个toolchain大概需要以下几个方面的内容:

binutils	2.41
gcc	13.3.0
gdb	14.2
glibc	2.39-74-g198632...
linux-headers	4.19.315

下面讲下这几部分基本的内容

  • binutils:像平时用的除了gcc之外的addr2line, ar, objdump,objcopy,都是用这个仓库生成的bin。
* addr2line: (binutils)addr2line. Convert addresses to file and line.
* ar: (binutils)ar.               Create, modify, and extract from archives.
* c++filt: (binutils)c++filt.	  Filter to demangle encoded C++ symbols.
* cxxfilt: (binutils)c++filt.     MS-DOS name for c++filt.
* dlltool: (binutils)dlltool.	  Create files needed to build and use DLLs.
* nm: (binutils)nm.               List symbols from object files.
* objcopy: (binutils)objcopy.	  Copy and translate object files.
* objdump: (binutils)objdump.     Display information from object files.
* ranlib: (binutils)ranlib.       Generate index to archive contents.
* readelf: (binutils)readelf.	  Display the contents of ELF format files.
* size: (binutils)size.           List section sizes and total size.
* strings: (binutils)strings.     List printable strings from files.
* strip: (binutils)strip.         Discard symbols.
* elfedit: (binutils)elfedit.     Update ELF header and property of ELF files.
* windmc: (binutils)windmc.	  Generator for Windows message resources.
* windres: (binutils)windres.	  Manipulate Windows resources.
  • gdb:gdb 其实也是binutils中的内容,只是gdb是和其他工具并列的,单独文件夹

  • gcc: 这个之前讲了,其实就是生成bin中的gcc.exe的源码文件,用来编译出.o之类的,除了GCC还有个llvm

  • glibc: 这个是libc部分, 对于linux,基本都是用glibc作为libc的内容。比较大的就是glibc,主要内容包含

    ​ libc的内容参考: https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/libc/introduction

    ​ 大致就是我们平时用的一些类似于memcpy,strcpy等库函数的头文件和实现,头文件基本是相似的,实现很多不同有以下几种主流的:

    • Newlib:https://sourceware.org/git/newlib-cygwin.git 这个是ARM官方嵌入式32方面的默认libc
    • picolibc: https://github.com/picolibc/picolibc 这个也是一款适合嵌入式STM32的小型的libc,zephyr在推广和使用
    • glibc: https://sourceware.org/git/glibc.git 这个是linux官方所用的GNU的libc,大而全,出现在linux平台上
    • uclibc: https://github.com/wbx-github/uclibc-ng.git 与 glibc 兼容性较好 支持多种架构, LGPLv2.1
    • musl: https://git.musl-libc.org/cgit/musl , 标准化程度高轻量级和高效 许可证友好 :采用 MIT 许可证
  • linux-headers 这个就不介绍了,根据linux系统的版本来,通常是一些linux系统的头文件。

从下面的途中看出,elf用的是newlib, glibc就是glibc,musl就是musl libc
在这里插入图片描述

LLVM

LLVM是和GCC并列的东西,你可以认为GCC的竞品,源码如下:

https://github.com/llvm/llvm-project/tree/main

LLVM已经被Apple、Microsoft、Google、Facebook等各大公司采用。

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。
在这里插入图片描述

LLVM的编译主要用clang 不是gcc了

它的编译汇编都是用的clang,前缀是"llvm-"

PREFIX = 'llvm-'
CC = 'clang'
AS = 'clang'
AR = PREFIX + 'ar'
CXX = 'clang++'
LINK = 'clang'

llvm是用来替代gcc的。

LIBC

下面列出一些常见的libc的使用场景和特点。

glibc

  • 特点 :功能全面,包含大量标准和扩展功能;兼容性好,遵循 POSIX、ISO C 等标准;支持多种硬件架构和操作系统;性能优化较好,适用于通用计算场景。
  • 使用场景 :广泛应用于各种主流 Linux 发行版,如桌面、服务器等,当需要使用丰富的标准库函数和良好的兼容性时,glibc 是常见选择。

musl

  • 特点 :轻量级,代码量小、资源占用少;严格遵循 POSIX 和 ISO C 标准,注重代码正确性和简洁性;许可证友好,采用 MIT 许可证,适合商业应用。
  • 使用场景 :适用于对标准化要求高、资源受限的嵌入式系统,如物联网设备、小型嵌入式设备等,也适用于追求代码简洁高效、对启动速度和执行效率有严格要求的场景。

uClibc-ng

  • 特点 :可移植性强,支持多种架构包括无内存管理单元的处理器;可配置性高,可根据需求裁剪功能模块;与 glibc 兼容性较好,大多数支持 glibc 的应用只需重新编译即可在 uClibc-ng 上运行。
  • 使用场景 :常用于资源受限的嵌入式 Linux 系统,如物联网设备、路由器、智能家电等,能有效减少系统占用空间,优化启动时间和功耗。

dietlibc

  • 特点 :体积非常小,静态链接的最小程序体积可达到极低水平;注重性能优化,在某些操作上具有较高的效率;主要关注基本的 C 库功能,较少支持复杂的扩展功能。
  • 使用场景 :适用于对程序体积要求极小的嵌入式系统或特定的优化场景,如小型嵌入式设备、对启动速度和程序体积有极致要求的应用。

newlib

  • 特点 :功能较为全面,包含一些适合嵌入式系统的功能,如网络协议栈支持;可移植性好,支持多种嵌入式架构;具有良好的稳定性和可靠性。
  • 使用场景 :常用于开发嵌入式系统,如小型路由器、工业控制设备等,也常用于需要网络功能的嵌入式应用中。

Picolibc

  • 特点 :专为小型嵌入式系统设计,轻量级且高效;基于 Newlib 和 AVR Libc 开发,继承了其优点并进行了优化;支持多种架构,包括 ARM、RISC-V、MIPS 等。
  • 使用场景 :适用于资源有限的嵌入式设备,如物联网设备、智能家居产品、传感器节点、微控制器应用等。

Cosmopolitan Libc

  • 特点 :轻量级、高度可配置;通过模块化和层次化设计,实现跨平台兼容性,可在不同操作系统和硬件平台上无缝切换。
  • 使用场景 :适用于需要跨平台部署的 C 语言应用,如嵌入式系统开发、云计算和分布式系统等

制作和发布toolchain的公司

https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

  • sourcery: 西门子http://www.codesourcery.com/ 这个已经不存在了,

  • linaro: 已经不更新 https://releases.linaro.org/components/toolchain/binaries/

参考:

riscv 各种版本GCC

总结

本文基本把toolchain的一些基本参数都讲到了,肯定有一些不足支持,如果大家有各种补充也可以提建议,

不知道对于toolchain大家还有哪些疑问?可以提出来,我可以一一解答。

相关文章:

嵌入式ARM RISCV toolchain工具 梳理arm-none-eabi-gcc

嵌入式TOOLchain工具 梳理 简介 本文总结和梳理一下一些toolchain的规则和原理,方便后续跨平台的时候,给大家使用toolchain做一个参考。 解释如何理解arm-none-eabi-gcc等含义,以及如何一看就知道该用什么编译器。 当然如果有哪里写的不是…...

OpenBMC:BmcWeb log输出

BmcWeb的log函数定义于:http\logging.hpp 说实话,个人觉得这一版的log函数有点炫技,使用起来也没有之前的版本方便,不过也还是值的参考一下。 1.如何输出log BMCWEB_LOG_ERROR("GetAll on path {} iface {} service {} failed with code {}",objectPath, inte…...

复现SCI图像增强(Toward fast, flexible, and robust low-light image enhancement.)

运行train.py报错 > File "/home/uriky/桌面/SCI-main/SCI-main/train.py", line 105, in main > train_queue torch.utils.data.DataLoader( File "/home/uriky/anaconda3/envs/AA/lib/python3.8/site-packages/torch/utils/data/dataloader.py&q…...

深入理解C++中string的深浅拷贝

目录 一、引言 二、浅拷贝与深拷贝的基本概念 2.1 浅拷贝 2.2 深拷贝 在C 中, string 类的深浅拷贝有着重要的区别。 浅拷贝 深拷贝 string 类中的其他构造函数及操作 resize 构造 构造(赋值构造) 构造(拼接构造&#xf…...

性能测试面试题的详细解答

以下是性能测试面试题的详细解答: 1. 性能测试的流程是怎样的? 性能测试流程通常包括以下几个步骤: - **需求分析**:明确测试目标、性能指标(如响应时间、吞吐量等)。 - **环境搭建**:搭建测试环…...

第八篇:系统分析师第三遍——3、4章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结 一、目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中,训练快速阅读能力、掌…...

Unity粒子特效打包后不显示

1.粒子发mesh,如果打包后不显示,尝试勾选r/w 2.如果还不行,mesh重做,目前发现ab包打出的,有的mesh会出问题,暂时原因不详。...

PFC 是什么?

现在进行液晶电视机和等离子电视机电路分析时、故障维修时,都经常的提到“PFC 电路”一词,这 在早期的电视机中是没有的,早期维修电视机的师傅从来没有接触过的,但是 PFC 电路是目前液晶电视机 和等离子电视机中不可缺少的电路。那…...

6.5 GitHub监控系统实战:双通道采集+动态调度打造高效运维体系

GitHub Sentinel Agent 定期更新功能设计与实现 关键词:GitHub API 集成、定时任务调度、Python 爬虫开发、SMTP 邮件通知、系统稳定性保障 1. GitHub 项目数据获取功能 1.1 双通道数据采集架构设计 #mermaid-svg-ZHJIMXcMAyDHVhmV {font-family:"trebuchet ms",v…...

楼梯上下检测数据集VOC+YOLO格式5462张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5462 标注数量(xml文件个数):5462 标注数量(txt文件个数):5462 …...

消防营区管控:从智能仓储、装备管理、应急物资调用等多维度出发

近期,一系列消防安全热点事件引发了社会各界的广泛关注。某老旧城区的一场火灾,由于消防通道被杂物堵塞,消防车辆无法及时靠近火源,加之周边消防设施老化,灭火物资储备不足,导致火势迅速蔓延,造…...

Flutter 自定义插件基础

1、Flutter插件是什么?官方插件库 在开发Flutter应用过程中会涉及到平台相关接口调用,例如数据库操作、相机调用、外部浏览器跳转等业务场景。其实Flutter自身并不支持直接在平台上实现这些功能,而是通过插件包接口去调用指定平台API从而实现…...

解锁古籍中的气候密码,探索GPT/BERT在历史灾害研究中的前沿应用;气候史 文本挖掘 防灾减灾;台风案例、干旱案例、暴雨案例

历史灾害文献分析方法论的研究,是连接过去与未来的关键桥梁。通过对古籍、方志、档案等非结构化文本的系统性挖掘与量化分析,不仅能够重建千年尺度的灾害事件序列(如台风、洪旱等),弥补仪器观测数据的时空局限性&#…...

【java 13天进阶Day12】XML和Dom4j,装饰模式,工厂模式,commons-io工具包,Base64

XML XML 指可扩展标记语言(EXtensible Markup Language),由各种标记(元素标签)组成。 可扩展:所有的标签都是自定义的,可以随意扩展的,如 。 XML 是一种标记语言,很类似 HTML,HTML…...

vue3 Element-plus修改内置样式复现代码

笔者在修改Element-plus的内置样式时,遇到一点挫折,现提供需求场景与解决方案。 一、实现(1)透明弹窗可拖拽,且不影响点击弹窗外内容;(2)弹窗内置表格,表格需修改样式颜色…...

工作督导 | 具有边缘型人格障碍倾向的高危来访者,咨询师如何应对?

一个学校心理中心,可能同时有几十位乃至数百位同学在接受咨询,其中大约10-20%是重点难点个案,一次督导如果只能督导1-2个个案,不足以保障所有危重难个案的有如何处理恰当、方向正确、快速解决、高效工作,是学校心理咨询…...

一本通 2063:【例1.4】牛吃牧草 1005:地球人口承载力估计

Topic: Ideas: 为什么把这两道题放在一起呢?就是因为这两道题很类似,都是很简单的数学题,只要你会列出数学等式,你就学会这道题了! 下面把计算过程展示给大家 Code: //2025/04/18…...

图+文+语音一体化:多模态合成数据集构建的实战与方法论

目录 图文语音一体化:多模态合成数据集构建的实战与方法论 一、多模态合成数据的核心价值 二、系统架构概览 三、核心模块与实现建议 ✅ 1. 文→图:图像合成(Text-to-Image) ✅ 2. 图→文:自动描述(I…...

c++:c++中的输入输出(二)

1.getline getline是包含于头文件&#xff1a;<string>的函数 作用&#xff1a;读取一行字符串&#xff08;包含空格&#xff09; 使用格式&#xff1a;getline(cin,str); string a;getline(cin, a); 假设我们有一个场景是需要识别一行字符串中的字母a的个数&#xff0c;…...

UniApp + Cursor + Devbox 全栏平台开发教程:从0到完整项目打造

本文基于B站热门教程《一口气学会小程序 / App / H5开发:UniApp教程 + Cursor + Devbox》,https://www.bilibili.com/video/BV1W7QZYMEus/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=a1428945043b2df41c1896acb90d942a,进行全面扩展…...

电流模式控制学习

电流模式控制 电流模式控制&#xff08;CMC&#xff09;是开关电源中广泛使用的一种控制策略&#xff0c;其核心思想是通过内环电流反馈和外环电压反馈共同调节占空比。相比电压模式控制&#xff0c;CMC具有更快的动态响应和更好的稳定性&#xff0c;但也存在一些固有缺点。 …...

服务器架构:SMP、NUMA、MPP及Docker优化指南

文章目录 引言 一、服务器架构基础1. SMP&#xff08;对称多处理&#xff0c;Symmetric Multiprocessing&#xff09;2. NUMA&#xff08;非统一内存访问&#xff0c;Non-Uniform Memory Access&#xff09;3. MPP&#xff08;大规模并行处理&#xff0c;Massively Parallel Pr…...

人脸识别联合行为检测的办公管理新模式

基于人脸识别与行为检测的办公智能化解决方案 一、背景 在传统办公场景中&#xff0c;员工考勤管理、工位使用情况统计、安全监控等环节存在诸多痛点。例如&#xff0c;传统考勤方式如指纹打卡、刷卡等存在代打卡现象&#xff0c;考勤数据不准确&#xff1b;对于员工是否在工…...

Python 写生成 应用商店(2025版) 网页 方便收集应用 ,局域网使用

工具【1】&#xff1a;nginx 配置 nginx.conf 文件 server { listen 8080; server_name example.com; location / { root E:/BIT_Soft_2025; index index.html index.htm; } # 定义错误页面 error_page 404 /4…...

Spring 单元测试核心注解全解:@InjectMocks、@MockBean、@Mock、@Autowired 的区别与实战

在编写 Spring Boot 应用的单元测试过程中,@InjectMocks、@MockBean、@Mock 和 @Autowired 是最常用的几个注解,但它们经常被混淆或误用,导致测试失败或注入错误。 本文将从本质区别、使用场景、示例代码、对比表格等多个维度,全面解析这几者的使用方法与差异,助你写出结…...

2025年大一训练-DP1

2025年大一训练-DP1 Problem A: 动态规划算法&#xff0c;从上往下一层层找到到达对应位置的最大值&#xff0c;最底下一行maxl的最大值即为答案 #include<bits/stdc.h> using namespace std; int lst[101][101]; int maxl[101][101];int main() {int n,i,j;while(cin&g…...

【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API

Math类的使用。 Math用于做数学运算。Math类中的方法全部是静态方法&#xff0c;直接用类名调用即可。方法&#xff1a; public static int abs(int a) 获取参数a的绝对值public static double ceil(double a) 向上取整public static double floor(double a) 向下取整public s…...

conversation_template | conversation_actors | conversation_line_template

目录 conversation_template conversation_actors conversation_line_template 实例应用 conversation_template id&#xff1a;某段谈话的唯一编号FirstLineId&#xff1a;谈话开始的第一段话的编号&#xff0c;取值来源 ConversationLine.db2 的 ID 字段TextureKitId&am…...

架构图--架构师的行军地图

架构图是架构师最重要的沟通和规划工具之一&#xff0c;它如同行军地图般指导着整个软件系统的构建与演进。本文系统性地探讨了软件架构图设计的全面方法论&#xff0c;提出横向与纵向双维度的设计框架。横向设计关注模块间的业务、数据与重要性关系&#xff0c;纵向设计则采用…...

`get_peft_model` 是 `peft` 库什么方法

get_peft_model 是 peft 库什么方法 get_peft_model 是 peft 库中一个关键的方法,其作用是将 LoRA 配置应用到预训练模型上,使得模型能够使用 LoRA 技术进行高效微调。 整体逻辑概述 get_peft_model 方法的核心任务是遍历预训练模型的各个模块,识别出需要应用 LoRA 的目标…...