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

【玩转RT-Thread】RT-Thread内核宏定义详解(rtdef.h)

文章目录

        • 1.RT-Thread版本信息
        • 2.RT-Thrad基础数据类型定义
        • 3.RT-Thread基本数据类型的范围
        • 4.RT-Thread系统滴答时钟最大计数值
        • 5.RT-Thread IPC数据类型范围
        • 6.RT-Thread避免未使用变量警告
        • 7.编译器相关定义
        • 8.编译器相关定义
        • 9.RT-Thread错误码定义

1.RT-Thread版本信息

/* RT-Thread version information */
#define RT_VERSION                      4               /**< major version number */
#define RT_SUBVERSION                   1               /**< minor version number */
#define RT_REVISION                     1               /**< revise version number *//* RT-Thread version */
#define RTTHREAD_VERSION                RT_VERSION_CHECK(RT_VERSION, RT_SUBVERSION, RT_REVISION)

使用方法:可用于bsp指定RT-Thread版本

例如:

#if (RTTHREAD_VERSION >= RT_VERSION_CHECK(4, 1, 0) */
#define RT_VERSION_CHECK(major, minor, revise)          ((major * 10000) + \(minor * 100) + revise)

2.RT-Thrad基础数据类型定义

/* RT-Thread basic data type definitions */
#ifndef RT_USING_ARCH_DATA_TYPE	/* 简单来说,开启此宏定义后,BSP就会在ARCH_CPU 级别定义基本数据类型 */
#ifdef RT_USING_LIBC		   /* 用于控制是否使用标准C库函数 */
typedef int8_t                          rt_int8_t;      /**<  8bit integer type */
typedef int16_t                         rt_int16_t;     /**< 16bit integer type */
typedef int32_t                         rt_int32_t;     /**< 32bit integer type */
typedef uint8_t                         rt_uint8_t;     /**<  8bit unsigned integer type */
typedef uint16_t                        rt_uint16_t;    /**< 16bit unsigned integer type */
typedef uint32_t                        rt_uint32_t;    /**< 32bit unsigned integer type */
typedef int64_t                         rt_int64_t;     /**< 64bit integer type */
typedef uint64_t                        rt_uint64_t;    /**< 64bit unsigned integer type */
typedef size_t                          rt_size_t;      /**< Type for size number */#else
typedef signed   char                   rt_int8_t;      /**<  8bit integer type */
typedef signed   short                  rt_int16_t;     /**< 16bit integer type */
typedef signed   int                    rt_int32_t;     /**< 32bit integer type */
typedef unsigned char                   rt_uint8_t;     /**<  8bit unsigned integer type */
typedef unsigned short                  rt_uint16_t;    /**< 16bit unsigned integer type */
typedef unsigned int                    rt_uint32_t;    /**< 32bit unsigned integer type */#ifdef ARCH_CPU_64BIT	/* 判断当前程序运行的CPU架构是否为64位 */
typedef signed long                     rt_int64_t;     /**< 64bit integer type */
typedef unsigned long                   rt_uint64_t;    /**< 64bit unsigned integer type */
typedef unsigned long                   rt_size_t;      /**< Type for size number */
#else
typedef signed long long                rt_int64_t;     /**< 64bit integer type */
typedef unsigned long long              rt_uint64_t;    /**< 64bit unsigned integer type */
typedef unsigned int                    rt_size_t;      /**< Type for size number */
#endif /* ARCH_CPU_64BIT */
#endif /* RT_USING_LIBC */
#endif /* RT_USING_ARCH_DATA_TYPE */typedef int                             rt_bool_t;      /**< boolean type */
typedef long                            rt_base_t;      /**< Nbit CPU related date type */
typedef unsigned long                   rt_ubase_t;     /**< Nbit unsigned CPU related data type */typedef rt_base_t                       rt_err_t;       /**< Type for error number */
typedef rt_uint32_t                     rt_time_t;      /**< Type for time stamp */
typedef rt_uint32_t                     rt_tick_t;      /**< Type for tick count */
typedef rt_base_t                       rt_flag_t;      /**< Type for flags */
typedef rt_ubase_t                      rt_dev_t;       /**< Type for device */
typedef rt_base_t                       rt_off_t;       /**< Type for offset *//* boolean type definitions */
#define RT_TRUE                         1               /**< boolean true  */
#define RT_FALSE                        0               /**< boolean fails *//* null pointer definition */
#define RT_NULL                         0
  • rt_base_t:为了使代码可以在不同的CPU上移植并保持向后兼容性long类型的位数(bit数)可能因不同的CPU体系结构而有所不同,但是使用rt_base_t代替long可以隐藏这种差异,以实现代码的可移植性。(rt_ubase_t原理相同)

  • rt_err_t:代表错误码的数据类型,这里使用了之前定义的rt_base_t作为它的别名。

  • rt_time_t:代表时间戳的数据类型,这里使用了rt_uint32_t作为它的别名。rt_uint32_t是一个32位无符号整数类型,可以用来表示1970年1月1日以来的秒数。

  • rt_tick_t:代表系统时钟节拍计数的数据类型,这里也使用了rt_uint32_t作为它的别名。在嵌入式系统中,通常会使用硬件定时器来产生一个固定频率的中断信号,并且在每次中断时对rt_tick_t进行递增操作,从而实现对时间的计数。

  • rt_flag_t:代表标志位的数据类型,这里使用了之前定义的rt_base_t作为它的别名。

  • rt_dev_t:代表设备号的数据类型,这里使用了rt_ubase_t作为它的别名。在嵌入式系统中,通常会有多个外设需要使用不同的设备号进行标识,因此需要定义一个数据类型来保存设备号。

  • rt_off_t:代表偏移量的数据类型,这里也使用了之前定义的rt_base_t作为它的别名。在文件系统中,通常需要记录某个文件中的偏移量(即当前读写位置),因此需要定义一个数据类型来保存偏移量。

3.RT-Thread基本数据类型的范围

/* maximum value of base type */
#ifdef RT_USING_LIBC
#define RT_UINT8_MAX                    UINT8_MAX       /**< Maximum number of UINT8 */
#define RT_UINT16_MAX                   UINT16_MAX      /**< Maximum number of UINT16 */
#define RT_UINT32_MAX                   UINT32_MAX      /**< Maximum number of UINT32 */
#else
#define RT_UINT8_MAX                    0xff            /**< Maximum number of UINT8 */
#define RT_UINT16_MAX                   0xffff          /**< Maximum number of UINT16 */
#define RT_UINT32_MAX                   0xffffffff      /**< Maximum number of UINT32 */
#endif /* RT_USING_LIBC */

附:此处的UINT8_MAXUINT16_MAXUINT32_MAX为编译器预定的宏定义

4.RT-Thread系统滴答时钟最大计数值

#define RT_TICK_MAX                     RT_UINT32_MAX   /**< Maximum number of tick */

5.RT-Thread IPC数据类型范围

/* maximum value of ipc type */
#define RT_SEM_VALUE_MAX                RT_UINT16_MAX   /**< Maximum number of semaphore .value */
#define RT_MUTEX_VALUE_MAX              RT_UINT16_MAX   /**< Maximum number of mutex .value */
#define RT_MUTEX_HOLD_MAX               RT_UINT8_MAX    /**< Maximum number of mutex .hold */
#define RT_MB_ENTRY_MAX                 RT_UINT16_MAX   /**< Maximum number of mailbox .entry */
#define RT_MQ_ENTRY_MAX                 RT_UINT16_MAX   /**< Maximum number of message queue .entry */

6.RT-Thread避免未使用变量警告

#define RT_UNUSED(x)                   ((void)x)

**该宏定义表示将变量x强制转换为void类型,从而告诉编译器该变量未被使用,从而避免编译器发出“未使用变量”的警告。这种空操作常常用于函数参数或者结构体成员的声明中,因为有时候我们为了某些原因不得不声明一个变量,但在实际使用中却无需使用它,这时候就可以使用这个宏来标记变量未被使用。 **

下面是一个例子:假设在编写一个C语言程序时,需要使用qsort()函数进行数组排序。

该函数的第一个参数是一个void类型的指针,用于表示要排序的数组。

在实际使用中,我们可能并不需要使用这个参数。但是,由于该函数的参数列表中必须要有第一个参数,而且其类型为void*,因此我们不得不将一个无用的参数传递给函数,否则就会编译错误。

这时候,就可以使用RT_UNUSED宏来标记这个参数未被使用,代码如下:

#include <stdlib.h>int cmp(const void *a, const void *b)
{/* sort code */
}int main()
{int arr[10] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};qsort(arr, 10, sizeof(int), cmp);  // 必须传递一个void*类型参数return 0;
}int cmp(const void *a, const void *b)
{RT_UNUSED(a);  // 标记参数未使用RT_UNUSED(b);  // 标记参数未使用return 0;
}

这样就可以避免编译器报“未使用变量a/b”的警告了。

7.编译器相关定义

/* Compiler Related Definitions */
#if defined(__ARMCC_VERSION)           /* ARM Compiler */
#define RT_SECTION(x)               __attribute__((section(x)))
#define RT_USED                     __attribute__((used))
#define ALIGN(n)                    __attribute__((aligned(n)))
#define RT_WEAK                     __attribute__((weak))
#define rt_inline                   static __inline
  • RT_SECTION(x):表示将所修饰的数据/函数放置在指定的section中,x为section名字,通常是一个字符串。这个宏可以用于在程序中指定某些数据/函数位于特定的内存区域,比如放在Flash中或者RAM中,以满足不同的需求。该宏使用了GCC的语法扩展。
  • RT_USED:表示告诉编译器保留所修饰的数据/函数,即使它没有被直接引用或调用。该宏通常用于防止删除不需要的代码和变量,以及确保所需的函数和变量在链接时能够正确地生成和调用。该宏使用了GCC的语法扩展。
  • ALIGN(n):表示将所修饰的数据/函数按照n字节对齐,即从地址0开始,每隔n个字节就对齐一次。该宏通常用于解决访问未对齐的数据导致的性能问题,以及操作系统中数据结构对齐的需求。该宏同样使用了GCC的语法扩展。
  • RT_WEAK:表示将所修饰的数据/函数标记为弱引用,即该数据/函数可以被重定义。当出现多个同名的弱引用时,链接器会选择其中优先级最高的一个。该宏通常用于提供一些默认实现,但允许用户在需要时重写它们。该宏同样使用了GCC的语法扩展。
  • rt_inline:表示将所修饰的函数定义为静态内联函数,即在编译时将函数的代码直接嵌入到调用处,以避免隐式调用带来的额外开销。该宏同样使用了GCC的语法扩展。

8.编译器相关定义

/* Compiler Related Definitions */
#if defined(__ARMCC_VERSION)           /* ARM Compiler */
#define RT_SECTION(x)               __attribute__((section(x)))
#define RT_USED                     __attribute__((used))
#define ALIGN(n)                    __attribute__((aligned(n)))
#define RT_WEAK                     __attribute__((weak))
#define rt_inline                   static __inline/* module compiling */
#ifdef RT_USING_MODULE
#define RTT_API                     __declspec(dllimport)
#else
#define RTT_API                     __declspec(dllexport)
#endif /* RT_USING_MODULE */#elif defined (__IAR_SYSTEMS_ICC__)     /* for IAR Compiler */
#define RT_SECTION(x)               @ x
#define RT_USED                     __root
#define PRAGMA(x)                   _Pragma(#x)
#define ALIGN(n)                    PRAGMA(data_alignment=n)
#define RT_WEAK                     __weak
#define rt_inline                   static inline
#define RTT_API
#elif defined (__GNUC__)                /* GNU GCC Compiler */#ifndef RT_USING_LIBC
/* the version of GNU GCC must be greater than 4.x */
typedef __builtin_va_list           __gnuc_va_list;
typedef __gnuc_va_list              va_list;
#define va_start(v,l)               __builtin_va_start(v,l)
#define va_end(v)                   __builtin_va_end(v)
#define va_arg(v,l)                 __builtin_va_arg(v,l)
#endif /* RT_USING_LIBC */#define RT_SECTION(x)               __attribute__((section(x)))
#define RT_USED                     __attribute__((used))
#define ALIGN(n)                    __attribute__((aligned(n)))
#define RT_WEAK                     __attribute__((weak))
#define rt_inline                   static __inline
#define RTT_API#elif defined (__ADSPBLACKFIN__)        /* for VisualDSP++ Compiler */
#define RT_SECTION(x)               __attribute__((section(x)))
#define RT_USED                     __attribute__((used))
#define ALIGN(n)                    __attribute__((aligned(n)))
#define RT_WEAK                     __attribute__((weak))
#define rt_inline                   static inline
#define RTT_API#elif defined (_MSC_VER)
#define RT_SECTION(x)
#define RT_USED
#define ALIGN(n)                    __declspec(align(n))
#define RT_WEAK
#define rt_inline                   static __inline
#define RTT_API#elif defined (__TI_COMPILER_VERSION__)
/* The way that TI compiler set section is different from other(at least* GCC and MDK) compilers. See ARM Optimizing C/C++ Compiler 5.9.3 for more* details. */
#define RT_SECTION(x)
#define RT_USED
#define PRAGMA(x)                   _Pragma(#x)
#define ALIGN(n)
#define RT_WEAK
#define rt_inline                   static inline
#define RTT_API#elif defined (__TASKING__)
#define RT_SECTION(x)               __attribute__((section(x)))
#define RT_USED                     __attribute__((used, protect))
#define PRAGMA(x)                   _Pragma(#x)
#define ALIGN(n)                    __attribute__((__align(n)))
#define RT_WEAK                     __attribute__((weak))
#define rt_inline                   static inline
#define RTT_API
#else#error not supported tool chain
#endif /* __ARMCC_VERSION */
  1. typedef __builtin_va_list __gnuc_va_list: 定义了一个新类型__gnuc_va_list,并使用 __builtin_va_list 进行初始化。__builtin_va_list 是GCC内建的类型,用于表示可变参数列表中的参数,并在实现中进行处理。由于可变参数的实现和操作系统和编译器等因素相关,因此需要使用 __builtin_va_list 类型来实现可变参数列表。
  2. typedef __gnuc_va_list va_list: 定义了一个名为va_list的新类型,并将其重命名为__gnuc_va_list
  3. #define va_start(v,l) __builtin_va_start(v,l): 将 va_start() 重命名为 __builtin_va_start(),从而能够使用 GCC 内建的函数 __builtin_va_start() 实现可变参数的功能。该宏的作用是对变参列表进行初始化,获取第一个参数的地址和类型,并返回可变参数队列中下一个参数的地址。
  4. #define va_end(v) __builtin_va_end(v): 将 va_end() 重命名为 __builtin_va_end(),从而能够使用 GCC 内建的函数 __builtin_va_end() 实现可变参数的功能。该宏的作用是清除可变参数列表,并将其指针置为 NULL。
  5. #define va_arg(v,l) __builtin_va_arg(v,l): 将 va_arg() 重命名为 __builtin_va_arg(),并使用 GCC 内建的函数 __builtin_va_arg() 实现可变参数的功能。该宏的作用是获取可变参数队列中的下一个参数,并将指针指向该参数的位置。
  6. #define PRAGMA(x) _Pragma(#x):将参数x转化为字符串并使用_Pragma()将其作为编译指令执行。_Pragma是C99标准引入的一个新特性,它允许程序员在说明文件中进行诸如#pragma等命令式编译指令的嵌入式编程。而#pragma则是一种编译指令,用于控制编译器的一些行为,比如告诉编译器去链接某个库、指定编译器选项等。

9.RT-Thread错误码定义

/* RT-Thread error code definitions */
#define RT_EOK                          0               /**< There is no error */
#define RT_ERROR                        1               /**< A generic error happens */
#define RT_ETIMEOUT                     2               /**< Timed out */
#define RT_EFULL                        3               /**< The resource is full */
#define RT_EEMPTY                       4               /**< The resource is empty */
#define RT_ENOMEM                       5               /**< No memory */
#define RT_ENOSYS                       6               /**< No system */
#define RT_EBUSY                        7               /**< Busy */
#define RT_EIO                          8               /**< IO error */
#define RT_EINTR                        9               /**< Interrupted system call */
#define RT_EINVAL                       10              /**< Invalid argument */
  • RT_EOK:表示没有错误。
  • RT_ERROR:表示发生了一般性的错误。
  • RT_ETIMEOUT:表示超时错误。
  • RT_EFULL:表示资源已满。
  • RT_EEMPTY:表示资源为空。
  • RT_ENOMEM:表示内存不足。
  • RT_ENOSYS:表示没有该系统。
  • RT_EBUSY:表示忙碌。
  • RT_EIO:表示输入/输出错误。
  • RT_EINTR:表示中断的系统调用。
  • RT_EINVAL:表示无效的参数。

相关文章:

【玩转RT-Thread】RT-Thread内核宏定义详解(rtdef.h)

文章目录1.RT-Thread版本信息2.RT-Thrad基础数据类型定义3.RT-Thread基本数据类型的范围4.RT-Thread系统滴答时钟最大计数值5.RT-Thread IPC数据类型范围6.RT-Thread避免未使用变量警告7.编译器相关定义8.编译器相关定义9.RT-Thread错误码定义1.RT-Thread版本信息 /* RT-Threa…...

PDF转化器免费版有哪些?这几款办公达人们都在用

在现代办公中&#xff0c;文件的排版和格式是非常重要的&#xff0c;无论是发布通知或提交策划书、投档简历或是发表论文、宣传海报或是产品说明书等&#xff0c;我们经常使用PDF文件格式发送给他人。然而&#xff0c;很多人需要对PDF进行编辑修改&#xff0c;通常会先将其转换…...

2022MathorCup赛题B

以下所有文字均基于作者的实际经验&#xff0c;并不具有完全的合理性&#xff0c;请谨慎参考 目录 一、问题分析 &#xff08;一&#xff09;问题一 &#xff08;二&#xff09;问题二 二、预处理 &#xff08;一&#xff09;训练集预处理 &#xff08;二&#xff09;测…...

适合销售使用的CRM系统特点

销售人员抱怨CRM系统太复杂&#xff0c;这是一个很重要的问题。毕竟&#xff0c;如果系统太难使用&#xff0c;会导致CRM实用率和效率下降&#xff0c;最终影响公司的运作。在这篇文章中&#xff0c;我们来探讨当销售抱怨crm客户系统太复杂了&#xff0c;企业该如何解决。 缺少…...

项目中获取resource下文件路径的方法

String filepathrequest.getServletContext().getRealPath("/")"files\\"; 获取的当前文件在实际运行的tomcat地址目录 String path ClassUtils.getDefaultClassLoader().getResource("").getPath()"tmp/files/"; 获取的是当前文件…...

Air32F103CBT6|CCT6|KEIL-uVsion5|本地编译|STClink|(6)、Air32F103编译下载

目录 一、环境搭建 准备工作 安装支持包 二、新建工程 添加外设库支持 测试代码 三、下载烧录 一、环境搭建 准备工作 安装MDK5&#xff0c;具体方法请百度&#xff0c;安装后需要激活才能编译大文件 下载安装AIR32F103的SDK&#xff1a;luatos-soc-air32f103: Air32f…...

结构(c的数据类型)

我们知道数组是相同类型元素的集合&#xff0c;那么结构就是不同类型的元素的集合&#xff0c;这些不同元素叫结构中的成员。是因为这些集合都有一定的联系才会归为一类的。 形式&#xff1a;我们知道&#xff0c;平时学习的int&#xff0c;double都叫类型&#xff0c;而结构是…...

前端常用的开工具库

常用的开发工具库 打包工具webpack webpack是现在最流行的打包工具之一&#xff0c;是javaScript的静态模块的打包器。会根据业务逻辑构建一个依赖的关系图&#xff0c;每一个依赖的单元都是一个模块&#xff0c;模块可以是js文件 可以图片资源或者css资源。在使用webpack的时…...

爬虫之数据库存储

在对于爬取数量数量较少时&#xff0c;我们可以将爬虫数据保存于CSV文件或者其他格式的文件中&#xff0c;既简单又方便&#xff0c;但是如果需要存储的数据量大&#xff0c;又要频繁访问这些数据时&#xff0c;就应该考虑将数据保存到数据库中了。目前主流的数据库有关系性数据…...

面试官:你可以用 for of 遍历 Object 吗?

本文以 用 for of遍历 Object 为引 来聊聊 迭代器模式。 什么是迭代器模式 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露该对象的内部表示。 ——《设计模式&#xff1a;可复用面向对象软件的基础》 可以说迭代器模式就是为了遍历存在的。提…...

蓝桥杯基础12:BASIC-3试题 字母图形

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDC…...

基于PaddleOCR开发懒人精灵文字识别插件

目的 懒人精灵是 Android 平台上的一款自动化工具&#xff0c;它通过编写 lua 脚本&#xff0c;结合系统的「 无障碍服务 」对 App 进行自动化操作。在文字识别方面它提供的有一款OCR识别插件&#xff0c;但是其中有识别速度慢&#xff0c;插件大的缺点&#xff0c;所以这里将讲…...

PyTorch 深度学习实战 | DIEN 模拟兴趣演化的序列网络

01、实例&#xff1a;DIEN 模拟兴趣演化的序列网络深度兴趣演化网络(Deep Interest Evolution Network,DIEN)是阿里巴巴团队在2018年推出的另一力作,比DIN 多了一个Evolution,即演化的概念。在DIEN 模型结构上比DIN 复杂许多,但大家丝毫不用担心,我们将DIEN 拆解开来详细地说明…...

pyspark null类型 在 json.dumps(null) 之后,会变为字符串‘null‘

在将 hive 数仓数据写入 MySQL 时候&#xff0c;有时我们需将数据转为 json 字符串&#xff0c;然后再存入 MySQL。但 hive 数仓中的 null 类型遇到 json 函数之后会变为 ‘null’ 字符串&#xff0c;这时我们只需在使用 json 函数之前对值进行判断即可&#xff0c;当值为 null…...

LeetCode - 两数相加

题目信息 源地址&#xff1a;两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字…...

Office 2021专业版安装包及激活教程

[软件名称]: Office 2021 [软件大小]: 4.33GB [安装环境]: Win11/Win 10 [软件安装包下载]:https://pan.quark.cn/s/169ed49988b2 “Microsoft Office 2021是Microsoft推出的办公软件。2021年10月5日&#xff0c;Office 2021 for Mac发布&#xff0c;其中包含许多新功能 Micro…...

git版本规范-前端

前言 本文档适用于前端的小伙伴。针对目前前端只有测试环境和生产环境&#xff0c;为更好管理前端代码和适用于自动化部署&#xff0c;编写次文档&#xff0c;有不同意见的小伙伴可以进行讨论。 分支 由于没有目前没有预发环境&#xff0c;简化开发、测试、部署和发布流程&a…...

UEFI Device Path (1): 重新认识Device Path

从事UEFI开发的人员&#xff0c;对UEFI Device Path的概念都有一定了解&#xff0c;但未必都建立了比较系统而深刻的认识。UEFI Device Path的认知仅限于: 1)它是用来表示系统中设备的路径&#xff1b;2) 在UEFI SPEC中定义了它的数据结构和若干操作它的UEFI Protocol。除此以外…...

合成孔径成像的应用及发展

一、引言 合成孔径成像自20世纪50年代提出&#xff0c;应用于雷达成像&#xff0c;历经70年的研发&#xff0c;已经日趋成熟&#xff0c;成功地用于环境资源监测、灾害监测、海事管理及军事等领域。受物理环境制约&#xff0c;合成孔径在声呐成像中的研发与应用起步稍迟&#…...

MyBatis-Plus的基本操作

目录 1、配置文件 1、添加依赖 2、启动类 3、实体类 4、添加Mapper类 5、测试Mapper接口 2、CRUD测试 1、insert添加 2、修改操作 3、删除操作 3、MyBatis-Plus条件构造器 4、knife4j 1、Swagger介绍 2、集成knife4j 3.添加依赖 4 添加knife4j配置类 5、 Cont…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...