TC397 Tasking CMake Gitlab CI CD 环境配置

文章目录

    • Aurix Development Studio 新建工程与配置
    • Tasking 环境配置
    • CMake 集成
      • Win CMake MinGW 安装
      • Tasking Toolchain 工具链
      • CMakeLists.txt
      • Powershell 脚本
    • Gitlab CI CD
    • Github Link

本篇先演示了ADS新建激活编译工程, 讲述了浮点模型, 链接脚本文件, 静态库集成等的设置, 接着配置了Tasking的终端环境和Toolchain, 给出了TC397 CMake集成使工程可以在终端命令行编译的方法, 最后展示了如何集成到Gitlab, 如何CI CD, 自动编译MCU工程和分发二进制文件, 最后给出了整个工程的源码以供参考.

Aurix Development Studio 新建工程与配置

安装并打开最新的 AURIX™ Development Studio, 这里版本用的是 1.9.20. 对应的 Infineon Low Level Drivers for AURIX™ TC3xx devices 的版本是 iLLD 1.0.1.17.0.1.

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

如果有多个工程同时打开, 加粗加黑的工程是激活工程, 想让某个工程激活, 可以工程右键-> Set Active Project.

新加入的文件工程右键Refresh会自动包含路径, 所以没有用的源文件(.c, .cxx等)最好不要放到工程目录及子目录下, 如 Simulink 生成的 ert_main.c

编译 或 重新编译, 默认生成 .elf, .hex, .map 文件等, 可以自己写脚本从hex生成12个或以上的bin文件(6个核, 每个核2个bin文件, 还有 ucb 文件 或 可能标定使用的 DFlash 文件)

请添加图片描述

浮点模型: 默认单精度浮点模型, double 会被当作 float 对待, sizeof(double)=4, 如想自己修改可参考下图:
请添加图片描述
请添加图片描述

链接脚本文件: 默认是 Lcf_Tasking_Tricore_Tc.lsl

请添加图片描述

静态库集成: 如果有第三方的.a静态库或者为了加快编译自己弄的静态库可以在这里添加

请添加图片描述

重命名工程: 如果复制了工程, 想改工程名, 可以右键 Rename… 然后输入新工程名即可

请添加图片描述

更新到最新的 iLLD 库: 工程右键, Project updater, Update iLLD

虽然 ADS 也是用的类似 Tasking 的编译器, 但有时候版本不同, 默认的编译链接选项也可能不一样, 可能会发生诸如 const volatile , overlay 等功能编译出的标定文件的位置不一样. 用到复杂功能时两个IDE编出来的文件可能的不一致是需要注意的地方.

Tasking 环境配置

商业开发一般使用付费的 Tasking 从命令行编译或者走CI CD方便一些, Win 或者 Linux 平台都有. 有 限定一台PC使用的Node-Locked锁定许可, 服务器许可网络多用户使用的Floating(同一时间仅限一个用户且切换用户需要数十分钟的间隔)浮动许可 等类型.

正常安装供应商给的 Tasking 安装包.

打最新补丁(patch): TriCore and AURIX Toolset Support | TASKING, 如 v6.3r1p8 update patch, 之前是能随便下的, 现在如果下载不了, 找供应商或者跳过.

添加到环境变量

请添加图片描述

新开终端检查

cctc --version

浮动版有时候服务器IP改变, 可手动修改 Tasking安装目录/etc 目录下的 licopt.txt 文件

TSK_LICENSE_KEY_SWxxxx = xxxx-xxxx-xxxx-xxxx
TSK_LICENSE_SERVER = <IP>:<Port>

CMake 集成

这里以 Windows 为例(Linux下 CMake GCC要简单很多, 不再赘述)

Win CMake MinGW 安装

CMake: Download CMake 下载最新或指定版本的 Windows x64 Installer.

MinGW: mingw-w64.org/downloads/#mingw-builds 到 Github Release 下载最新或指定版本的 x86_64-版本-release-win32-seh-msvcrt-rt_v版本-rev0.7z, 解压到指定文件夹即可, 无需安装

把 CMake 和 MinGW 路径添加到环境变量

请添加图片描述

新开一个终端检查

cmake --version
gcc --version

Tasking Toolchain 工具链

CMake 3.25 版本及以后新增了 CMAKE_TASKING_TOOLSET, 用法参考 Tasking Toolchain: How to properly use it? - Usage - CMake Discourse

常用编译或链接选项还是参考 ADS 或者 Tasking 的默认配置来

请添加图片描述

或者命令行查看帮助

cctc -h
astc -h
ltc -h
objsize -h
objdump -h

一个最简单的示例如下, 这里命名为 tasking_tricore.cmake

set(CMAKE_SYSTEM_NAME Generic)

find_program(COMPILER_C cctc PATHS ENV TOOLCHAIN_ROOT PATH_SUFFIXES bin)
find_program(COMPILER_ASM astc PATHS ENV TOOLCHAIN_ROOT PATH_SUFFIXES bin)

set(CMAKE_C_COMPILER ${COMPILER_C})
set(CMAKE_CXX_COMPILER ${COMPILER_C})
set(CMAKE_ASM_COMPILER ${COMPILER_ASM})

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

add_compile_options(
  --misrac-version=2012 
  -D__CPU__=tc39xb 
  --iso=99 
  --c++14 
  --language=+volatile 
  --exceptions --anachronisms 
  --fp-model=3 
  -O0 
  --tradeoff=4 
  --compact-max-size=200 -g 
  -Wc-w544 -Wc-w557 
  -Ctc39xb 
  -Y0 -N0 -Z0
)

add_link_options(
  -d${PROJECT_SOURCE_DIR}/Lcf_Tasking_Tricore_Tc.lsl 
  -Wl-Oc -Wl-OL -Wl-Ot -Wl-Ox -Wl-Oy 
  -Wl-mc -Wl-mf -Wl-mi -Wl-mk -Wl-ml -Wl-mm -Wl-md -Wl-mr -Wl-mu --no-warnings= -Wl--error-limit=42 
  --fp-model=3 -lrt --lsl-core=vtc --exceptions --strict --anachronisms --force-c++ -Ctc39xb
  --format=ihex
)

这个 CMake 文件是用于配置交叉编译环境的工具链文件。它设置了一些变量来定义目标系统和编译器。

  • CMAKE_SYSTEM_NAME 设置为 “Generic”,表示目标系统是一个通用的系统(Windows Linux)。
  • find_program 命令用于查找名为 “cctc” 的 C 编译器和名为 “astc” 的汇编编译器,查找路径是环境变量 TOOLCHAIN_ROOT 指定的路径,以及该路径下的 “bin” 子目录。
  • CMAKE_C_COMPILERCMAKE_CXX_COMPILER 设置为找到的 C 编译器,CMAKE_ASM_COMPILER 设置为找到的汇编编译器。
  • CMAKE_FIND_ROOT_PATH_MODE_* 变量控制了在查找程序、库、头文件和包时,是否应考虑到 CMake 的根路径。在这个文件中,所有的查找都只在根路径中进行,除了程序查找,它永不在根路径中查找。这是因为在交叉编译的情况下,你可能只想在目标系统的路径中查找,而不是在主机系统的路径中查找。

接下来,add_compile_optionsadd_link_options 命令分别添加了编译和链接选项。这些选项包括 MISRA C 2012 规则、C99 和 C++14 标准、优化级别、警告级别等。

CMakeLists.txt

可以一个目录一个目录添加, 这里选择了另外一种, 排除不要的文件夹或源文件, 剩下的全部包含

cmake_minimum_required(VERSION 3.15)
project(tc397_min_project LANGUAGES CXX C ASM)

set(EXCLUDE_DIRS "build" "TriCore Debug (TASKING)" "TriCore Release (TASKING)")

# source files
set(EXCLUDE_FILES "ert_main.c")
file(GLOB_RECURSE SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/*.c
    ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/*.cc
)
foreach(_dir IN ITEMS ${EXCLUDE_DIRS})
    file(GLOB_RECURSE FILES RELATIVE ${PROJECT_SOURCE_DIR} "${_dir}/*")
    list(FILTER SOURCES EXCLUDE REGEX "${_dir}/.*")
endforeach()
foreach(_file IN ITEMS ${EXCLUDE_FILES})
    list(FILTER SOURCES EXCLUDE REGEX "${_file}")
endforeach()

# include directories
set(INCLUDE_DIRS "")
file(GLOB_RECURSE FILES RELATIVE ${PROJECT_SOURCE_DIR} "*.h")
foreach(_dir IN ITEMS ${EXCLUDE_DIRS})
    list(FILTER FILES EXCLUDE REGEX "${_dir}/.*")
endforeach()
foreach(_source IN ITEMS ${FILES})
    get_filename_component(_source_path "${_source}" PATH)
    string(REPLACE "/" "\\" _source_path_msvc "${_source_path}")
    list(APPEND INCLUDE_DIRS "${_source_path}")
    # append upper directories
    while(NOT "${_source_path}" STREQUAL "")
        get_filename_component(_source_path "${_source_path}" DIRECTORY)
        list(APPEND INCLUDE_DIRS "${_source_path}")
    endwhile()
endforeach()
list(APPEND INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
list(REMOVE_DUPLICATES INCLUDE_DIRS)

add_executable(${PROJECT_NAME} 
    ${SOURCES}
)

set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)
target_include_directories(${PROJECT_NAME} PUBLIC ${INCLUDE_DIRS})

# postbuild mv .elf .hex
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.elf ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.hex
  COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.elf
)

这个 CMakeLists.txt 文件定义了一个名为 tc397_min_project 的项目,该项目使用 C++、C 和汇编语言。

首先,它定义了一些需要排除的目录和文件。然后,使用 file 命令和 GLOB_RECURSE 选项在当前目录及其子目录中查找所有的 .c.cpp.cc 文件,并将找到的文件存储在 SOURCES 变量中。接下来,它遍历排除目录和文件,从 SOURCES 中排除这些目录和文件。

然后,它查找所有的 .h 文件,并将这些文件的路径添加到 INCLUDE_DIRS 变量中。这个过程也会排除在 EXCLUDE_DIRS 中定义的目录。对于每个找到的 .h 文件,它还会将该文件的上级目录添加到 INCLUDE_DIRS 中,直到路径为空为止。最后,它将当前目录添加到 INCLUDE_DIRS 中,并删除其中的重复项。

接下来,它使用 add_executable 命令创建一个可执行文件,该文件的名称是项目名称,源文件是 SOURCES 变量中的文件。然后,它设置了目标的链接语言为 C,并将 INCLUDE_DIRS 中的目录添加到目标的公共包含目录中。

最后,它添加了一个自定义命令,该命令在构建目标后执行。这个命令将 .elf 文件复制为 .hex 文件,然后删除 .elf 文件。

Powershell 脚本

Windows 下的命令不太好记, 这里可以写一个PS脚本, 使用 build clean 来编译或清理

function Build {
  $startTime = Get-Date

  $exePath = (Get-Command cctc.exe).Source
  $env:TOOLCHAIN_ROOT = (Split-Path (Split-Path $exePath -Parent) -Parent).Replace("\", "/")
  Write-Host "TOOLCHAIN_ROOT: $env:TOOLCHAIN_ROOT"

  if (!(Test-Path -Path "build")) {
    New-Item -Path "build" -ItemType "directory" -ErrorAction SilentlyContinue
  }

  # cross-compiling toolchain
  $env:CMAKE_TOOLCHAIN_FILE = "$PSScriptRoot\tasking_tricore.cmake"
  Write-Host "CMAKE_TOOLCHAIN_FILE: $env:CMAKE_TOOLCHAIN_FILE"
  
  cmake -B build -G "MinGW Makefiles" .
  $totalLogicalCores = ( `
    (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors | `
      Measure-Object -Sum `
  ).Sum
  cmake --build build -- -j $totalLogicalCores

  # if cmake or make failed, exit with the same error code
  if ($LASTEXITCODE -ne 0) {
    exit $LASTEXITCODE
  }

  $endTime = Get-Date
  $timeSpan = New-TimeSpan -Start $startTime -End $endTime
  Write-Host "Build time taken: $($timeSpan.Minutes) minutes $($timeSpan.Seconds) seconds"
}

function Clean {
  if (Test-Path -Path "build") {
    Remove-Item -Path "build" -Recurse -Force
  }
}

function Help {
  Write-Host "Usage: win.ps1 [command]"
  Write-Host "Commands:"
  Write-Host "  build: build the project"
  Write-Host "  clean: clean the project"
  Write-Host "  help: show this help message"
}

if ($args.Length -eq 0) {
  Help
  exit 0
}

switch ($args[0]) {
  "build" {
    Build
  }
  "clean" {
    Clean
  }
  "help" {
    Help
  }
  default {
    Write-Host "Unknown command: $args[0]"
    Help
  }
}

这个 PowerShell 脚本提供了三个功能:构建项目(build)、清理项目(clean)和显示帮助信息(help)。

  • Build 函数首先使用 CMake 生成 MinGW Makefiles,然后获取逻辑处理器的数量,并使用这个数量作为并行构建的作业数。如果 CMake 或 make 失败,脚本将以相同的错误代码退出。最后,它计算并打印构建所花费的时间。
  • Clean 函数检查是否存在名为 “build” 的目录,如果存在,就删除它。
  • Help 函数打印脚本的使用方法和可用的命令。

脚本的主体部分首先检查是否有传入的参数,如果没有,就显示帮助信息并退出。然后,它使用 switch 语句根据第一个参数选择要执行的函数。如果参数不是 “build”、“clean” 或 “help”,它将打印一个错误消息,并显示帮助信息。

Gitlab CI CD

先确保Gitlab工程有足够的权限, 设置里面开启 Pipelines, 别忘了点击下面的 Save changes 按钮

请添加图片描述

在装有Tasking的服务器上安装好 GitLab Runner, 一般用 Docker 或直接 Shell 集成, 这里以 Shell 为例, 在CI / CD 的 Runners里面复制一下 URL 和 token

请添加图片描述

这里以 Linux 的Tasking服务器为例(Windows的也类似), 登录到服务器

$ sudo gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=3684564 revision=12335144 version=15.8.0
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):
这里粘贴上面复制的URL
Enter the registration token:
这里粘贴上面复制的token
Enter a description for the runner:
填入描述
Enter tags for the runner (comma-separated):
设置一个tag, 如gitlab的组或者工程名, 这个tag用来配置后面`.gitlab-ci.yml`
Enter optional maintenance note for the runner:
填入维护note
WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
Registering runner... succeeded                     runner=xxxx
Enter an executor: docker-ssh+machine, custom, parallels, shell, ssh, instance, kubernetes, docker, docker-ssh, virtualbox, docker+machine:
shell   这里填入shell, 也可以根据实际情况用docker等
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

服务器配置完后, 回到Gitlab工程设置页面刷新, Settings, CI/CD, Runners, Runners activated for this project 应该就能看到上面输入tag名字的 runner 了

请添加图片描述

Gitlab工程Settings, CI/CD, Variables 根据情况填入gitlab 或者 jfrog 等的 variable.

这里略去 prebuild, 更新 submodule, deploy 的过程, 仅给出 build 的最简 .gitlab-ci.yml 示例,

stages:
  - build

tasking_build:
  tags:
    - 这里填入服务器设置的tag
  stage: build
  only:
    - tags
  script:
    - export TSK_LICENSE_KEY_SWxxxx=xxxx-xxxx-xxxx-xxxx
    - export TSK_LICENSE_SERVER="<ip>:<port>"
    - export TOOLCHAIN_ROOT=/opt/Tasking/TriCore6.3r1/ctc
    - cmake -B build -DCMAKE_TOOLCHAIN_FILE=tasking_tricore.cmake -G 'Unix Makefiles' .
    - cmake --build build -j$(nproc)
  artifacts:
    paths:
      - build
    expire_in: '60'
    when: on_success
  allow_failure: false

工程打 tag 可以触发CI流程.

请添加图片描述

对于工程有 submodule 的, 一般会有个 prebuild 拉代码的阶段, 如果报错误

$ git submodule update --init --recursive
...
remote: ========================================================================
remote: 
remote: Your account has been blocked.
remote: 
remote: ========================================================================

一种不算好但简单的方法是到服务器的gitlab ci该仓库的位置

$ find xxx -name 工程名
$ cd gitlab_ci_的工程路径

# 查看本地git配置
$ git config --local  --list

# 一般是 submodule.xxxx.url 没有 token
# 从其它工程抄一个可用的 用户oauth2 或者 远程仓库的 gitlab-ci-token
$ sudo git config --local submodule.xxxx.url "http://oauth2:xxxx@yyyy.git"
# sudo git config --local submodule.xxxx.url "http://gitlab-ci-token:xxxx@yyyy.git"

另外一个需要注意的地方是 Windows 文件名不区分大小写, Linux 下区分, 如 A.h, Windows 下 #include "a.h" 编译是不会报错的, 但是Linux下 cannot open #include file "a.h", 最好一开始就大小写区分好.

Github Link

欢迎Star:

  • domain_controller_orin_x2_tc397/tc397_min_project at main · weifengdq/domain_controller_orin_x2_tc397 (github.com)
  • 也可到csdn下载: tc397_min_project

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

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

相关文章

python并发编程:IO模型

一 IO模型 二 network IO 再说一下IO发生时涉及的对象和步骤。对于一个network IO \(这里我们以read举例\)&#xff0c;它会涉及到两个系统对象&#xff0c;一个是调用这个IO的process \(or thread\)&#xff0c;另一个就是系统内核\(kernel\)。当一个read操作发生时&#xff…

C语言学习--摩尔投票算法

目录 1.引入 2.摩尔投票算法 3.具体步骤 3.1抵消阶段 3.2检验过程 4.代码实现 5.总结 1.引入 今天做题看到一个解题思路真的看不懂&#xff0c;一艘才知道是这个算法。 int majorityElement(int* nums, int numsSize) { int notenums[0]; int count1; for(int i1;i<n…

day7-网络编程

1>基于UDP的网络聊天室 Ser.c #include <myhead.h> #define SER_IP "10.211.55.9" // 服务器IP #define SER_PORT 9999struct user {char usrName[20];struct sockaddr_in cin; }; int main(int argc, char const *argv[]) {// 1.创建用于监听的套接字int…

coqui-ai/TTS 案例model文件

GitHub - coqui-ai/TTS: &#x1f438;&#x1f4ac; - a deep learning toolkit for Text-to-Speech, battle-tested in research and production Coqui AI的TTS是一款开源深度学习文本转语音工具&#xff0c;以高质量、多语言合成著称。它提供超过1100种语言的预训练模型库&…

Elemenu中el-table中使用el-popover选中关闭无效解决办法

主要是技术太菜,没找到原因,一点点才找到这个办法解决 因为在el-table-column里,因为是多行,使用trigger"manual" 时,用v-model"visible"来控制时,控件找不到这个值,才换成trigger"click" 先找到弹出关闭事件,再找元素的属性 右键>审核元素…

哪款洗地机值得买?希亦、追觅、米博、美的谁才是行业标杆?

在家庭清洁中&#xff0c;最让我们苦恼的便是厨房垃圾了&#xff0c;油渍跟食物残渣&#xff0c;用扫把扫了后&#xff0c;要反反复复的湿拖五六次&#xff0c;期间不停的手洗拖把&#xff0c;这套流程下来&#xff0c;往往容易腰酸背痛&#xff0c;手指皱巴巴的&#xff0c;这…

Java项目:40 springboot月度员工绩效考核管理系统009

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有&#xff1a; &#xff08;1&#xff09;个人中心管理功能&#xff0c;添加管理员账号…

【BUG修复日志】Anaconda + VSCode 编码错误

【BUG修复日志】Anaconda VSCode 编码错误 平台: Windows11家庭版 (v22621.3155) 软件: Visual Studio Code (v1.87.0) 插件: Python (v2024.2.1) 版本: Conda (v24.1.2)问题描述 VSCode 在安装 Python 插件的情况下自动提示配置 Conda 环境&#xff0c;但是在自动配置完成后…

SpringMVC实用技术

1.校验框架 1.表单校验框架入门 表单校验的重要性 数据可以随意输入&#xff0c;导致错误的结果。表单校验保障了数据有效性、安全性 表单校验分类 校验位置&#xff1a; 客户端校验 服务端校验 校验内容与对应方式&#xff1a; 格式校验 客户端&#xff1a;使用Js技术…

【linuxC语言】系统调用IO文件操作

文章目录 前言一、文件描述符介绍二、系统调用IO API介绍2.1 open函数2.2 close函数2.3 read函数2.4 write函数2.5 lseek函数 三、示例代码总结 前言 在Linux系统中&#xff0c;C语言通过系统调用实现对文件的输入输出&#xff08;I/O&#xff09;操作。系统调用提供了访问操作…

LLM - 使用 Langchain 实现本地 Naive RAG

目录 一.引言 二.构建本地 Langchain 库 1.Doc 知识文档 2.Split 文档切分 3.Encode 内容编码 4.Similar 本地库构建 三.缓存本地 Langchain 库 四.读取本地 Langchain 库 1.Load 读取缓存 2.Similar 预测 3.Add 添加文档 五.总结 一.引言 上一篇博客介绍了当下 R…

M2TS转MP4怎么转?超快的方法~

M2TS格式的优点主要体现在对高清视频的完美支持&#xff0c;能够提供极致的视觉体验。然而&#xff0c;由于其相对较大的文件大小&#xff0c;有时可能不太适合网络传输。此外&#xff0c;部分不支持M2TS的播放设备可能导致一定的兼容性问题。 想要播放m2ts视频&#xff0c;可…

MySQL实战45讲——30答疑文章(二):用动态的观点看加锁

目录 不等号条件里的等值查询 等值查询的过程 怎么看死锁&#xff1f; 怎么看锁等待&#xff1f; update 的例子 小结 上期问题时间 提示 文章摘自林晓斌老师《MySQL实战45讲》&#xff0c;作为笔记而用&#xff0c;故有加一些自己的理解。在第[20]和[21]篇文章中&…

Python基础二

一、变量 在编程中&#xff0c;变量是用来存储数据值的名称。在 Python 中&#xff0c;变量是动态类型的&#xff0c;这意味着你可以将任何类型的数据分配给一个变量&#xff0c;而不需要提前声明变量的类型。 1、全局变量 在函数外部定义的变量是全局变量&#xff0c;可以在程…

cesium-天际线

主要是两个着色器 let postProccessStage new Cesium.PostProcessStage({//unform着色器对象 textureScalefragmentShader:// 声明一个纹理采样器 colorTexture 用于读取纹理颜色uniform sampler2D colorTexture; // 声明一个纹理采样器 depthTexture 用于读取深度纹理unifor…

Python接口自动化之Token详解及应用

以下介绍Token原理及在自动化中的应用。 一、Token基本概念及原理 1.Token作用 为了验证用户登录情况以及减轻服务器的压力&#xff0c;减少频繁的查询数据库&#xff0c;使服务器更加健壮。 2.什么是Token Token是服务端生成的一串字符串&#xff0c;以作客户端进行请求的…

《焦点访谈》上的星火大模型:AI生成春天散文,共绘美好春天

发布 | 大力财经 在今年的全国“两会”上&#xff0c;全国人大代表、科大讯飞董事长刘庆峰提出了关于制定国家《通用人工智能发展规划》的建议&#xff0c;推动我国通用人工智能的发展&#xff0c;以应对全球AI领域的激烈竞争。 刘庆峰在3月6日晚间的《焦点访谈》中表示&#…

简单整理vue-router,路由知识

1.项目中引入 1.1 安装注册 1.2 封装抽离 在main.js中 书写,会造成单个js文件过于臃肿的情况,需要将路由配置部分抽离出来,在src下新建router文件夹,新建index.js文件 import Vue from vue import VueRouter from vue-router import HomeView from ../views/HomeView.vue im…

Elasticsearch:dense vector 数据类型及标量量化

密集向量&#xff08;dense_vector&#xff09;字段类型存储数值的密集向量。 密集向量场主要用于 k 最近邻 (kNN) 搜索。 dense_vector 类型不支持聚合或排序。 默认情况下&#xff0c;你可以基于 element_type 添加一个 dend_vector 字段作为 float 数值数组&#xff1a; …

【中间件】docker的安装

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;中间件 ⛺️稳中求进&#xff0c;晒太阳 .卸载旧版 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \doc…