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

ABAP开发-内存管理

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、概述
  • 二、程序间调用
  • 三、外部会话和内部会话
  • 四、SAP内存与ABAP内存
  • 五、实例
  • 总结


前言


一、概述

内存是程序之间为了传递数据而使用的共享存储空间,在每个程序里使用的内存有SAP内存和ABAP内存

  • SAP内存分类
    • SAP内存
      • 主会话之间的数据共享
      • 通过SET/GET PARAMETER语句共享不同ABAP内存领域之间的内存
    • ABAP内存
      • 内部会话之间的数据共享
      • 只有在同一个窗口执行的程序才能共享内存

二、程序间调用

接口:使用SUBMIT语句调用TYPE1程序,调用选择界面

  • SUBMIT program
    WITH P_1 = VAL1
    WITH S_1 IN R_1
    VIA SELECTION SCREEN
    AND RETURN
  • 不同参数的传值方法
    • PARAMETERS-----WITH P_1 = VAL1
    • SELECT-OPTIONS----- WITH S_1 IN R_1
    • RADIO BUTTON -----WITH R_1 = ‘X’ WITH R_2 = ‘’
    • CHECKBOX----- WITH C_1 = ‘X’ WITH C_2 = ‘X’ WITH C_3 = ‘’
      直接调用事务代码
      CALL TRANSACTION ‘TCODE’ AND SKIP FIRST SCREEN

三、外部会话和内部会话

  • 外部会话
    一般,一个外部会话是一个R/3系统的窗口
    当用户成功登陆SAP系统时,就开始了一个和应用服务器之间的外部会话,可以通过如下几种方式同时打开最多六个外部会话:

    • 通过点SAP GUI系统工具条上的按钮”新建GUI窗口“
    • 选择系统主菜单“SYSTEM CREATE SESSION”
    • 在Command Field中输入“/O< tcode >”回车,或“/N< TCODE >”
  • SAP缓冲器

    • 可以利用SAP内存在WORK PROCESS之间共享内存
    • SAP应用程序系统各自拥有自己的缓冲器(CLIENT CASHE)
    • 缓冲器在Client级别上互相共享,因此SAP缓冲器在所有主会话中共享数据
  • 内部会话

    • 外部会话被分成了多个内部会话,这些内部会话被放在一个堆栈(后进先出的线性结构)里面
    • 每个ABAP程序在运行时都占用一个内部会话,每个外部会话可以包含最多九个内部会话
    • 在内部会话中使用CALL TRANSACTION等命令调用其他程序,则内部会话之间共享ABAP内存

四、SAP内存与ABAP内存

SAP内存

  • SAP内存使用SAP/GPA技术传递程序间数据
    • 传递内存参数来给其他程序输入字段复制的操作称为“SPA/GPA技术”
    • SPA/GPA参数指的是利用SAP内存的参数,表TPARA中进行确认
    • 只限相同的用户共享内存,又叫User Specific参数
  • SPA/GPA参数信息可以在创建SAP内存参数
    • SE80->WORKBENCH->EDIT OBJECT
    • SM30->TPARA表,维护条目
  • 在TYPE1报表程序的选择画面上的参数或者select-option变量,使用的是MEMORY ID来连接字段与参数
  • 在ONLINE界面中,在PARAMETER ID字段设置内存ID,及SET/GET变量
  • 使用HIDE语句,将字段值保存到HIDE内存领域
  • DEBUG界面查询GOTO->SYSTEM AREA->SAP MEMORY

ABAP内存

  • 使用ABAP内存时可以在程序级别上任意指定内存ID名,不需要参数ID
  • 利用ABAP内存使用语句
    • EXPORT…TO…向MEMORY ID传出数据
    • IMPORT…TO…向MENORY ID传入数据
    • RREE MEMORY ID,删除ABAP内存
  • 使用CALL TRANSACTION/SUBMIT/CALL DIALOG等命令调用其他程序时,会生成内部会话并共享ABAP内存中数据

SAP内存与ABAP内存的不同

  • SAP内存
    • 全局内存,用户终端会话内的所有外部会话都可以访问
    • SAP内存在外部会话中的所有内部会话中可以共享
    • 基本语句-----SET PARAMETER/GET PARAMETER
  • ABAP内存
    • 同一个会话中执行的所有程序共享的内存
    • 外部会话中只存在一个ABAP内存
    • 基本语句-----EXPORT OBJ1…OBJN TO MEMORY ID KEY.
      ------IMPORT OBJ1…OBJN FROM MEMORY ID KEY.

五、实例

ABAP内存
创建一个程序,该程序作用是往不同的内存里面放数据
在这里插入图片描述
在这里插入图片描述

*& Report ZYT36_DAY8_MEMORY01_SET_36130
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY01_SET_36130.
DATA: LV_STR TYPE C LENGTH 20.*ABAP内存
*往ABAP内存里写了一个名为LV_STR的变量,LV_STR里存的值是ABAP MEMORY
LV_STR = 'ABAP MEMORY'.
EXPORT LV_STR TO MEMORY ID 'EXPORT00'."向ABAP内存写入数据,通过ID往回读内容
WRITE: / 'EXPORT 成功'.

再创建一个程序,用来读取内存数据
在这里插入图片描述
在这里插入图片描述

*& Report ZYT36_DAY8_MEMORY01_GET_36130
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY01_GET_36130.
*创建一个变量存读回来的数
DATA: LV_STR TYPE C LENGTH 20.*从ABAP内存读取数据
IMPORT LV_STR FROM MEMORY ID 'EXPORT00'.
WRITE: / 'ABAP MEMORY',LV_STR.

ABAP内存只在同一个对话框内有用,所以要些执行SET程序-----往里写数据,然后点返回再去GET程序执行
验证测试1:在同一个会话框里先执行SET再执行GET程序
在这里插入图片描述
在该会话框里点返回
在这里插入图片描述
再在该会话框里输入GET程序
在这里插入图片描述
在这里插入图片描述
结果:get程序里会读到set程序里的东西

验证测试2:在不同的会话框分别打开SET程序、GET程序
在这里插入图片描述
SET程序执行完后,新开一个窗口执行GET程序
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
结果:此时,读取不到SET程序中输入的
所以,ABAP内存:在一个窗口读入的值,在另一个窗口是不会读到的,只有在同一个窗口里面的东西才能写到ABAP内存中

SAP内存与ABAP内存对比
SET程序

*& Report ZYT36_DAY8_MEMORY01_SET_36130
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY01_SET_36130.
DATA: LV_STR TYPE C LENGTH 20,lv_STR2 TYPE C LENGTH 20.*ABAP内存
*往ABAP内存里写了一个名为LV_STR的变量,LV_STR里存的值是ABAP MEMORY
LV_STR = 'ABAP MEMORY'.
EXPORT LV_STR TO MEMORY ID 'EXPORT00'."向ABAP内存写入数据,通过ID往回读内容*SAP内存
LV_STR2 = 'SAP MEMORY'.
SET PARAMETER ID 'SAPPAR00' FIELD LV_STR2.
WRITE: / 'EXPORT 成功'.

GET程序

*& Report ZYT36_DAY8_MEMORY01_GET_36130
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY01_GET_36130.
*创建一个变量存读回来的数
DATA: LV_STR TYPE C LENGTH 20.
DATA: LV_STR2 TYPE C LENGTH 20.*从ABAP内存读取数据
IMPORT LV_STR FROM MEMORY ID 'EXPORT00'.*从SAP内存读取数据
GET PARAMETER ID 'SAPPAR00' FIELD LV_STR2.WRITE: / 'ABAP 内存',LV_STR.
WRITE: / 'SAP 内存',LV_STR2.

在一个窗口执行SET程序,新开另一个窗口执行GET程序,此时结果如下
在这里插入图片描述
在这里插入图片描述
可以看到SAP内存即使不在同一个会话框中依然可以读到程序,但ABAP内存在不同的会话框里读不到程序

创建一个新程序
在这里插入图片描述
在这里插入图片描述

*& Report ZYT36_DAY8_MEMORY02_GET_36130
*&---------------------------------------------------------------------*
*&让用户输入公司代码,再把公司代码取出来,然后根据公司代码把EKPO这张表取出来
*用另外一个程序让用户选择输入,调用当前写的这个get程序
*&测试程序之间的调用
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY02_GET_36130.TABLES: EKPO.PARAMETERS:
P_BUKRS TYPE EKPO-BUKRS.INITIALIZATION.
P_BUKRS = '1000'.
*P_BUKS赋值
*需求是:从内存中取数据,取到了就用内存里面的数据作为筛选条件START-OF-SELECTION.SELECT EBELN,EBELP,BUKRSFROM EKPOINTO TABLE @DATA(LT_EKPO)WHERE BUKRS = @P_BUKRS."BUKRS是公司代码IF SY-SUBRC = 0.CL_DEMO_OUTPUT=>DISPLAY( LT_EKPO ).ENDIF.

再创建一个新程序
在这里插入图片描述
在这里插入图片描述

*& Report ZYT36_DAY8_MEMORY02_SET_36130
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY02_SET_36130.TABLES: EKPO.PARAMETERS:
P_BUKRS TYPE EKPO-BUKRS.START-OF-SELECTION.
*直接让程序调用ZYT36_DAY8_MEMORY02_GET_36130
*程序之间调用
SUBMIT ZYT36_DAY8_MEMORY02_GET_36130
WITH P_BUKRS = P_BUKRS
VIA SELECTION-SCREEN"显示被调用程序的选择画面
AND RETURN."调用其他人的程序,在其他人程序执行之后,返回继续执行自己的程序WRITE: '测试程序之间的调用,主程序结束'.

点击处理后,进入写入变量调用程序,SET,然后点击执行
在这里插入图片描述
此时执行后,实际调用了GET,然后再点击执行
在这里插入图片描述
即可获取到公司代码为1000的采购订单数据
在这里插入图片描述
此时点击返回,则会回到如下界面,更说明了调用了get程序,现在才是返回到了SET程序
在这里插入图片描述
在这里插入图片描述

另外,若set程序中没有VIA SELECTION-SCREEN语句,则不显示被调用程序的选择画面,而是直接通过筛选条件输出符合条件的报表内容
即代码如下

*& Report ZYT36_DAY8_MEMORY02_SET_36130
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY02_SET_36130.TABLES: EKPO.PARAMETERS:
P_BUKRS TYPE EKPO-BUKRS.START-OF-SELECTION.
*直接让程序调用ZYT36_DAY8_MEMORY02_GET_36130
*程序之间调用
SUBMIT ZYT36_DAY8_MEMORY02_GET_36130
WITH P_BUKRS = P_BUKRS
*VIA SELECTION-SCREEN"显示被调用程序的选择画面
AND RETURN."调用其他人的程序,在其他人程序执行之后,返回继续执行自己的程序WRITE: '测试程序之间的调用,主程序结束'.

执行结果如下:
在这里插入图片描述
在这里插入图片描述
点返回
在这里插入图片描述
点返回
在这里插入图片描述
另外,若注释掉 AND RETURN 语句,执行结果及返回情况如下:
在这里插入图片描述
在这里插入图片描述
点返回
直接跳到编辑程序界面

若用ABAP内存,如果读到数了,得出的报表内容就是输入的公司代码(eg:1100)的采购内容报表,若没读到数,得出的报表就是初始赋值的公司代码(eg:1000)的采购内容报表
SET程序修改为如下:

*& Report ZYT36_DAY8_MEMORY02_SET_36130
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY02_SET_36130.TABLES: EKPO.PARAMETERS:
P_BUKRS TYPE EKPO-BUKRS.START-OF-SELECTION.**直接让程序调用ZYT36_DAY8_MEMORY02_GET_36130
**程序之间调用
*SUBMIT ZYT36_DAY8_MEMORY02_GET_36130
*WITH P_BUKRS = P_BUKRS.
**VIA SELECTION-SCREEN"显示被调用程序的选择画面,若没有这句话,则不会显示被调用程序的选择画面,而是直接走到被调用程序的START OF SELECTION,直接输出通过筛选条件筛选出来的报表
**AND RETURN."调用其他人的程序,在其他人程序执行之后,返回继续执行自己的程序
*
*WRITE: '测试程序之间的调用,主程序结束'.*ABAP内存
EXPORT P1 = P_BUKRS TO MEMORY ID 'ZBUKRS'."把数据放到ABAP内存里面
SUBMIT ZYT36_DAY8_MEMORY02_GET_36130.

GET程序修改为如下:

*& Report ZYT36_DAY8_MEMORY02_GET_36130
*&---------------------------------------------------------------------*
*&让用户输入公司代码,再把公司代码取出来,然后根据公司代码把EKPO这张表取出来
*用另外一个程序让用户选择输入,调用当前写的这个get程序
*&测试程序之间的调用
*&---------------------------------------------------------------------*
REPORT ZYT36_DAY8_MEMORY02_GET_36130.TABLES: EKPO.PARAMETERS:
P_BUKRS TYPE EKPO-BUKRS.INITIALIZATION.
P_BUKRS = '1000'.
*P_BUKS赋值
*需求是:从内存中取数据,取到了就用内存里面的数据作为筛选条件
*读取ABAP内存
DATA: LV_BUKRS TYPE EKPO-BUKRS."在进行import之前,对import的数据进行检查,如果能得回来最好,如果得不回来,就还用自己的,所以定义一个变量LV_BUKRS
IMPORT P1 = LV_BUKRS FROM MEMORY ID 'ZBUKRS'.
IF LV_BUKRS IS NOT INITIAL.P_BUKRS = LV_BUKRS."如果读回来了,就用当前的值给控件的值赋一个值,若没读回来,默认的就是初始赋的1000
ENDIF.
START-OF-SELECTION.SELECT EBELN,EBELP,BUKRSFROM EKPOINTO TABLE @DATA(LT_EKPO)WHERE BUKRS = @P_BUKRS."BUKRS是公司代码IF SY-SUBRC = 0.CL_DEMO_OUTPUT=>DISPLAY( LT_EKPO ).ENDIF.

在这里插入图片描述

tips:鼠标点关键字 点F1会弹出语法帮助

总结

相关文章:

ABAP开发-内存管理

系列文章目录 文章目录 系列文章目录前言一、概述二、程序间调用三、外部会话和内部会话四、SAP内存与ABAP内存五、实例总结 前言 一、概述 内存是程序之间为了传递数据而使用的共享存储空间&#xff0c;在每个程序里使用的内存有SAP内存和ABAP内存 SAP内存分类 SAP内存 主会…...

【Ajax】跨域

文章目录 1 同源策略1.1 index.html1.2 server.js 2 如何解决跨域2.1 JSONP2.1.1 JSONP 原理2.1.2 JSONP 实践2.1.3 jQuery 中的 JSONP 2.2 CORS2.2.1 CORS实践 3 server.js 1 同源策略 同源策略(Same-Origin Policy)最早由 Netscape 公司提出&#xff0c;是浏览器的一种安全策…...

yii 常用一些调用

yii 常用一些调用 (增加中) 调用YII框架中 jquery&#xff1a;Yii::app()->clientScript->registerCoreScript(‘jquery’); framework/web/js/source的js,其中registerCoreScript key调用的文件在framework/web/js/packages.php列表中可以查看 在view中得到当前contro…...

网页版五子棋——用户模块(服务器开发)

前一篇文章&#xff1a;网页版五子棋—— WebSocket 协议-CSDN博客 目录 前言 一、编写数据库代码 1.数据库设计 2.配置 MyBatis 3.创建实体类 4.创建 UserMapper 二、前后端交互接口 1.登录接口 2.注册接口 3.获取用户信息 三、服务器开发 1.代码编写 2.测试后端…...

以RK3568为例,ARM核心板如何实现NTP精准时间同步?

背景 网络时间协议NTP&#xff08;Network TimeProtocol&#xff09;是用于互联网中时间同步的标准互联网协议&#xff0c;可以把计算机的时间同步到某些时间标准。NTP对于我们产品来说有什么用呢&#xff0c;简单的讲&#xff0c;当你的设备时间不准确了&#xff0c;你可以接…...

Twitter(X)2024最新注册教程

Twitter 现名为X&#xff0c;因为图标是一只小鸟的形象&#xff0c;大家也叫它小蓝鸟&#xff08;埃隆马斯克于 2023 年对该平台进行了品牌重塑&#xff09;&#xff0c;目前仍然是全球最受欢迎的社交媒体和微博平台之一&#xff0c;全球活跃用户量大概在4.5亿。尤其是欧美国家…...

10.桥接模式设计思想

10.桥接模式设计思想 目录介绍 01.桥接模式基础 1.1 桥接模式由来1.2 桥接模式定义1.3 桥接模式场景1.4 桥接模式思考1.5 解决的问题 02.桥接模式实现 2.1 罗列一个场景2.2 桥接结构2.3 桥接基本实现2.4 有哪些注意点 03.桥接实例演示 3.1 需求分析3.2 代码案例实现3.3 是否可…...

Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized

这里是Themberfue 在上一节的最后&#xff0c;我们讨论两个线程同时对一个变量累加所产生的现象 在这一节中&#xff0c;我们将更加详细地解释这个现象背后发生的原因以及该如何解决这样类似的现象 线程安全问题 public class Demo15 {private static int count 0;public …...

(已解决)Dependency “ ” not found 细谈

剖析原因&#xff1a;依赖在pom文件中引用后&#xff0c;然后ReLoad&#xff0c;此依赖会在你配置的本地仓库里面找&#xff0c;并下载下来&#xff0c;他报not found就是没有找到。 本地仓库的位置&#xff1a; 进一步深究&#xff1a;在本地仓库找的时候&#xff0c;他又会…...

网络编程、UDP、TCP、三次握手、四次挥手

一、初识网络编程 网络编程的概念&#xff1a;在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件等等。 不管是什么场景&#xff0c;都是计算机和计算机之间通过网络进行…...

程序员的生活周刊 #7:耐克总裁被裁记

0. 庙宇 这张图来自 Tianshu Liu&#xff0c; 被树木环绕的宝塔庙宇 1. 耐克总裁 耐克最近的总裁 John Donahoe 干了 5 年&#xff0c;终于被裁掉了。 这位总裁即不了解球鞋文化&#xff0c;也没有零售经验&#xff0c;但不懂事的董事会还是聘用它&#xff0c;寄托把耐克从运…...

sparkSQL的UDF,最常用的regeister方式自定义函数和udf注册方式定义UDF函数 (详细讲解)

- UDF&#xff1a;一对一的函数【User Defined Functions】 - substr、split、concat、instr、length、from_unixtime - UDAF&#xff1a;多对一的函数【User Defined Aggregation Functions】 聚合函数 - count、sum、max、min、avg、collect_set/list - UDTF&#xff1a;…...

【Ubuntu20】VSCode Python代码规范工具配置 Pylint + Black + MyPy + isort

​ 常用工具&#xff1a; 在 Ubuntu20 下&#xff0c;有以下常见的 Python 代码工具&#xff1a; 静态分析工具&#xff1a; Pylint 和 Flake8 功能范围&#xff1a;Pylint功能非常强大&#xff0c;能够检查代码质量、潜在错误、代码风格、复杂度等多个方面, 并生成详细的报…...

游戏提示错误:xinput1_3.dll缺失?四种修复错误的xinput1_3.dll文件

在计算机的运行过程中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中与“xinput1_3.dll”相关的问题也并不罕见。“xinput1_3.dll”是一个在许多游戏和多媒体应用程序运行过程中可能会用到的动态链接库文件。当我们启动某些游戏时&#xff0c;可能会突然弹出一个错…...

YOLOv11融合IncepitonNeXt[CVPR2024]及相关改进思路

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2303.16900 代码链接&#xff1a;https://github.com/sail-sg/inceptionnext 论文速览&#xff1a;受 ViT 长距离建模能力的启发&#xff0c;大核卷积…...

[Web安全 网络安全]-学习文章汇总导航(持续更新中)

文章目录&#xff1a; 一&#xff1a;学习路线资源 1.路线 2.资源 二&#xff1a;工具 三&#xff1a;学习笔记 1.基础阶段 2.进阶阶段 四&#xff1a;好的参考 五&#xff1a;靶场 博主对网络安全很感兴趣&#xff0c;但是不知道如何取学习&#xff0c;自己一步一步…...

Docker Compose部署Rabbitmq(Docker file安装延迟队列)

整个工具的代码都在Gitee或者Github地址内 gitee&#xff1a;solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github&#xff1a;GitHub - ZeroNing/solomon-parent: 这个项目主要是…...

SpringBoot+FileBeat+ELK8.x版本收集日志

一、准备环境 1、ElasticSearch&#xff1a;8.1.0 2、FileBeat&#xff1a;8.1.0 3、Kibana&#xff1a;8.1.0 4、logstach&#xff1a;8.1.0 本次统一版本&#xff1a;8.1.0,4个组件&#xff0c;划分目录&#xff0c;保持版本一致。 说明&#xff1a;elasticsearch和kib…...

本地模型导入ollama

文章目录 Modelfile模板导入到 ollama Modelfile模板 在本地模型目录下创建 Modelfile FROM ./qwen2.5-7b-instruct-q4_k_m.gguf# 设定温度参数为1 [更高的更具有创新性&#xff0c;更低的更富有连贯性] PARAMETER temperature 1 # 将上下文窗口大小设置为4096&#xff0c;这…...

scala Map训练

Map实训内容&#xff1a; 1.创建一个可变Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组)&#xff0c;初始化为包含几本你喜欢的书籍信息。 2.使用 操作符添加两本新的书籍到图书馆集合中。 3.根据书籍编号查询某一本特定的书籍信息&…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...