英飞凌 TC3XX单片机HSM内核开发-Secure Boot(七)

news2024/9/21 11:02:17

HSM UCB配置

UCB_HSM_ORIG 和 UCB_HSM_COPY配置描述

HSMCOTP保护配置了专用HSM闪存扇区的HSM独占和一次性可编程(OTP)保护。它提供了通过两个配置集增量添加此类保护到闪存扇区的可能性:

  • 从UCB_HSMCOTP0_ORIG和UCB_HSMCOTP0_COPY派生的HSMCOTP0配置集。
  • 从UCB_HSMCOTP1_ORIG和UCB_HSMCOTP1_COPY派生的HSMCOTP1配置集。

HSMCOTP使用案例

当HSMCOTP0和HSMCOTP1配置集都处于UNLOCKED(未锁定)状态时,所有主设备都可以配置HSMCOTP保护。如果HSMCOTP0配置集被确认(CONFIRMED),则只有HSM被允许编程HSMCOTP1配置集。如果HSMCOTP1也被确认,则完整的HSMCOTP配置集将受到OTP保护。

HSM配置安装

UCB_HSM_ORIG 确认状态UCB_HSM_COPY 确认状态保护安装情况
UNREAD(未读取)不关心重置值为默认保护。
UNLOCKED(未锁定)不关心从UCB_HSM_ORIG安装保护。
CONFIRMED(已确认)不关心从UCB_HSM_ORIG安装保护。
ERRORED(错误)UNLOCKED(未锁定)从UCB_HSM_COPY安装保护。
ERRORED(错误)CONFIRMED(已确认)从UCB_HSM_COPY安装保护。
ERRORED(错误)ERRORED(错误)安装默认保护。SSW退出并出现错误。

UCB_HSMCOTP0_ORIG 确认状态
UCB_HSMCOTP0_ORIG的确认状态由DMU_HF_CONFIRM1.PROINHSMCOTP0O指示。

UCB_HSMCOTP0_COPY 确认状态
UCB_HSMCOTP0_COPY的确认状态由DMU_HF_CONFIRM1.PROINHSMCOTP0C指示。

UCB_HSMCOTP1_ORIG 确认状态
UCB_HSMCOTP1_ORIG的确认状态由DMU_HF_CONFIRM1.PROINHSMCOTP1O指示。

UCB_HSMCOTP1_COPY 确认状态
UCB_HSMCOTP1_COPY的确认状态由DMU_HF_CONFIRM1.PROINHSMCOTP1C指示。

HSMCOTP0 确认状态
如果UCB_HSMCOTP0_ORIG的确认状态是UNLOCKED或CONFIRMED,则HSMCOTP0的确认状态就是UCB_HSMCOTP0_ORIG的状态;否则,它是UCB_HSMCOTP0_COPY的状态。

HSMCOTP1 确认状态
如果UCB_HSMCOTP1_ORIG的确认状态是UNLOCKED或CONFIRMED,则HSMCOTP1的确认状态就是UCB_HSMCOTP1_ORIG的状态;否则,它是UCB_HSMCOTP1_COPY的状态。

HSMCOTP保护配置安装

  • 初始保护:如果HSMCOTP0的确认状态是UNLOCKED或CONFIRMED,则将DMU_SP_PROCONHSMCFG、DMU_SP_PROCONHSMCBS、DMU_SP_PROCONHSMCX0、DMU_SP_PROCONHSMCX1、DMU_SP_PROCONHSMCOTP0和DMU_SP_PROCONHSMCOTP1寄存器的内容初始化为HSMCOTP0。
  • 后续保护:如果HSMCOTP1的确认状态是CONFIRMED,则将HSMCOTP1与初始值进行逻辑或(OR)操作。
  • 如果HSMCOTP0或HSMCOTP1的任一确认状态是ERRORED,则安装默认保护。

UCB_HSMCOTP0/1_ORIG 和 UCB_HSMCOTP0/1_COPY 擦除保护

当至少一个HSMCOTP配置集的确认状态为CONFIRMED或ERRORED时,UCB_HSMCOTP0_ORIG、UCB_HSMCOTP0_COPY、UCB_HSMCOTP1_ORIG和UCB_HSMCOTP1_COPY受到擦除保护。

UCB_HSMCOTP0_ORIG 和 UCB_HSMCOTP0_COPY 编程保护

当满足以下任一条件时,所有主设备都不能对UCB_HSMCOTP0_ORIG和UCB_HSMCOTP0_COPY进行编程:

  • HSMCOTP0配置集的确认状态是CONFIRMED或ERRORED。
  • HSMCOTP1配置集的确认状态是ERRORED。

UCB_HSMCOTP1_ORIG 和 UCB_HSMCOTP1_COPY 编程保护

除了HSM外,当满足以下任一条件时,所有主设备都不能对UCB_HSMCOTP1_ORIG和UCB_HSMCOTP1_COPY进行编程:

  • HSMCOTP0配置集的确认状态是CONFIRMED。

当满足以下任一条件时,包括HSM在内的所有主设备都不能对UCB_HSMCOTP1_ORIG和UCB_HSMCOTP1_COPY进行编程:

  • HSMCOTP0配置集的确认状态是ERRORED。
  • HSMCOTP1配置集的确认状态是CONFIRMED或ERRORED。

UCB_HSMCOTP0/1_ORIG 和 UCB_HSMCOTP0/1_COPY 读取保护

所有片上总线主设备都可以读取UCB_HSMCOTP0/1_ORIG和UCB_HSMCOTP0/1_COPY。

UCB描述

在这里插入图片描述

const Ifx_UCB_HSMCOTPX_t ucb_hsmcotp0_orig =
{
    /**< \brief 0x000: 当用户拥有控制权时的DF1模式 */
    .PROCONUSR.B.MODE = SingleEnded,

    /**< \brief 0x004: HSM代码扇区的启动选择 */
    .PROCONHSMCBS.B.BOOTSEL0 = SectorHSM6XSearched,
    .PROCONHSMCBS.B.BOOTSEL1 = SectorHSM8XSearched,
    .PROCONHSMCBS.B.BOOTSEL2 = SectorHSM0XSearched,
    .PROCONHSMCBS.B.BOOTSEL3 = SectorHSM0XSearched,

    /**< \brief 0x008: HSM代码扇区的HSM独占保护配置 */
    .PROCONHSMCX0.U = 0,

    /**< \brief 0x00C: HSM代码扇区的HSM独占保护配置 */
    .PROCONHSMCX1.U = 0,

    /**< \brief 0x010: HSM PFLASH扇区x的HSM代码永远锁定 */
    .PROCONHSMCOTP0.U = 0,

    /**< \brief 0x014: HSM PFLASH扇区x的HSM代码永远锁定 */
    .PROCONHSMCOTP1.U = 0,

    /**< \brief 0x018: HSM保护配置 */
    .PROCONHSMCFG.B.HSMBOOTEN = HsmBootIsEnabled, // HSM启动使能
    .PROCONHSMCFG.B.SSWWAIT = SswWaitsForAcknowledgmentFromHsm, // 系统软件等待HSM确认
    .PROCONHSMCFG.B.HSMDX = HsmDataSectorsAreNotExclusiveToHsm, // HSM数据扇区不对HSM独占
    .PROCONHSMCFG.B.HSMRAMKEEP = SswClearsHsmRamAfterAllPowerOnResetsAndSystemResets, // 系统软件在所有上电复位和系统复位后清除HSM RAM
    .PROCONHSMCFG.B.HSMENPINS = HsmCanForcePins, // HSM可以强制控制引脚
    .PROCONHSMCFG.B.HSMENRES = HsmCannotTriggerResets, // HSM不能触发复位
    .PROCONHSMCFG.B.DESTDBG = DebugEntryIsNonDestructive, // 调试入口是非破坏性的
    .PROCONHSMCFG.B.BLKFLAN = FunctionsAllowedOnAllFlashRanges, // 允许在所有闪存范围内的功能

    .confirmation = UNLOCKED, // 确认状态为未锁定
};

在这个结构体初始化中:

  • .PROCONUSR.B.MODE 设置了DF1模式,这里使用 SingleEnded 表示单端模式。
  • .PROCONHSMCBS 结构体定义了HSM代码扇区的启动选择,这里 BOOTSEL0BOOTSEL3 被设置为搜索不同的扇区。
  • .PROCONHSMCX0.PROCONHSMCX1 结构体提供了HSM代码扇区的独占保护配置,这里都被清零,可能表示没有启用额外的保护。
  • .PROCONHSMCOTP0.PROCONHSMCOTP1 表示HSM PFLASH扇区的锁定配置,这里也被清零,可能表示初始状态未锁定。
  • .PROCONHSMCFG 结构体包含了HSM保护的多种配置选项,根据位字段的不同,设置了HSM的启动、系统软件的等待、数据扇区的独占性、RAM的保持、引脚的控制等。
  • .confirmation 成员设置为 UNLOCKED,表示这个配置是可以被编程或擦除的。

寄存器描述

PROCONUSR

在这里插入图片描述

/**
 * @brief 结构体定义
 */
typedef struct
{
    unsigned int MODE      : 2;  /**< @brief DF1用户模式控制 */
    unsigned int res       : 30; /**< @brief 保留位 */
} Ifx_PROCONUSR_Bits;

在这个位域结构体中:

  • MODE 占用2位,用于控制DF1(可能指某种功能模式或调试模式)的用户模式。
  • res 保留30位,通常在当前版本中不使用,为将来可能的功能保留。这些保留位在编程时应设置为0。
/**
 * @brief DF1用户模式控制
 */
typedef enum
{
    SingleEnded = 0,        /**< @brief 单端模式 */
    ComplementSensing,      /**< @brief 互补传感模式 */
} IfxDF1UserModeControl;

在这个枚举类型中:

  • SingleEnded 表示单端模式,这是默认的第一个值,通常设置为0。
  • ComplementSensing 表示互补传感模式。
PROCONHSMCBS

在这里插入图片描述
以下是给定结构体定义的中文注释:

/**
 * @brief 结构体定义
 */
typedef struct
{
    unsigned int BOOTSEL0  : 6;  /**< @brief 启动扇区选择 */
    unsigned int res0      : 2;  /**< @brief 保留位 */
    unsigned int BOOTSEL1  : 6;  /**< @brief 启动扇区选择 */
    unsigned int rese1     : 2;  /**< @brief 保留位 */
    unsigned int BOOTSEL2  : 6;  /**< @brief 启动扇区选择 */
    unsigned int res2      : 2;  /**< @brief 保留位 */
    unsigned int BOOTSEL3  : 6;  /**< @brief 启动扇区选择 */
    unsigned int res3      : 2;  /**< @brief 保留位 */
} Ifx_PROCONHSMCBS_Bits;

在这个位域结构体中:

  • BOOTSEL0BOOTSEL3 每个成员占用6位,用于选择不同的启动扇区。
  • res0res3 每个成员占用2位,是保留位,通常在当前版本中不使用,为将来可能的功能保留。这些保留位在编程时应设置为0。
    以下是给定枚举类型的中文注释:
/**
 * @brief 枚举定义:HSM启动扇区选择
 */
typedef enum
{
    SectorHSM0XSearched = 0,  /**< @brief 搜索HSM0X扇区 */
    SectorHSM1XSearched,      /**< @brief 搜索HSM1X扇区 */
    // ......
    SectorHSM37XSearched,     /**< @brief 搜索HSM37X扇区 */
    SectorHSM38XSearched,     /**< @brief 搜索HSM38X扇区 */
    SectorHSM39XSearched,     /**< @brief 搜索HSM39X扇区 */
} IfxHsmBootSectorSelection;

在这个枚举类型中,每个成员代表一个HSM(高安全模块)启动扇区,从SectorHSM0XSearchedSectorHSM39XSearched。这些枚举值用于标识在系统启动过程中应该搜索的特定HSM扇区。枚举值从0开始,每个值递增,表示它们可以被直接用作数组索引或位字段中的偏移量。

对应的地址与索引偏移量的公式为:

HSM启动地址 = 0x80000000 + HSM扇区索引 * 0x4000

PROCONHSMCX0
PROCONHSMCX1

在这里插入图片描述

/**
 * @brief HSM接口保护配置的结构体定义
 */
typedef struct
{
    unsigned int HSM0X  : 1;  /**< @brief PFLASH扇区x的HSM代码独占 */
    unsigned int HSM1X  : 1;  /**< @brief PFLASH扇区x的HSM代码独占 */
    // ... ...
    unsigned int HSM31X : 1;  /**< @brief PFLASH扇区x的HSM代码独占 */
} Ifx_PROCONHSMCX0_Bits;

在这个位域结构体中,每一位代表一个PFLASH扇区是否被HSM代码独占。如果某个位被设置为1,则表示对应的PFLASH扇区仅可由HSM代码访问,从而提供了一种保护机制以确保关键代码的安全。

PROCONHSMCOTP0
PROCONHSMCOTP1

在这里插入图片描述

/**
 * @brief HSM接口保护配置的结构体定义
 */
typedef struct
{
    unsigned int HSM0ROM  : 1;  /**< @brief PFLASH扇区x的HSM代码永远锁定 */
    unsigned int HSM1ROM  : 1;  /**< @brief PFLASH扇区x的HSM代码永远锁定 */
    // ...  ...
    unsigned int HSM31ROM : 1;  /**< @brief PFLASH扇区x的HSM代码永远锁定 */
} Ifx_PROCONHSMCOTP0_Bits;

在这个位域结构体中,每一位代表一个PFLASH扇区是否被HSM代码永远锁定。如果某个位被设置为1,则表示对应的PFLASH扇区中的HSM代码是只读的,不能被擦除或修改,从而提供了一种保护机制以确保关键代码的安全性。

PROCONHSMCFG

在这里插入图片描述

/**
 * @brief HSM配置的结构体定义
 */
typedef struct
{
    unsigned int HSMBOOTEN  : 1;  /**< @brief HSM启动使能 */
    unsigned int SSWWAIT    : 1;  /**< @brief 系统软件等待 */
    unsigned int HSMDX      : 1;  /**< @brief HSM数据扇区独占 */
    unsigned int res0       : 1;  /**< @brief 保留位,为UCB保留 */
    unsigned int HSMRAMKEEP : 2;  /**< @brief HSM RAM清除方式 */
    unsigned int res1       : 1;  /**< @brief 保留位,为UCB保留 */
    unsigned int HSMENPINS  : 2;  /**< @brief 允许HSM强制控制引脚HSM1/2 */
    unsigned int HSMENRES   : 2;  /**< @brief 允许HSM触发复位 */
    unsigned int DESTDBG    : 2;  /**< @brief 破坏性调试入口 */
    unsigned int BLKFLAN    : 2;  /**< @brief 阻止闪存分析 */
    unsigned int res2       : 25; /**< @brief 保留位 */
} Ifx_PROCONHSMCFG_Bits;

在这个位域结构体中,每个成员代表HSM配置的不同方面:

  • HSMBOOTEN 表示是否启用HSM启动。
  • SSWWAIT 表示系统软件是否等待某个事件。
  • HSMDX 表示HSM数据扇区是否设置为独占。
  • res0res1 是为UCB(用户配置总线)保留的位。
  • HSMRAMKEEP 表示HSM RAM在不同复位后的清除行为。
  • HSMENPINS 表示是否允许HSM强制控制特定的引脚。
  • HSMENRES 表示是否允许HSM触发系统复位。
  • DESTDBG 表示调试入口是否具有破坏性。
  • BLKFLAN 表示是否阻止对闪存的分析。
  • res2 是一个较宽的保留位字段,通常在编程时应设置为0。

以下是给定枚举类型的中文注释:

/**
 * @brief HSM启动使能
 */
typedef enum
{
    HsmBootIsNotEnabled = 0,       /**< @brief HSM启动未使能 */
    HsmBootIsEnabled,              /**< @brief HSM启动已使能 */
} IfxHsmBootEn;

/**
 * @brief 定义系统软件(SSW)是否等待HSM释放CPU0跳转到用户代码
 */
typedef enum
{
    SswDoesNotWaitForHsm = 0,          /**< @brief SSW不等待HSM */
    SswWaitsForAcknowledgmentFromHsm,  /**< @brief SSW等待HSM确认 */
} IfxSssWait;

/**
 * @brief HSM数据扇区独占
 */
typedef enum
{
    HsmDataSectorsAreNotExclusiveToHsm = 0,     /**< @brief HSM数据扇区不独占 */
    HsmDataSectorsAreExclusiveToHsm,            /**< @brief HSM数据扇区独占 */
} IfxHsmDX;

/**
 * @brief HSM RAM清除
 */
typedef enum
{
    SswClearsHsmRamAfterAllPowerOnResetsAndSystemResets = 0,  /**< @brief 所有上电复位和系统复位后SSW清除HSM RAM */
    SswClearsHsmRamAfterAllPowerOnResetsNotOnSystemResets,    /**< @brief 所有上电复位后SSW清除HSM RAM,系统复位不清除 */
    SswClearsHsmRamOnlyAfterColdPowerOnResets = 3,            /**< @brief 仅在冷上电复位后SSW清除HSM RAM */
} IfxHsmRamKeep;

/**
 * @brief 允许HSM强制控制引脚HSM1/2
 */
typedef enum
{
    HsmCannotForcePins = 0,  /**< @brief HSM不能强制控制引脚 */
    HsmCanForcePins = 3,     /**< @brief HSM可以强制控制引脚 */
} IfxHsmEnPins;

/**
 * @brief 允许HSM触发复位
 */
typedef enum
{
    HsmCannotTriggerResets = 0,  /**< @brief HSM不能触发复位 */
    HsmCanTriggerResets = 3,     /**< @brief HSM可以触发复位 */
} IfxHsmEnRes;

/**
 * @brief 破坏性调试入口
 */
typedef enum
{
    DebugEntryIsNonDestructive = 0,  /**< @brief 调试入口是非破坏性的 */
    DebugEntryIsDestructive = 3,     /**< @brief 调试入口是破坏性的 */
} IfxDestDbg;

/**
 * @brief 阻止闪存分析
 */
typedef enum
{
    FunctionsAllowedOnAllFlashRanges = 0,       /**< @brief 允许在所有闪存范围内的功能 */
    FunctionsBlockedOnHsmExclusiveFlashRanges,  /**< @brief 在HSM独占的闪存范围内阻止功能 */
} IfxBlkFlan;

每个枚举类型提供了不同的配置选项,用于控制HSM(高安全模块)的各种特性,包括启动使能、系统软件的等待行为、数据扇区的独占性、RAM的清除策略、引脚的控制、复位的触发、调试的破坏性以及闪存分析的阻止。

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

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

相关文章

day8 Excel教程——利用数据验证规范单元格输入!(超多干货)

day8 Excel教程——利用数据验证规范单元格输入! 本章目录 day8 Excel教程——利用数据验证规范单元格输入!1. 整数,小数和文本长度1.1 限制用户输入1(最小)和10(最大)之间的数字1.2 限制用户应输入小于或等于3%的小数(百分比)值1.3 限制用户应输入文本长度为18位的身份…

【卫星载荷之QF项目-001】Vivado 2018.3安装

1.简介 Vivado 是 FPGA 厂商赛灵思公司&#xff08;Xilinx&#xff09;于 2012 年起发布的集成设计环境。Vivado2018.3 是 2018 年 Xilinx 推出的 Vivado 最后一个版本&#xff0c;相对稳定。 2.软件下载 网上自己去官网即可获取安装资源包。 3.软件安装 解压缩安装包&…

来未来面试真题:根据树形表输出树形结构

根据以下所给代码补充完printNode方法&#xff0c;要求输出如下形式的树形结构 package com.ting.sort;import java.util.ArrayList; import java.util.HashMap; import java.util.List;public class Menu {static class Node{Integer id;Integer parentId;String name;Node(In…

【PyTorch】多对象分割项目

对象分割任务的目标是找到图像中目标对象的边界。实际应用例如自动驾驶汽车和医学成像分析。这里将使用PyTorch开发一个深度学习模型来完成多对象分割任务。多对象分割的主要目标是自动勾勒出图像中多个目标对象的边界。 对象的边界通常由与图像大小相同的分割掩码定义&#xf…

【MySQL进阶】事务隔离级别 MVCC

目录 MySQL事务隔离级别 1. 读未提交&#xff08;Read Uncommitted&#xff09; 2. 读已提交&#xff08;Read Committed&#xff09; 3. 可重复读&#xff08;Repeatable Read&#xff09;(默认隔离级别) 4. 串行化&#xff08;Serializable&#xff09; 表格总结 MVCC …

C++栈和队列(容器适配器)

目录 1.什么是适配器&#xff1f; 2.栈(stack) 3.队列(queue) 4.双端队列(deque) 5.优先级队列(priority_queue) 1.什么是仿函数&#xff1f; 2.仿函数有什么用&#xff1f; 3.优先级队列(priority_queue) 1.什么是适配器&#xff1f; 我们之前实现栈和队列&#xff0…

QTCreate中使用git进行代码的备份

一开始使用QTCreate设计UI时&#xff0c;都是手动保存&#xff0c;后面觉得应该升级一下自己的技术栈&#xff0c;把git工具学了一些&#xff0c;摸索两天。首先&#xff0c;git是一个版本控制工具&#xff0c;正常开发需要一个master和一个你自己需要的分支&#xff0c;在分支…

批量下载 B 站 视频的工具 downkyi

批量下载 B 站 视频的工具 downkyi 亲测好用 图片&#xff1a; 下载地址&#xff1a; https://github.com/leiurayer/downkyi

SQL Server Profiler 只查看当前操作的语句

1.打开Sql Server Manage Studio&#xff0c;登录->工具->SQL Server Profiler->链接 点击事件选择 点击列筛选器 点击spid 输入对应的spid 如果不知道你的spid是多少的话&#xff0c;你可以先不筛选&#xff0c;直接运行&#xff0c;然后开启跟踪再运行一个独特的…

【项目管理】项目经理管理表单(及全套资料)

PM项目管理模板 甘特图 OKR周报 团队任务 工作总结

有没有比较好用的家用洗地机推荐?一文搞懂洗地机哪种牌子好

如今洗地机在我们家庭清洁中&#xff0c;已经很常见了&#xff0c;它可以让我们快速的完成地面清洁的工作&#xff0c;无需我们手动去清洗滚布&#xff0c;大大的节省了我们清洁时间&#xff0c;而且清洁效果也更加到位。但是目前市面上的洗地机型号多到让人眼花缭乱&#xff0…

Android开发之组件化

#来自ウルトラマンゼロ&#xff08;哉阿斯&#xff09; 1 简介 通俗来讲&#xff0c;将一个功能完整的 App 或模块拆分成多个子模块, 每个子模块可以独立编译和运行。也可以任意组合成另一个新的 App 或模块, 每个模块即不相互依赖但又可以相互交互, 遇到某些特殊情况甚至可以升…

RN 开发环境搭建(Windows For Android)

传送门&#xff1a;官网的搭建步骤&#xff08;英文&#xff09; 传送门&#xff1a;官网的搭建步骤&#xff08;中文&#xff09; 注&#xff1a;教程写于2022年11月21日&#xff0c;当时也是根据官网步骤一步步操作的。现在时隔2年&#xff0c;最新的 RN 版本&#xff08;V…

在现有的vue3项目中 配置electron

Vue项目已创建&#xff0c;在此基础上安装electron 配置步骤&#xff1a; 装依赖 yarn install装electron安装concurrently ( 一条命令实现同时启动vue项目和electron)安装nodemon (实现热更新) 一、配置途中遇到的问题&#xff1a; 1. 安装 yarn add electron -D 一直卡在这…

连锁企业组网的优化解决方案

对于连锁企业来说&#xff0c;建立高效的网络组网很重要&#xff0c;因为它直接影响到各分支机构之间的信息共享、管理效率和业务流程的顺畅。一个理想的解决方案需要从多个角度入手&#xff0c;以确保网络的稳定性、安全性和可扩展性。 首先&#xff0c;需要选择合适的网络拓扑…

stm32番外-----0.96寸OLED播放电影《你的名字》

目录 前言 OLED播放视频 1.简述 2.现象 3.电路连接图​编辑 4.项目主要文件 5.代码 6.注意事项 前言 刚好前面学习了USART串口通信&#xff0c;本期咱们来玩个有意思的&#xff0c;就是去通过USART实现视频的播放&#xff0c;本期内容程序是来自江协科技的&#xf…

Getty 携手英伟达升级商业文生图 AI 模型;苹果新专利探索「心跳」解锁 iPhone 丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

中科院4区救命神刊!主打不让任何一个人延毕~沾边可录!

【SciencePub学术】本期&#xff0c;小编给大家推荐一本JCR2区中科院4区的“救命神刊”&#xff01;征稿领域可谓是相当广泛&#xff0c;且国人友好&#xff0c;计算机领域的学者可以考虑一下这本期刊&#xff01; 期刊解析 KNOWLEDGE AND INFORMATION SYSTEMS 《知识与信息系统…

计算机毕业设计选题推荐-学院教学工作量统计系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…