S32K3 工具篇8:如何移植RTD MCAL现有demo到其他K3芯片

news2024/9/24 2:34:14

S32K3 工具篇8:如何移植RTD MCAL现有demo到其他K3芯片

  • 一,文档简介
  • 二 ,平台以及移植步骤
    • 2.1 平台说明
    • 2.2 移植步骤
      • 2.2.1 拷贝工程并配置
        • 2.2.1.1 拷贝工程
        • 2.2.1.2 配置工程
      • 2.2.2 EB 工程配置
  • 三, 命令行编译及其结果测试
  • 四, S32DS工程移植以及测试
    • 4.1 S32DS 工程配置
    • 4.2 EB工程替换
    • 4.3 MCAL S32DS工程测试

一,文档简介

 从NXP的RTD4.0.0的release note里面可以看到,支持的芯片型号非常齐全:

在这里插入图片描述

图 1

从这点可以知道,RTD4.0.0是能够覆盖所有的S32K3系列的芯片的。但是如果想要现成的demo,比如MCAL的demo,可以看到在现成的demo路径下,比如:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0\examples\EBT

只有S32K344,S32K358,S32K388,S32K396,S32M276。
所以,如果实际使用中,使用的是其他的S32芯片,比如K312,虽然在RTD支持的范围内,但是却没有现成的demo使用,这个时候就需要自行做移植了。本文将讲解,如何在RTD4.0.0 K344 MCAL demo的基础上移植到S32K312,并且配置对应的EB工程。首先,实现在命令行的执行,成功之后,将能够工作的MCAL代码EB工程移植到S32DS里面。

二 ,平台以及移植步骤

2.1 平台说明

本文基于RTD4.0.0:SW32K3_S32M27x_RTD_R21-11_4.0.0
其余带有patch或者HF的版本,操作过程步骤一致!
硬件平台:S32K312 mini EVB 或者S32K312EVB
其他官方的EVB,比如S32K31XEVB ,或者客户自己的S32K3硬件板子也是一样步骤。
本文由于缺少官方EVB板子,所以是基于S32K312 mini EVB,结合P&E Multilink仿真器下载仿真。平台情况如下:
在这里插入图片描述

图 2

2.2 移植步骤

 参考demo可以是RTD4.0.0里面现有的任何一个demo,本文为了简化过程,以DIO为例:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0\examples\EBT\S32K3XX\Dio_Example_S32K344

2.2.1 拷贝工程并配置

2.2.1.1 拷贝工程
 为了不影响原有的RTD默认demo,这里直接拷贝一个Dio_TS_T40D34M40I0R0,打开路径:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins

拷贝Dio_TS_T40D34M40I0R0,另存一个文件夹,名字为:Dio_TS_T40D34M40I0R0_miniK312_doc
其余的芯片过程也是类似的,只需要注意把芯片名称以及相关配置改成需要的芯片即可。
打开文件夹:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0_miniK312_doc\examples\EBT\S32K3XX

拷贝一个Dio_Example_S32K344为Dio_Example_S32K312
在这里插入图片描述

图 3

打开路径:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0_miniK312_doc\examples\EBT\S32K3XX\Dio_Example_S32K312\TresosProject

修改EB工程Dio_Example_S32K344为Dio_Example_S32K312
在这里插入图片描述

图 4
2.2.1.2 配置工程

进入到新建的Dio_Example_S32K312,使用VScode打开该路径,并且保存VScode workspace到这个路径。
修改project_parameters.mk :

GCC_DIR = C:/NXP/S32DS.3.5_RTD400/S32DS/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi
TRESOS_DIR = C:/EB/tresos_29_0_0
PLUGINS_DIR = C:/NXP/SW32K3_S32M27x_RTD_R21-11_4.0.0/eclipse/plugins
EXAMPLE_DERIVATIVE = S32K312
TRESO_PROJECT_NAME = Dio_Example_S32K312

在这里插入图片描述

图 5
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/01117799c97c47d9843ee456103ada3d.png)
图6

Check_build_params.mk,删掉如下代码:

ifeq ("$(wildcard $(T32_DIR)/bin/windows/t32marm.exe)","")
    $(error Invalid path set to Trace32. \
    The provided path: from project_parameters.mk T32_DIR=$(T32_DIR) is invalid!)
endif

这部分是给lauterbach trace32用的,如果不删,会报错。

2.2.2 EB 工程配置

下面予以EB工程的配置,打开EB tresos Studio 29.0软件,导入工程。
File->Import->General->Existing Projects into Workspace,添加EB 工程路径:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0_miniK312_doc\examples\EBT\S32K3XX\Dio_Example_S32K312\TresosProject\Dio_Example_S32K312

注意,不要点击copy projects into workspace!!!
选中工程Dio_Example_S32K344,右击鼠标,rename 名字为:Dio_Example_S32K312
在这里插入图片描述

图 7

双击someId,打开配置模块。
打开Resource模块,General->ResourceSubderivative 选择为目标芯片partbumber,这里选择:s32k312_hdqfp172
在这里插入图片描述

图 8

保存之后,会发现报很多的错误如下:
在这里插入图片描述

图 9

这里不需要太担心,因为如果仔细分析就会发现,实际上是因为K344上面有的很多模块,K312没有这个模块导致,所以进入报错提示位置,删掉没有的K312模块。
Mcu->McuModeSettingConf->McuPeripheral
点进去可以发现,如果K312没有的模块,已经在peripheral Name的前面有个红叉标志。
在这里插入图片描述

图 10

直接的方法就是,把报错的项目全部删掉,一共有41个。
删除之后,可以发现,所有问题已经没有了:
在这里插入图片描述

图11

选中工程中someId,右击,generate code,可以看到,能够生成工程,并且没有错误。
在这里插入图片描述

图 12

这里不要掉以轻心,虽然到此能够生成代码,并且没有报错,但是实际上还有个地方需要修改。
这里,我们可以先关闭EB tresos工具,然后在VScode里面打开terminal->new terminal, 输入:make generate
可以看到如下结果:
在这里插入图片描述

图13

看到报错的内容是mcucgm0_clockMux0/McuClockMux0Divider5, McuClockMux0Divider6, McuClkMux0Div5_En, McuClkMux0Div6_En.
这里打开S32KRM,可以看到实际上K312是没有MUX_0_5,6的。
在这里插入图片描述

图 14

这时候,再打开EB tresos 软件,界面上也确实有这样的报错,并且在mcucgmClockMux0里面,也没有divider 5,6选项。
在这里插入图片描述

图15

这个时候不需要担心,有个办法可以修改掉这个问题。
关闭EB tresos工具,文本打开:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0_miniK312_doc\examples\EBT\S32K3XX\Dio_Example_S32K312\TresosProject\Dio_Example_S32K312\config\Mcu.xdm

文件。直接在文件里面关闭divider 5,6的使能与数值配置。
修改如下代码:

                        </d:var>
                        <d:var name="McuClkMux0Div5_En" type="BOOLEAN" 
                               value="true">
                          <a:a name="IMPORTER_INFO">
                            <a:v>@CALC</a:v>
                            <a:v>@DEF</a:v>
                          </a:a>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>
                        </d:var>
                        <d:var name="McuClkMux0Div5_Divisor" type="INTEGER" 
                               value="3">
                          <a:a name="IMPORTER_INFO" value="@DEF"/>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>
                        </d:var>
                        <d:var name="McuClkMux0Div5Trigger" type="ENUMERATION" 
                               value="COMMON_TRIGGER_DIVIDER_UPDATE">
                          <a:a name="IMPORTER_INFO" value="@DEF"/>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>
                        </d:var>
                        <d:var name="McuClockMux0Divider5_Frequency" 
                               type="FLOAT" value="1.2E7">
                          <a:a name="IMPORTER_INFO">
                            <a:v>@DEF</a:v>
                            <a:v>@CALC</a:v>
                          </a:a>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>
                        </d:var>
                        <d:var name="McuClkMux0Div6_En" type="BOOLEAN" 
                               value="true">
                          <a:a name="IMPORTER_INFO">
                            <a:v>@CALC</a:v>
                            <a:v>@DEF</a:v>
                          </a:a>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>
                        </d:var>
                        <d:var name="McuClkMux0Div6_Divisor" type="INTEGER" 
                               value="0">
                          <a:a name="IMPORTER_INFO" value="@DEF"/>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>
                        </d:var>
                        <d:var name="McuClkMux0Div6Trigger" type="ENUMERATION" 
                               value="COMMON_TRIGGER_DIVIDER_UPDATE">
                          <a:a name="IMPORTER_INFO" value="@DEF"/>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>
                        </d:var>
                        <d:var name="McuClockMux0Divider6_Frequency" 
                               type="FLOAT" value="4.8E7">
                          <a:a name="IMPORTER_INFO">
                            <a:v>@DEF</a:v>
                            <a:v>@CALC</a:v>
                          </a:a>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>

修改为:

                        </d:var>
                        <d:var name="McuClkMux0Div5_En" type="BOOLEAN" 
                               value="false">
                          <a:a name="IMPORTER_INFO">
                            <a:v>@DEF</a:v>
                            <a:v>@CALC</a:v>
                          </a:a>
                          <a:a name="VARIANTS" type="Variant">
                            <variant:pbvcond>
                              <variant:criterion 
                                                 value="ASPath:/EB/PostBuildSelectable/PostBuildSelectableCriterion"/>
                              <variant:cond>
                                <variant:tst expr="0"/>
                              </variant:cond>
                            </variant:pbvcond>
                          </a:a>
                        </d:var>
                        <d:var name="McuClkMux0Div5_Divisor" type="INTEGER" 
                               value="3">
                          <a:a name="IMPORTER_INFO" value="@DEF"/>
                        </d:var>
                        <d:var name="McuClkMux0Div5Trigger" type="ENUMERATION" 
                               value="COMMON_TRIGGER_DIVIDER_UPDATE"/>
                        <d:var name="McuClockMux0Divider5_Frequency" 
                               type="FLOAT" value="0.0">
                          <a:a name="IMPORTER_INFO">
                            <a:v>@CALC</a:v>
                            <a:v>@DEF</a:v>
                          </a:a>
                        </d:var>
                        <d:var name="McuClkMux0Div6_En" type="BOOLEAN" 
                               value="false">
                          <a:a name="IMPORTER_INFO">
                            <a:v>@DEF</a:v>
                            <a:v>@CALC</a:v>
                          </a:a>
                        </d:var>
                        <d:var name="McuClkMux0Div6_Divisor" type="INTEGER" 
                               value="0">
                          <a:a name="IMPORTER_INFO" value="@DEF"/>
                        </d:var>
                        <d:var name="McuClkMux0Div6Trigger" type="ENUMERATION" 
                               value="COMMON_TRIGGER_DIVIDER_UPDATE">
                          <a:a name="IMPORTER_INFO" value="@DEF"/>
                        </d:var>
                        <d:var name="McuClockMux0Divider6_Frequency" 
                               type="FLOAT" value="0.0">
                          <a:a name="IMPORTER_INFO">
                            <a:v>@DEF</a:v>
                            <a:v>@CALC</a:v>
                          </a:a>

主要是把文件中隐藏的Mux0Divider5,6的使能和frequency value值改掉。
重新打开,可以看到,报错消失,EB工程someId,右击,generate project,代码也能够无报错正常生成。
这里有个小技巧:为了防止之前生成代码和最新EB工程的不匹配,也可以把:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0_miniK312_doc\examples\EBT\S32K3XX\Dio_Example_S32K312\generate

文件夹:src,include清空,然后在EB tresos里面,generate project的时候重新生成。
关闭EB软件,在Vscode工程的terminal里面再次输入:make generate
可以看到,这时候已经没有任何问题了:
在这里插入图片描述

图 16

三, 命令行编译及其结果测试

从上面的步骤,已经完成了一个RTD 现有K344工程到K312 MCAL工程的代码以及EB配置移植,下面通过VScode, 命令行形式,生成main.elf, 然后下载测试。
命令:

make generate
make build

main.elf可以在如下文件夹路径找到:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0_miniK312_doc\examples\EBT\S32K3XX\Dio_Example_S32K312\out

关于测试,因为有main.elf 文件,以及PE Multilink,可以在S32DS里面新建一个K312的工程,debug接口是PE Multilink的,编译生成代码之后,拷贝main.elf到新建工程的:Debug_FLASH文件夹,在S32DS debug configuration 中,C/C++ application直接替换成main.elf,下载测试。
在这里插入图片描述

图 17

可以看到,已经能够进入debug界面,而且实际测试板上LED灯能够成功闪烁。
说明MCAL 代码porting到K312已经成功。

四, S32DS工程移植以及测试

在之前RTD MCAL EB 工程移植到S32DS的K344工程上,直接修改工程名,修改工程芯片型号,修改ld文件,驱动文件包含等,然后清理工程,编译工程即可。
这里假定已经拥有了RTD MCAL 工程导入到S32DS的工程,然后在此基础上修改。

4.1 S32DS 工程配置

因为在原始RTD 的文件夹下面拷贝过文件夹,所以在S32DS的工程Mcal_Plugins->Link_Source里面多了之前新建的文件夹,需要把这个文件夹不参与编译:

选择Dio_TS_T40D34M40I0R0_minik312_doc,右击Build path->remove from->Debug_FLASH.
在这里插入图片描述

图 18

工程名从Mcal_Dio_S32K344_RTD400 rename为Mcal_Dio_S32K312_RTD400。
修改如下工程配置,project->properties:
(1)preprocessor
S32K344->S32K312
在这里插入图片描述

图 19

(2) Sstandard S32DS C Linker->General
修改

"${MCAL_PLUGIN_PATH}/Platform${MCAL_MODULE_NAME_SUFFIX}/build_files/gcc/linker_flash_s32k344.ld"

"${MCAL_PLUGIN_PATH}/Platform${MCAL_MODULE_NAME_SUFFIX}/build_files/gcc/linker_flash_s32k312.ld"

修改之后,点击apply and close
下面将main.c替换为

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0_miniK312_doc\examples\EBT\S32K3XX\Dio_Example_S32K312\src\main.c

添加头文件:

#include "Port_Cfg.h"

屏蔽代码:

// #include "check_example.h"
//    Exit_Example(TRUE);

4.2 EB工程替换

拷贝:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Dio_TS_T40D34M40I0R0_miniK312_doc\examples\EBT\S32K3XX\Dio_Example_S32K312\TresosProject\Dio_Example_S32K312\config

里面所有的.xdm文件到S32DS的EB文件夹,替换老的.xdm:

Mcal_Dio_S32K312_RTD400\Tresos_Project\Mcal_Dio_S32K344_RTD400\config

使用EB tresos打开上面的工程,并且Generate project,生成成功之后,关闭EB工程,回到S32DS

4.3 MCAL S32DS工程测试

先clean project:project->clean project, 然后编译代码。
在这里插入图片描述

图 20

可以看到能够成功编译,然后RUN->debug configuration选择下载代码 xxx_Debug_FLASH_PNE,这里注意,需要把Device从S32K344改变成S32K312
在这里插入图片描述

图 21

配置成功之后,点击debug,下载代码并且仿真,结果如下:
在这里插入图片描述

图 22

可以看到,能够成功进入debug,并且实际上板子上的灯闪烁,说明从RTD MCAL 工程demo移植到S32K312 S32DS也成功运行。

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

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

相关文章

【学习笔记】Linux系统基础知识3 —— cd命令详解

一、前期准备 1.已经正确安装并成功进入Linux系统 说明&#xff1a;本实验采用的 Redhat 系统&#xff08;因系统不一致&#xff0c;可能部分显示存在差异&#xff09; 二、学习内容 提示&#xff1a;学习Linux系统基础命令 cd 命令详解 1、cd命令 1. 功能说明 cd 命令用…

AI模型对比研究员创意

大语言模型可以接受训练&#xff0c;完成许多任务。其中最广为人知的用途之一是作为生成式人工智能&#xff1a;当收到提示或被问到问题时&#xff0c;它们可以生成文本作为答复。例如&#xff0c;公开的大语言模型 ChatGPT 可以根据用户输入生成文章、诗歌和其他文本形式。 任…

kettle从入门到精通 第八十七课 ETL之kettle kettle文件上传

1、kettle本身文件上传功能不是很友好&#xff0c;甚至是不能直接使用&#xff0c;需要调整文件上传接口才可以正常接收到文件&#xff0c;本次讲解内容主要是通过自定义插件解决这个问题。 2、通过springboot 编写简单demo&#xff0c;模拟文件上传&#xff0c;接口支持三个参…

vue-router路由(重定向,嵌套,动态路由匹配,命名,高亮,守卫)

一、前端路由的概念与原理 路由router就是对应关系。分为前端路由和后端路由。 1后端路由 后端路由指的是&#xff1a;请求方式、请求地址与function处理函数之间的对应关系。在node.js中&#xff0c;express理由的基本用法如下&#xff1a; const express require(expres…

Simple Calculator(算法初阶,代码基础,“纯”手撕)

简单计算器&#xff1a;仅适用无括号加减乘除&#xff0c;算法初阶&#xff0c;代码基础&#xff0c;不调库或模块“纯”手撕。 (笔记模板由python脚本于2024年09月22日 12:08:02创建&#xff0c;本篇笔记适合喜欢用python解决实际问题的coder翻阅) 【学习的细节是欢悦的历程】…

有关在.Net Core中以TEXT类型将Json格式字段存到数据库的学习

导言 在写个值日接口时发现值日表中的值日时段是可以分多段的&#xff0c;想了想可以使用Json类型来存&#xff0c;不过之前没接触过在后端操作Json格式存到数据库的情况&#xff0c;之后学也了解到了一下方法来实现&#xff0c;故记录一下。 过程 从前端到后端再到数据库的 JS…

图片切换示例【JavaScript】

在 JavaScript 中实现图片切换可以通过多种方法&#xff0c;下面是一个简单的示例&#xff0c;使用 HTML、CSS 和 JavaScript 来实现图片的切换效果。 实现效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta c…

VMware Workstation 17.5安装教程

目录 软件介绍 1、下载安装包 2、安装虚拟机 3、卸载虚拟机 软件介绍 VMware&#xff08;虚拟机&#xff09;是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统&#xff0c;通过它可在一台电脑上同时运行更多的Microsoft Windows、Linux…

看Threejs好玩示例,学习创新与技术(React-three-fiber)

什么&#xff0c;竟有人把ThreeJS和React绑定在一起&#xff0c;混着用&#xff1f; 1、VUE劫持问题 暂先把今天的问题先放一边&#xff0c;先简单回顾下vue劫持的情况。vue会把data里面的数据自动转换为属性&#xff0c;方便界面与数据交互。这本身是没有任何问题&#xff0…

快手旗下——Kolors模型部署与使用指南

以下是按照要求重写后的 Kolors 模型部署与使用指南&#xff0c;文章风格偏技术性&#xff0c;但保持简洁和易懂的特点&#xff1a; Kolors 模型部署与使用指南 一、Kolors 简介 Kolors 是由快手 Kolors 团队开发的文本到图像生成模型&#xff0c;基于大规模的潜在扩散技术。…

找不到libcef.dll怎么办,libcef.dll丢失怎么重新安装

在计算机使用过程中&#xff0c;我们常常会遇到各种问题。其中&#xff0c;libcef.dll丢失是一个常见的错误提示。libcef.dll是Chromium Embedded Framework的动态链接库&#xff0c;它是许多应用程序和游戏所必需的组件。当libcef.dll丢失或损坏时&#xff0c;可能会导致程序无…

2025秋招内推|招联金融

【投递方式】 直接扫下方二维码&#xff0c;使用内推码: igcefb 【招聘岗位】 深圳&#xff0c;武汉&#xff1a; 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策划 产品运营 客户体验管理 风险管理 资产管理 【校招流程】 简历投递&#xff1a;9月…

死磕P7: JVM内存划分必知必会(一)

这是「死磕P7」系列第 001 篇文章&#xff0c;欢迎大家来跟我一起 死磕 100 天&#xff0c;争取在 2025 年来临之际&#xff0c;给自己一个交代。 JVM 内存区域划分是面试常考点&#xff0c;属于死记硬背型&#xff0c;比较让人头大的是不同版本的 JDK 具有不同的划分方式&…

计算机毕业设计 基于Python的医疗预约与诊断系统 Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

联合复现!考虑最优弃能率的风光火储联合系统分层优化经济调度!

前言 目前&#xff0c;尽管不断地追逐可再生能源全额消纳方式&#xff0c;大幅减小弃风弃光电量&#xff0c;但是若考虑风电、光伏发电的随机属性&#xff0c;全额消纳可能造成电网峰谷差、调峰难度及调峰调频等辅助服务费用的剧增&#xff0c;引起电网潜在运行风险。因此&…

英特尔AI加速器Gaudi 3下周发布,挑战NVIDIA统治地位!

英特尔正稳步推进其2024年计划&#xff0c;备受瞩目的AI加速器Gaudi3预计将于下周震撼登场。这款被誉为英特尔AI英雄的产品&#xff0c;专注于处理大规模训练和推理任务&#xff0c;拥有无与伦比的扩展能力。面对市场对高效能半导体的旺盛需求&#xff0c;英特尔首席执行官帕特…

Snap 发布新一代 AR 眼镜,有什么特别之处?

Snap 发布新一代 AR 眼镜&#xff0c;有什么特别之处&#xff1f; Snap 简介 新一代的 AR 眼镜特点 Snap 简介 Snap 公司成立于 2010 年&#xff0c;2017 年美国东部时间 3 月 2 日上午 11 时许&#xff0c;在纽交所正式挂牌交易&#xff0c;股票代码为 “SNAP”。其旗下的核…

力扣 2529.正整数和负整数的最大计数

文章目录 题目介绍解法 题目介绍 解法 采用红蓝染色体法&#xff0c;具体介绍参考 红蓝染色体法 通过红蓝染色体法可以找到第一个大于大于target的位置&#xff0c;使所以本题可以找第一个大于0的位置&#xff0c;即负整数的个数&#xff1b;数组长度 - 第一个大于1的位置即正…

2000-2012年各地级市市长特征信息数据/市长特征信息大全数据

2000-2012年各地级市市长特征信息数据 1、时间&#xff1a;2000-2012年 2、来源&#xff1a;百度搜索手工整理 3、指标&#xff1a;省级政区代码、省级政区名称、地市级政区代码、地市级政区名称、年份、市长姓名、出生年份、出生月份、籍贯省份代码、籍贯省份名称、籍贯地市…