FreeRTOS——系统配置文件FreeRTOSConfig.h详解

news2024/10/9 8:08:20

FreeRTOSConfig.h配置文件作用:对FreeRTOS进行功能配置和裁剪,以及API函数得使能。

 FreeRTOSConfig.h 是一个用户级别的配置文件,不属于内核文件。每个用户可以有不同的FreeRTOSConfig.h,从而实现不同的功能配置。

对于FreeRTOS配置文件主要分为以下三类:

  • 1、“INCLUDE”:主要用于配置FreeRTOS中可选的API函数
  • “config”:完成FreeRTOS的功能配置和裁剪
  • 其他配置选项:PendSV宏定义、SVC宏定义

基础配置选项


(1)configUSE_PREEMPTION宏定义的配置

#define configUSE_PREEMPTION                            1                      
 /* 1: 抢占式调度器, 0: 协程式调度器, 无默认需定义 */


(2)configUSE_PORT_OPTIMISED_TASK_SELECTION宏定义的配置

#define configUSE_PORT_OPTIMISED_TASK_SELECTION         1                      
 /* 1: 使用硬件计算下一个要运行的任务(硬件),
 0: 使用软件算法计算下一个要运行的任务(通用的方式)-效率较低, 默认: 0 
特殊方法的效率高于通用方法,但是特殊方法依赖于一个或多个架构的汇编指令
(一般是类似前导零[CLZ]的指令),因此特殊方法并不支持所有硬件,并且对任务优先级的最大值
也有限制,通常为32*/


(3)configUSE_TICKLESS_IDLE宏定义的配置

#define configUSE_TICKLESS_IDLE                         0                       
/* 1: 使能tickless低功耗模式, 默认: 0 */


(4)configCPU_CLOCK_HZ宏定义的配置

#define configCPU_CLOCK_HZ                              SystemCoreClock         
/* 定义CPU主频, 单位: Hz, 无默认需定义 */
这里我们定义的时钟频率并不是16M

 我们在main.c有一个时钟使能,跳进去以后,这一块才是真正的初始化。

 (5)configSYSTICK_CLOCK_HZ 宏定义的配置,直接屏蔽

//#define configSYSTICK_CLOCK_HZ                          (configCPU_CLOCK_HZ / 8)
/* 定义SysTick时钟频率,当SysTick时钟频率与内核时钟频率不同时才可以定义,
 单位: Hz, 默认: 不定义 */
为什么要屏蔽?是因为滴答定时器的时钟源和内核时钟源是相同的,所以不需要定义的

(6)configTICK_RATE_HZ宏定义的配置

#define configTICK_RATE_HZ                              1000                   
 /* 定义系统时钟节拍频率, 单位: Hz, 无默认需定义 */


(7)configMAX_PRIORITIES宏定义配置

#define configMAX_PRIORITIES                            32                      
/* 定义最大优先级数, 最大优先级=configMAX_PRIORITIES-1, 无默认需定义 */
定义的最大优先级是32.因为是硬件计算,所以与硬件系统的位数有关

(8)configMINIMAL_STACK_SIZE宏定义配置

#define configMINIMAL_STACK_SIZE                        128                     
/* 定义空闲任务的栈空间大小, 单位: Word, 无默认需定义 */
我们要创建空闲任务,不能让CPU空闲下来

(9)configMAX_TASK_NAME_LEN宏定义配置

#define configMAX_TASK_NAME_LEN                         16                      
/* 定义任务名最大字符数, 默认: 16 */


(10) configUSE_16_BIT_TICKS宏定义配置

#define configUSE_16_BIT_TICKS                          0                     
  /* 1: 定义系统时钟节拍计数器的数据类型为16位无符号数, 无默认需定义 */
        此宏用于定义系统节拍计数器的数据类型,当宏 configUSE_16_BIT_TICKS 设置为 1 时, 系统节拍计数器的数据类型为 16 位无符号整形;当宏 configUSE_16_BIT_TICKS 设置为 0 时, 系统节拍计数器的数据类型为 32 为无符号整型。

(11)configIDLE_SHOULD_YIELD宏定义配置

#define configIDLE_SHOULD_YIELD                         1                       
/* 1: 使能在抢占式调度下,同优先级的任务能抢占空闲任务, 默认: 1 */
        当宏 configIDLE_SHOULD_YIELD 设置为 1 时,在抢占调度下,同等优先级的任务可抢占 空闲任务,并延用空闲任务剩余的时间片。

(12)configUSE_TASK_NOTIFICATIONS宏定义配置

#define configUSE_TASK_NOTIFICATIONS                    1                      
 /* 1: 使能任务间直接的消息传递,包括信号量、事件标志组和消息邮箱, 默认: 1 */
        当宏 configUSE_TASK_NOTIFICATIONS 设置为 1 时,开启任务通知功能。当开启任务通 知功能后,每个任务将多占用 8 字节的内存空间。

(13) configTASK_NOTIFICATION_ARRAY_ENTRIES宏定义配置

#define configTASK_NOTIFICATION_ARRAY_ENTRIES           1                       
/* 定义任务通知数组的大小, 默认: 1 */
        此宏用于定义任务通知数组的大小。

(14) configUSE_MUTEXES宏定义配置

#define configUSE_MUTEXES                               1                       
/* 1: 使能互斥信号量, 默认: 0 */
        此宏用于使能互斥信号量,当宏 configUSE_MUTEXS 设置为 1 时,使能互斥信号量;当宏 configUSE_MUTEXS 设置为 0 时,则不使能互斥信号量。

(15)configUSE_RECURSIVE_MUTEXES宏定义配置

#define configUSE_RECURSIVE_MUTEXES                     1                       
/* 1: 使能递归互斥信号量, 默认: 0 */
        此宏用于使能递归互斥信号量,当宏 configUSE_RECURSIVE_MUTEXES 设置为 1 时,使 能递归互斥信号量;当宏 configUSE_RECURSIVE_MUTEXES 设置为 0 时,则不使能递归互斥 信号量。

(16) configUSE_COUNTING_SEMAPHORES宏定义配置

#define configUSE_COUNTING_SEMAPHORES                   1                      
 /* 1: 使能计数信号量, 默认: 0 */
        此宏用于使能计数型信号量,当宏 configUSE_COUNTING_SEMAPHORES 设置为 1 时, 使能计数型信号量;当宏 configUSE_COUNTING_SEMAPHORES 设置为 0 时,则不使能计数 型信号量。

(17)configUSE_ALTERNATIVE_API宏定义配置

#define configUSE_ALTERNATIVE_API                       0                       /* 已弃用!!! */
        此宏在 FreeRTOS V9.0.0 之后已弃用。

(18)configQUEUE_REGISTRY_SIZE宏定义配置

#define configQUEUE_REGISTRY_SIZE                       8                       /* 定义可以注册的信号量和消息队列的个数, 默认: 0 */
        此宏用于定义可以注册的队列和信号量的最大数量。此宏定义仅用于调试使用。

(19) configUSE_QUEUE_SET宏定义配置

此宏用于使能队列集,当宏 configUSE_QUEUE_SETS 设置为 1 时,使能队列集;当宏 configUSE_QUEUE_SETS 设置为 0 时,则不使能队列集。
#define configUSE_QUEUE_SETS                            1                      
 /* 1: 使能队列集, 默认: 0 */

(20)configUSE_TIME_SLICING宏定义配置

#define configUSE_TIME_SLICING                          1                       
/* 1: 使能时间片调度, 默认: 1 */
        此宏用于使能时间片调度,当宏 configUSE_TIMER_SLICING 设置为 1 且使用抢占式调度 时,使能时间片调度;当宏 configUSE_TIMER_SLICING 设置为 0 时,则不使能时间片调度。

(21)configUSE_NEWLIB_REENTRANT宏定义配置

#define configUSE_NEWLIB_REENTRANT                      0                      
 /* 1: 任务创建时分配Newlib的重入结构体, 默认: 0 */
此宏用于为每个任务分配一个 NewLib 重入结构体,当宏configUSE_NEWLIB_REENTRANT设置为 1 时,FreeRTOS 将为每个创建的任务的任务控制块 正点原子 FreeRTOS 开发教程 57 FreeRTOS 开发指南 中分配一个 NewLib 重入结构体。

(22)configENABLE_BACKWARD_COMPATIBILITY宏定义配置

#define configENABLE_BACKWARD_COMPATIBILITY             0                       
/* 1: 使能兼容老版本, 默认: 1 */
        此宏用于兼容 FreeRTOS 老版本的 API 函数。

(23)configNUM_THREAD_LOCAL_STORAGE_POINTERS宏定义配置

#define configNUM_THREAD_LOCAL_STORAGE_POINTERS         0                      
 /* 定义线程本地存储指针的个数, 默认: 0 */
        此宏用于在任务控制块中分配一个线程本地存储指针数组,当此宏被定义为大于 0 时, configNUM_THREAD_LOCAL_STORAGE_POINTERS 为线程本地存储指针数组的元素个数; 当宏 configNUM_THREAD_LOCAL_STORAGE_POINTERS 为 0 时,则禁用线程本地存储指针数组。

(24)configSTACK_DEPTH_TYPE宏定义配置

#define configSTACK_DEPTH_TYPE                          uint16_t               
 /* 定义任务堆栈深度的数据类型, 默认: uint16_t */
        此宏用于定义任务堆栈深度的数据类型,默认为 uint16_t。

(25) configMESSAGE_BUFFER_LENGTH_TYPE宏定义配置

#define configMESSAGE_BUFFER_LENGTH_TYPE                size_t                  
/* 定义消息缓冲区中消息长度的数据类型, 默认: size_t */
        此宏用于定义消息缓冲区中消息长度的数据类型,默认为 size_t。

内存分配相关定义


1. configSUPPORT_STATIC_ALLOCATION宏定义配置

#define configSUPPORT_STATIC_ALLOCATION                 0                       
/* 1: 支持静态申请内存, 默认: 0 */
        当宏 configSUPPORT_STSTIC_ALLOCATION 设置为 1 时,FreeRTOS 支持使用静态方式 管理内存,此宏默认设置为 0。如果将 configSUPPORT_STATIC_ALLOCATION 设置为 1,用户 还 需 要 提 供 两 个 回 调 函 数 : vApplicationGetIdleTaskMemory() 和 vApplicationGetTimerTaskMemory(),更详细的内容请参考第六章的“静态创建与删除任务实验”。

 2. configSUPPORT_DYNAMIC_ALLOCATION宏定义配置

#define configSUPPORT_DYNAMIC_ALLOCATION                1                       
/* 1: 支持动态申请内存, 默认: 1 */
        当宏 configSUPPORT_DYNAMIC_ALLOCATION 设置为 1 时,FreeRTOS 支持使用动态方 式管理内存,此宏默认设置为 1。

3. configTOTAL_HEAP_SIZE宏定义配置

#define configTOTAL_HEAP_SIZE                           ((size_t)(10 * 1024))   
/* FreeRTOS堆中可用的RAM总量, 单位: Byte, 无默认需定义 */
        此宏用于定义用于 FreeRTOS 动态内存管理的内存大小,即 FreeRTOS 的内存堆,单位为 Byte。

4. configAPPLICATION_ALLOCATED_HEAP宏定义配置

#define configAPPLICATION_ALLOCATED_HEAP                0                       
/* 1: 用户手动分配FreeRTOS内存堆(ucHeap), 默认: 0 */
        此宏用于自定义 FreeRTOS 的内存堆,当宏 configAPPLICATION_ALLOCATED_HEAP 设 置为 1 时,用户需要自行创建 FreeRTOS 的内存堆,否则 FreeRTOS 的内存堆将由编译器进行分 配。利用此宏定义,可以使用 FreeRTOS 动态管理外扩内存。

5. configSTACK_ALLOCATION_FROM_SEPARATE_HEAP宏定义配置

#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP       0                      
 /* 1: 用户自行实现任务创建时使用的内存申请与释放函数, 默认: 0 */
        此宏用于自定义动态创建和删除任务时,任务栈内存的申请与释放函数pvPortMallocStack() 和vPortFreeStack(),当宏configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 设置为1是, 用户需提供 pvPortMallocStack()和 vPortFreeStack()函数。

钩子函数的相关定义

所谓的钩子函数就是回调函数

1. configUSE_IDLE_HOOK

#define configUSE_IDLE_HOOK                             0                       
/* 1: 使能空闲任务钩子函数, 无默认需定义  */
        此宏用于使能使用空闲任务钩子函数,当宏 configUSE_IDLE_HOOK 设置为 1 时,使能使 用空闲任务钩子函数,用户需自定义相关钩子函数;当宏 configUSE_IDLE_HOOK 设置为 0 时, 则不使能使用空闲任务钩子函数。

2. configUSE_TICK_HOOK

#define configUSE_TICK_HOOK                             0                       
/* 1: 使能系统时钟节拍中断钩子函数, 无默认需定义 */
        此宏用于使能使用系统时钟节拍中断钩子函数,当宏 configUSE_TICK_HOOK 设置为 1 时, 使 能 使 用 系 统 时 钟 节 拍 中 断 钩 子 函 数 , 用 户 需 自 定 义 相 关 钩 子 函 数 ; 当 宏 configUSE_TICK_HOOK 设置为 0 时,则不使能使用系统时钟节拍中断钩子函数。

3. configCHECK_FOR_STACK_OVERFLOW

#define configCHECK_FOR_STACK_OVERFLOW                  0                       
/* 1: 使能栈溢出检测方法1, 2: 使能栈溢出检测方法2, 默认: 0 */
        此宏用于使能栈溢出检测,当宏 configCHECK_FOR_STACK_OVERFLOW 设置为 1 时, 使用栈溢出检测方法一;当宏 configCHECK_FOR_STACK_OVERFLOW 设置为 2 时,栈溢出 检测方法二;当宏 configCHECK_FOR_STACK_OVERFLOW 设置为 0 时,不使能栈溢出检测。

4. configUSE_MALLOC_FAILED_HOOK

#define configUSE_MALLOC_FAILED_HOOK                    0                      
 /* 1: 使能动态内存申请失败钩子函数, 默认: 0 */
        此 宏 用 于 使 能 使 用 动 态 内 存 分 配 失 败 钩 子 函 数 , 当configUSE_MALLOC_FAILED_HOOK 设置为 1 时,使能使用动态内存分配失败钩子函数,用 户需自定义相关钩子函数;当宏 configUSE_MALLOC_FAILED_HOOK 设置为 0 时,则不使能 使用动态内存分配失败钩子函数。

5. configUSE_DAEMON_TASK_STARTUP_HOOK

#define configUSE_DAEMON_TASK_STARTUP_HOOK              0                      
 /* 1: 使能定时器服务任务首次执行前的钩子函数, 默认: 0 */
        此 宏 用 于 使 能 使 用 定 时 器 服 务 任 务 首 次 执 行 前 的 钩 子 函 数 , 当 宏 configUSE_DEAMON_TASK_STARTUP_HOOK 设置为 1 时,使能使用定时器服务任务首次执 行前的钩子函数,此时用户需定义定时器服务任务首次执行的相关钩子函数;当宏 configUSE_DEAMON_TASK_STARTUP_HOOK 设置为 0 时,则不使能使用定时器服务任务首 次执行前的钩子函数。

运行时间和任务状态统计相关定义

1. configGENERATE_RUN_TIME_STATS

#define configGENERATE_RUN_TIME_STATS                   0                      
 /* 1: 使能任务运行时间统计功能, 默认: 0 */
        此宏用于使能任务运行时间统计功能,当宏 configGENERATE_RUN_TIME_STATS 设置为 正点原子 FreeRTOS 开发教程 59 FreeRTOS 开发指南 1 时,使能任务运行时间统计功能,此时用户需要提供两个函数,一个是用于配置任务运行时 间统计功能的函数 portCONFIGURE_TIMER_FOR_RUN_TIME_STATS(),一般是完成定时器的 初始化,另一个函数是 portGET_RUN_TIME_COUNTER_VALUE(),该函数用于获取定时器的 计时值;当宏 configGENERATE_RUN_TIME_STATS 设置为 0 时,则不使能任务运行时间统计 功能。

2. configUSE_TRACE_FACILITY

#define configUSE_TRACE_FACILITY                        1                       
/* 1: 使能可视化跟踪调试, 默认: 0 */
        此宏用于使能可视化跟踪调试,当宏 configUSE_TRACE_FACILITY 设置为 1 时,使能可 视化跟踪调试;当宏 configUSE_TRACE_FACILITY 设置为 0 时,则不使能可视化跟踪调试。

3. configUSE_STATS_FORMATTING_FUNCTIONS

#define configUSE_STATS_FORMATTING_FUNCTIONS            1                       
/* 1: configUSE_TRACE_FACILITY为1时,会编译vTaskList()
和vTaskGetRunTimeStats()函数,默认: 0 */
        当此宏与 configUSE_TRACE_FACILITY 同时设置为 1 时,将编译函数 vTaskList()和函数 vTaskGetRunTimeStats(),否则将忽略编译函数 vTaskList()和函数 vTaskGetRunTimeStats()。

软件定时器相关配置

1. configUSE_TIMERS

#define configUSE_TIMERS                                1                               
/* 1: 使能软件定时器, 默认: 0 */
        此宏用于启用软件定时器功能,当宏 configUSE_TIMERS 设置为 1 时,启用软件定时器功 能;当宏 configUSE_TIMERS 设置为 0 时,则不启用软件定时器功能。

2. configTIMER_TASK_PRIORITY

#define configTIMER_TASK_PRIORITY                       ( configMAX_PRIORITIES - 1 )   
 /* 定义软件定时器任务的优先级, 无默认configUSE_TIMERS为1时需定义 */
        此宏用于设置软件定时器处理任务的优先级,当启用软件定时器功能时,系统会创建一个 用于处理软件定时器的软件定时器处理任务。

3. configTIMER_QUEUE_LENGTH

#define configTIMER_QUEUE_LENGTH                        5                             
  /* 定义软件定时器命令队列的长度, 无默认configUSE_TIMERS为1时需定义 */
        此宏用于定义软件定时器队列的长度,软件定时器的开启、停止与销毁等操作都是通过队 列实现的。

4. configTIMER_TASK_STACK_DEPTH

#define configTIMER_TASK_STACK_DEPTH                    ( configMINIMAL_STACK_SIZE * 2) /* 定义软件定时器任务的栈空间大小, 无默认configUSE_TIMERS为1时需定义 */
        当启用软件定时器功能时,系统会创建 一个用于处理软件定时器的软件定时器处理任务。

“INCLUDE_”开始的宏

 使用“INCLUDE_”开头的宏用来表示使能或失能FreeRTOS 中相应的API 函数,作用就是用来配置FreeRTOS 中的可选API 函数的。比如当宏INCLUDE_vTaskPrioritySet 设置为0 的时候表示不能使用函数vTaskPrioritySet() , 当设置为1 的时候就表示可以使用函数vTaskPrioritySet()。这个功能其实就是条件编译,在文件tasks.c 中有如下图3.1.1 所示的代码。
———————————————— 版权声明:本文为CSDN博主「唯恋殊雨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/tichimi3375/article/details/80659255
                 图3.1.1 条件编译
从图3.1.1 可以看出当满足条件: NCLUDE_vTaskPrioritySet == 1 的时候, 函数vTaskPrioritySet()才会被编译,注意,这里为了缩小篇幅将函数vTaskPrioritySet()的内容进行了折叠。FreeRTOS 中的裁剪和配置就是这种用条件编译的方法来实现的,不止FreeRTOS 这么干,很多的协议栈、RTOS 系统和GUI 库等都是使用条件编译的方法来完成配置和裁剪的。条件编译的好处就是节省空间,不需要的功能就不用编译,这样就可以根据实际需求来减少系统占用的ROM 和RAM 大小,根据自己所使用的MCU 来调整系统消耗,降低成本。下面来看看“INCLUDE_”开始的都有哪些宏,它们的功能都是什么。
1、INCLUDE_xSemaphoreGetMutexHolder
如果要使用函数xQueueGetMutexHolder()的话宏INCLUDE_xSemaphoreGetMutexHolder 必须定义为1。

2、INCLUDE_xTaskAbortDelay

如果要使用函数xTaskAbortDelay()的话将宏INCLUDE_xTaskAbortDelay 定义为1。

3、INCLUDE_vTaskDelay

如果要使用函数vTaskDelay()的话需要将宏INCLUDE_vTaskDelay 定义为1。

4、INCLUDE_vTaskDelayUntil
如果要使用函数vTaskDelayUntil()的话需要将宏INCLUDE_vTaskDelayUntil 定义为1。

5、INCLUDE_vTaskDelete
如果要使用函数vTaskDelete()的话需要将宏INCLUDE_vTaskDelete 定义为1。

6、INCLUDE_xTaskGetCurrentTaskHandle
如果要使用函数xTaskGetCurentTaskHandle() 的话需要将宏INCLUDE_xTaskGetCurrentTaskHandle 定义为1。

7、INCLUDE_xTaskGetHandle
如果要使用函数xTaskGetHandle()的话需要将宏INCLUDE_xTaskGetHandle 定义为1。

8、INCLUDE_xTaskGetIdleTaskHandle
如果要使用函数xTaskGetIdleTaskHandle() 的话需要将宏INCLUDE_xTaskGetIdleTaskHandle 定义为1。

9、INCLUDE_xTaskGetSchedulerState
如果要使用函数xTaskGetSchedulerState()的话需要将宏INCLUDE_xTaskGetSchedulerState定义为1。

10、INCLUDE_uxTaskGetStackHighWaterMark
如果要使用函数uxTaskGetStackHighWaterMark() 的话需要将宏INCLUDE_uxTaskGetStackHighWaterMark 定义为1。

11、INCLUDE_uxTaskPriorityGet
如果要使用函数uxTaskPriorityGet()的话需要将宏INCLUDE_uxTaskPriorityGet 定义为1。

12、INCLUDE_vTaskPrioritySet
如果要使用函数vTaskPrioritySet()的话需要将宏INCLUDE_vTaskPrioritySet 定义为1。

13、INCLUDE_xTaskResumeFromISR
如果要使用函数xTaskResumeFromISR()的话需要将宏INCLUDE_xTaskResumeFromISR 和
INCLUDE_vTaskSuspend 都定义为1。

14、INCLUDE_eTaskGetState
如果要使用函数eTaskGetState()的话需要将宏INCLUDE_eTaskGetState 定义为1。

15、INCLUDE_vTaskSuspend
如果要使用函数vTaskSuspend() 、vTaskResume() 、prvTaskIsTaskSuspended() 、xTaskResumeFromISR()的话宏INCLUDE_vTaskSuspend 要定义为1。如果要使用函数xTaskResumeFromISR() 的话宏INCLUDE_xTaskResumeFromISR 和INCLUDE_vTaskSuspend 都必须定义为1。

16、INCLUDE_xTimerPendFunctionCall
如果要使用函数xTimerPendFunctionCall() 和xTimerPendFunctionCallFromISR() 的话宏INCLUDE_xTimerPendFunctionCall 和configUSE_TIMERS 都必须定义为1。

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

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

相关文章

C++ static静态

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 用 static 修饰的成员变量,称之为静态成员变量,静态成…

车辆重识别(2021NIPS无分类器扩散指南)论文阅读2024/10/08

什么叫做有条件和无条件的扩散模型? FID是什么? IS是什么? λ是给出的参数,就像去噪扩散模型中每个时间步的β一样,每一时间步的λ都会给出。对于是否有条件信息c的概率 我的意思是在每一个训练轮次中&#xf…

一个适用于 ASP.NET Core 的轻量级插件框架

前言 今天大姚给大家分享一个适用于 ASP.NET Core 的轻量级插件框架,简单配置,开箱即用:PluginCore。 项目概述 PluginCore 是一个基于 ASP.NET Core 的轻量级插件框架,旨在简化插件的集成与管理。通过最少的配置,开…

wps文本框文字居中对齐

直接点对齐里的水平居中,垂直居中是将文本框水平垂直居中,文字不会居中 将文本框里的文字居中: 垂直居中: 水平居中:

基于SpringBoot的校园健康信息管理系统

第1章 绪论 1.1背景及意义 随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们对医院管理方面的要求也在不断提高,由于老龄化人数更是不断增加,使得师生健康信息管理系统的开发成为必需而且紧…

前端反接保护:实用方案解析与探讨

前端反接保护通常采用肖特基二极管方案或PMOS/NMOS方案,本文另外介绍一种理想二极管方案。 1、肖特基二极管方案 由于肖特基二极管具有正向导通电压,只能用于小电流场合,甚至于直接使用普通的整流二极管。比如1A电流,设D1的正向…

笔记整理—linux进程部分(9)互斥锁

互斥锁也叫互斥量,可以看作一种特殊的信号量。信号量可以>0,大家可以排队使用信号量,互斥锁只有0、1,主要实现关键段保护,只能在某一时间给某一任务去调用这段资源,这段内容用之前上锁,用完时…

Spring一共有几种注入方式?

目录 一、Spring Ioc 什么是 IOC? 依赖倒置原则 为什么叫控制反转? 两种实现方式 依赖注入DI Spring有哪些注入方式? 1. 构造方法注入 2. Setter方法注入 3. 字段/属性注入 4. 方法注入 5. 接口注入 6. 注解注入 二、Spring Ao…

gaussdb hccdp认证模拟题(多选)

1.以下哪些方式可以查询数据库信息? (1 分) A. \l B. \db C. select * from pg_database; D. select * from gs_database; --AC 2.以下哪些权限是开启三权分立后系统管理员不再具备的权限? (1 分) A. 用户管理权限 B. 表空间管理权限 C. …

通信工程学习:什么是三网融合

三网融合 三网融合,又称“三网合一”,是指电信网、广播电视网、互联网在高层业务应用上的深度融合。这一概念在近年来随着信息技术的快速发展而逐渐受到重视,并成为推动信息化社会建设的重要力量。以下是对三网融合的详细解释: 一…

20.数据结构与算法-树和二叉树/满二叉树/完全二叉树/二叉树的性质/二叉树的存储结构

树的定义 树的其它表示方法 树的基本术语 树结构和线性结构的比较 二叉树的定义 二叉树案例引入 二叉树的抽象数据类型定义 二叉树的性质 两种特殊形式的二叉树 满二叉树 完全二叉树 完全二叉树的性质 二叉树的存储结构 二叉树的顺序存储 二叉树的链式存储结构 二叉链表 三叉链…

GISBox工具:轻松实现倾斜摄影数据从OSGB到3D Tiles的转变

在现代地理信息系统(GIS)和三维可视化领域,倾斜摄影数据(OSGB格式)和3D Tiles格式是两种广泛应用的数据格式。然而,将OSGB数据转换为3D Tiles格式以便在Cesium等平台上加载和展示,一直是许多开发…

[控制理论]—差分变换法与双线性变换法的基本原理和代码实现

差分变换法与双线性变换法的基本原理和代码实现 1.差分变换法 差分变换法就是把微分方程中的导数用有限差分来近似等效,得到一个与原微分方程逼近的差分方程。 差分变换法包括后向差分与前向差分。 1.1 后向差分法 差分变换如下: d e ( t ) d t e…

Stable Diffusion绘画 | 签名、字体、Logo设计

第1步,使用 PS(小白推荐使用 可画)准备一个 512*768 的签名、字体、Logo图片: 第2步,来到模型网站,搜索🔍关键词“电商”,找到一款喜欢的 LoRA: 第3步,选择一…

什么是fastText

1. 什么是fastText 英语单词通常有其内部结构和形成⽅式。例如,我们可以从“dog”“dogs”和“dogcatcher”的字⾯上推测它们的关系。这些词都有同⼀个词根“dog”,但使⽤不同的后缀来改变词的含义。而且,这个关联可以推⼴⾄其他词汇。 在wor…

初学者如何快速入门人工智能

一、引言 人工智能(Artificial Intelligence,简称AI),作为当今科技领域极具前景与影响力的方向之一,吸引着众多人士投身其中。无论是对科技充满好奇的学生,还是意图拓展职业发展路径的职场人士&#xff0c…

Linux的图形系统概述 (TODO)

(TODO) Linux graphics stack 现代 Linux 图形栈由多个子系统和层次组成,从应用程序到硬件之间的各个层面协同工作来处理图形显示和硬件加速。随着时间的推移,Linux 从传统的 **X Window System** 逐步过渡到 **Wayland**&#x…

filebrowser:轻松管理服务器文件,跨平台云端存储新选择

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 filebrowser是一款功能强大的文件管理器,用户可以通过浏览器对服务器上的文件进行修改、添加、删除甚至分享。其界面简洁,操作…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习07(基于docker容器的防火墙及NAT企业实战)

7.1 网络准备 7.2 网络规划 1)虚拟网络编辑器 点击右下方“更改设置”,点击“添加网络”假如vmnet3和vmnet4,然后分别选择vmnet3和vmnet4,设置为“仅主机模式”,按③处处理,去掉“使用DHCP”,…

Unite Shanghai 2024 团结引擎专场 | 团结引擎 OpenHarmony 工程剖析

在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中,Unity中国 OpenHarmony 技术负责人刘伟贤对团结引擎导出的 OpenHarmony 工程进行了细节剖析,详细讲解 XComponent 如何与引擎结合,UI 线程和引擎线程的关联以及 ts/ets 的代…