基于HAL库的FREERTOS----------二.任务API函数

2023-10-29

任务API函数览概

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
CUBEMX对freertos做了API的封装,很多freertos的函数没有封装到位,可以用原函数调用。

任务API函数分别介绍

1.uxTaskPriorityGet()
此函数用来获取指定任务的优先级,要使用此函数的话宏 INCLUDE_uxTaskPriorityGet 应
该定义为 1

uxTaskPriorityGet( TaskHandle_t xTask )
参数:
xTask: 要查找的任务的任务句柄。
返回值: 获取到的对应的任务的优先级。

2.函数 vTaskPrioritySet()
此 函 数 用 于 改 变 某 一 个 任 务 的 任 务 优 先 级 , 要 使 用 此 函 数 的 话 宏
INCLUDE_vTaskPrioritySet 应该定义为 1

void vTaskPrioritySet( TaskHandle_t xTask, 
UBaseType_t uxNewPriority )
参数:
xTask: 要查找的任务的任务句柄。
uxNewPriority: 任务要使用的新的优先级,可以是 0~ configMAX_PRIORITIES – 1

3、uxTaskGetSystemState()
此函数用于获取系统中所有任务的任务壮态,每个任务的壮态信息保存在一个 TaskStatus_t
类型的结构体里面,这个结构体里面包含了任务的任务句柄、任务名字、堆栈、优先级等信息,
要使用此函数的话宏 configUSE_TRACE_FACILITY 应该定义为 1
在这里插入图片描述
根据使用要求,应当在CUBEMX中使能相应配置。此处说明,后面API函数同理,不再举例

UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, 
const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime )
参数:
pxTaskStatusArray: 指向 TaskStatus_t 结构体类型的数组首地址,每个任务至少需要一个
TaskStatus_t 结 构 体 , 任 务 的 数 量 可 以 使 用 函 数
uxTaskGetNumberOfTasks()。结构体 TaskStatus_t 在文件 task.h 中有如下
定义:
typedef struct xTASK_STATUS
{
TaskHandle_t xHandle; //任务句柄
const char * pcTaskName; //任务名字
UBaseType_t xTaskNumber; //任务编号
eTaskState eCurrentState; //当前任务壮态,eTaskState 是一个枚举类型
UBaseType_t uxCurrentPriority; //任务当前的优先级
UBaseType_t uxBasePriority; //任务基础优先级
uint32_t ulRunTimeCounter;//任务运行的总时间
StackType_t * pxStackBase; //堆栈基地址
uint16_t usStackHighWaterMark;//从任务创建以来任务堆栈剩余的最小大小,此
//值如果太小的话说明堆栈有溢出的风险。
} TaskStatus_t;
uxArraySize: 保存任务壮态数组的数组的大小。
pulTotalRunTime: 如果 configGENERATE_RUN_TIME_STATS 为 1 的话此参数用来保存系
统总的运行时间。
返回值: 统计到的任务壮态的个数,也就是填写到数组 pxTaskStatusArray 中的个
数,此值应该等于函数 uxTaskGetNumberOfTasks()的返回值。如果参数
uxArraySize 太小的话返回值可能为 0

4.函数 vTaskGetInfo()
此函数也是用来获取任务壮态的,但是是获取指定的单个任务的壮态的,任务的壮态信息
填充到参数 pxTaskStatus 中,这个参数也是 TaskStatus_t 类型的。要使用此函数的话宏
configUSE_TRACE_FACILITY 要定义为 1

void vTaskGetInfo( TaskHandle_t xTask, 
TaskStatus_t * pxTaskStatus, 
BaseType_t xGetFreeStackSpace, 
eTaskState eState )
参数:
xTask: 要查找的任务的任务句柄。
pxTaskStatus: 指向类型为 TaskStatus_t 的结构体变量。
xGetFreeStackSpace: 在结构体 TaskStatus_t 中有个字段 usStackHighWaterMark 来保存自任务
运行以来任务堆栈剩余的历史最小大小,这个值越小说明越接近堆栈溢
出,但是计算这个值需要花费一点时间, 所以我们可以通过将
xGetFreeStackSpace设置为pdFALSE来跳过这个步骤,当设置为pdTRUE
的时候就会检查堆栈的历史剩余最小值。
eState: 结构体 TaskStatus_t 中有个字段 eCurrentState 用来保存任务运行壮态,
这个字段是 eTaskState 类型的,这是个枚举类型,在 task.h 中有如下定
义:
typedef enum
{
eRunning = 0, //运行壮态
eReady, //就绪态
eBlocked, //阻塞态
eSuspended, //挂起态
eDeleted, //任务被删除
eInvalid //无效
} eTaskState;
获取任务运行壮态会耗费不少时间,所以为了加快函数 vTaskGetInfo()的执行
速度结构体 TaskStatus_t 中的字段 eCurrentState 就可以由用户直接赋值,
参数 eState 就是要赋的值。如果不在乎这点时间,那么可以将 eState 设置为
eInvalid,这样任务的壮态信息就由函数 vTaskGetInfo()去想办法获取。
返回值: 无

5、函数 xTaskGetApplicationTaskTag()
此函数用于获取任务的 Tag(标签)值,任务控制块中有个成员变量 pxTaskTag 来保存任务的
标签值。标签的功能由用户自行决定,此函数就是用来获取这个标签值的,FreeRTOS 系统内核
是不会使用到这个标签的。要使用此函数的话宏 configUSE_APPLICATION_TASK_TAG 必须为
1

TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask )
参数:
xTask: 要获取标签值的任务对应的任务句柄,如果为 NULL 的话就获取当前正在运
行的任务标签值。
返回值: 任务的标签值

6、函数 xTaskGetCurrentTaskHandle()
此函数用于获取当前任务的任务句柄,其实获取到的就是任务控制块,在前面讲解任务创
建 函 数 的 时 候 说 过 任 务 句 柄 就 是 任 务 控制。 如 果 要 使 用 此 函 数 的 话 宏
INCLUDE_xTaskGetCurrentTaskHandle 应该为 1

TaskHandle_t xTaskGetCurrentTaskHandle( void )
参数: 无
返回值: 当前任务的任务句柄

7、函数 xTaskGetHandle()
此函数根据任务名字获取任务的任务句柄,在使用函数 xTaskCreate()或 xTaskCreateStatic()
创建任务的时候都会给任务分配一个任务名,函数 xTaskGetHandle()就是使用这个任务名字来
查询其对应的任务句柄的。要使用此函数的话宏 INCLUDE_xTaskGetHandle 应该设置为 1

TaskHandle_t xTaskGetHandle( const char * pcNameToQuery )
参数:
pcNameToQuery: 任务名,C 语言字符串。
返回值:
NULL: 没有任务名 pcNameToQuery 所对应的任务。
其他值: 任务名 pcNameToQuery 所对应的任务句柄

8、函数 xTaskGetIdleTaskHandle()
此 函 数 用 于 返 回 空 闲 任 务 的 任 务 句 柄 , 要 使 用 此 函 数 的 话 宏
INCLUDE_xTaskGetIdleTaskHandle 必须为 1

TaskHandle_t xTaskGetIdleTaskHandle( void )
参数: 无
返回值: 空闲任务的任务句柄。

9、函数 uxTaskGetStackHighWaterMark()
每个任务都有自己的堆栈,堆栈的总大小在创建任务的时候就确定了,此函数用于检查任
务从创建好到现在的历史剩余最小值,这个值越小说明任务堆栈溢出的可能性就越大!
FreeRTOS 把这个历史剩余最小值叫做“高水位线”。此函数相对来说会多耗费一点时间,所以
在代码调试阶段可以使用,产品发布的时候最好不要使用。要使用此函数的话宏
INCLUDE_uxTaskGetStackHighWaterMark 必须为 1

UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )
参数:
xTask: 要查询的任务的任务句柄,当这个参数为 NULL 的话说明查询自身任务(即调用
函数 uxTaskGetStackHighWaterMark()的任务)的“高水位线”。
返回值: 任务堆栈的“高水位线”值,也就是堆栈的历史剩余最小值。

10、函数 eTaskGetState()
此函数用于查询某个任务的运行壮态,比如:运行态、阻塞态、挂起态、就绪态等,返回
值是个枚举类型。要使用此函数的话宏 INCLUDE_eTaskGetState 必须为 1

eTaskState eTaskGetState( TaskHandle_t xTask )
参数:
xTask: 要查询的任务的任务句柄。
返回值: 返回值为 eTaskState 类型,这是个枚举类型,在文件 task.h 中有定义,前面讲解
函数 vTaskGetInfo()的时候已经讲过了

11、函数 pcTaskGetName()
根据某个任务的任务句柄来查询这个任务对应的任务名

char *pcTaskGetName( TaskHandle_t xTaskToQuery )
参数:
xTaskToQuery: 要查询的任务的任务句柄,此参数为 NULL 的话表示查询自身任务(调
用函数 pcTaskGetName())的任务名字
返回值: 返回任务所对应的任务名

12、函数 xTaskGetTickCount()
此函数用于查询任务调度器从启动到现在时间计数器 xTickCount 的值。xTickCount 是系统
的时钟节拍值,并不是真实的时间值。每个滴答定时器中断 xTickCount 就会加 1,一秒钟滴答
定时器中断多少次取决于宏 configTICK_RATE_HZ。理论上 xTickCount 存在溢出的问题,但是
这个溢出对于 FreeRTOS 的内核没有影响,但是如果用户的应用程序有使用到的话就要考虑溢出了。什么时候溢出取决于宏configUSE_16_BIT_TICKS,当此宏为 1 的时候 xTixkCount 就是个 16 位的变量,当为 0 的时候就是个 32 位的变量

TickType_t xTaskGetTickCount( void )
参数: 无。
返回值: 时间计数器 xTickCount 的值

13、函数 xTaskGetTickCountFromISR()
此函数是 xTaskGetTickCount()的中断级版本,用于在中断服务函数中获取时间计数器xTickCount 的值

TickType_t xTaskGetTickCountFromISR( void )
参数: 无。
返回值: 时间计数器 xTickCount 的值

14、函数 xTaskGetSchedulerState()
此函数用于获取 FreeRTOS 的任务调度器运行情况:运行?关闭?还是挂起!要使用此函
数的话宏 INCLUDE_xTaskGetSchedulerState 必须为 1

BaseType_t xTaskGetSchedulerState( void )
参数: 无。
返回值: 
taskSCHEDULER_NOT_STARTED: 调 度 器 未 启 动 , 调 度 器 的 启 动 是 通 过 函 数
vTaskStartScheduler() 来完成,所以在函数
vTaskStartScheduler() 未调用之前调用函数

xTaskGetSchedulerState()的话就会返回此值。
taskSCHEDULER_RUNNING: 调度器正在运行。
taskSCHEDULER_SUSPENDED: 调度器挂起。

15、函数 uxTaskGetNumberOfTasks()
此函数用于查询系统当前存在的任务数量

UBaseType_t uxTaskGetNumberOfTasks( void )
参数: 无。
返回值: 当前系统中存在的任务数量, 此值=挂起态的任务+阻塞态的任务+就绪态的任务 
 +空闲任务+运行态的任务。

16、函数 vTaskList()
此函数会创建一个表格来描述每个任务的详细信息

void vTaskList( char * pcWriteBuffer )
参数:
pcWriteBuffer: 保存任务壮态信息表的存储区。存储区要足够大来保存任务状态信息表。
返回值: 无

17、函数 vTaskGetRunTimeStats()
FreeRTOS 可以通过相关的配置来统计任务的运行时间信息,任务的运行时间信息提供了
每个任务获取到 CPU 使用权总的时间。函数 vTaskGetRunTimeStats()会将统计到的信息填充到
一个表里面,表里面提供了每个任务的运行时间和其所占总时间的百分比,如图 11.2.2 所示:
图 11.2.2 任务运行时间表
函 数 vTaskGetRunTimeStats() 是 一 个 很 实 用 的 函 数 , 要 使 用 此 函 数 的 话 宏
configGENERATE_RUN_TIME_STATS 和 configUSE_STATS_FORMATTING_FUNCTIONS 必须
都为 1。如果宏 configGENERATE_RUN_TIME_STATS 为 1 的话还需要实现一下几个宏定义:
● portCONFIGURE_TIMER_FOR_RUN_TIME_STATS(),此宏用来初始化一个外设来
提供时间统计功能所需的时基,一般是定时器/计数器。这个时基的分辨率一定要比 FreeRTOS
的系统时钟高,一般这个时基的时钟精度比系统时钟的高 10~20 倍就可以了。
● portGET_RUN_TIME_COUNTER_VALUE()或者
portALT_GET_RUN_TIME_COUNTER_VALUE(Time),这两个宏实现其中一个就行
了,这两个宏用于提供当前的时基的时间值

void vTaskGetRunTimeStats( char *pcWriteBuffer )
参数:
pcWriteBuffer: 保存任务时间信息的存储区。存储区要足够大来保存任务时间信息。
返回值: 无

18、函数 vTaskSetApplicationTaskTag()
此函数是为高级用户准备的,此函数用于设置某个任务的标签值 ,这个标签值的具体函数
和用法由用户自行决定,FreeRTOS 内核不会使用这个标签值,如果要使用此函数的话宏
configUSE_APPLICATION_TASK_TAG 必须为 1

void vTaskSetApplicationTaskTag( TaskHandle_t xTask, 
TaskHookFunction_t pxHookFunction )
参数:
xTask: 要设置标签值的任务,此值为 NULL 的话表示设置自身任务的标签值。
pxHookFunction: 要设置的标签值,这是一个 TaskHookFunction_t 类型的函数指针,但是
也可以设置为其他值。
返回值: 无

19、函数 SetThreadLocalStoragePointer()
此函数用于设置线程本地存储指针的值,每个任务都有它自己的指针数组来作为线程本地
存储,使用这些线程本地存储可以用来在任务控制块中存储一些应用信息,这些信息只属于任
务 自 己 的 。 线 程 本 地 存 储 指 针 数 组 的 大 小 由 宏
configNUM_THREAD_LOCAL_STORAGE_POINTERS 来决定的。如果要使用此函数的话宏
configNUM_THREAD_LOCAL_STORAGE_POINTERS 不能为 0,宏的具体值是本地存储指针
数组的大小,

void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, 
BaseType_t xIndex, 
void * pvValue )
参数:
xTaskToSet: 要设置线程本地存储指针的任务的任务句柄,如果是 NULL 的话表示设置任
务自身的线程本地存储指针。
xIndex: 要设置的线程本地存储指针数组的索引。
pvValue: 要存储的值。
返回值: 无

20、函数 GetThreadLocalStoragePointer()
此 函 数 用 于 获 取 线 程 本 地 存 储 指 针 的 值 , 如 果 要 使 用 此 函 数 的 话 宏
configNUM_THREAD_LOCAL_STORAGE_POINTERS 不能为 0

void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, 
BaseType_t xIndex )
参数:
xTaskToSet: 要获取的线程本地存储指针的任务句柄,如果是 NULL 的话表示获取任务自
身的线程本地存储指针。
xIndex: 要获取的线程本地存储指针数组的索引。
返回值: 获取到的线程本地存储指针的值。

实验验证
此处验证API函数第三个,应该在CUBEMX中开启
在这里插入图片描述

void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
	
		uint32_t TotalRunTime;
		UBaseType_t ArraySize,x;
		TaskStatus_t *StatusArray;
  /* Infinite loop */
  for(;;)
  {
		
		//第一步:函数 uxTaskGetSystemState()的使用
		printf("/********第一步:函数 uxTaskGetSystemState()的使用**********/\r\n");
		ArraySize=uxTaskGetNumberOfTasks(); //获取系统任务数量 (1)
		StatusArray=pvPortMalloc(ArraySize*sizeof(TaskStatus_t)); //申请内存 (2)
		if(StatusArray!=NULL) //内存申请成功
		{
			ArraySize=uxTaskGetSystemState((TaskStatus_t* )StatusArray,// (3)
																			(UBaseType_t )ArraySize, 
																			(uint32_t* )&TotalRunTime);
			printf("TaskName\t\tPriority\t\tTaskNumber\t\t\r\n");
			for(x=0;x<ArraySize;x++)
			{
				//通过串口打印出获取到的系统任务的有关信息,比如任务名称、
				//任务优先级和任务编号。
				printf("%s\t\t%d\t\t\t%d\t\t\t\r\n", 												//(4)
								StatusArray[x].pcTaskName,
								(int)StatusArray[x].uxCurrentPriority,
								(int)StatusArray[x].xTaskNumber);
			}
		}
		vPortFree(StatusArray); //释放内存 (5)
    osDelay(1000);
  }
  /* USER CODE END StartTask02 */
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于HAL库的FREERTOS----------二.任务API函数 的相关文章

  • 使用 GCC 编译器的 ARM 内核的堆栈回溯(当存在 MSP 到 PSP 切换时)

    核心 ARM Cortex M4 编译器 GCC 5 3 0 ARM EABI 操作系统 免费 RTOS 我正在使用 gcc 库函数 Unwind Reason Code Unwind Backtrace Unwind Trace Fn v
  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • Push_back() 导致程序在进入 main() 之前停止

    我正在为我的 STM32F3 Discovery 板使用 C 进行开发 并使用 std deque 作为队列 在尝试调试我的代码 直接在带有 ST link 的设备上或在模拟器中 后 代码最终在 main 中输入我的代码之前在断点处停止 然
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • 防止GCC LTO删除函数

    我使用 GCC ARM Embedded 和 FreeRTOS FreeRTOS具有的功能vTaskSwitchContext 仅在某些情况下使用 内联汇编代码 问题是 当我使用LTO时 GCC不考虑内联汇编代码并认为该函数没有被使用 因此
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • FreeRTOS 匈牙利表示法 [重复]

    这个问题在这里已经有答案了 我是 RTOS 和 C 编程的新手 而且我仍在习惯 C 的良好实践 因此 我打开了一个使用 FreeRTOS 的项目 我注意到操作系统文件使用匈牙利表示法 我知道一点符号 但面临一些新的 标准 FreeRTOS
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 从没有中断引脚并且在测量准备好之前需要一些时间的传感器读取数据的最佳方法

    我正在尝试将压力传感器 MS5803 14BA 与我的板 NUCLEO STM32L073RZ 连接 根据 第 3 页 压力传感器需要几毫秒才能准备好读取测量值 对于我的项目 我对需要大约 10 毫秒来转换原始数据的最高分辨率感兴趣 不幸的
  • C++ freeRTOS任务,非静态成员函数的无效使用

    哪里有问题 void MyClass task void pvParameter while 1 this gt update void MyClass startTask xTaskCreate this gt task Task 204
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015

随机推荐

  • 华为OD机试 - 字符串解密(Java)

    题目描述 给定两个字符串string1和string2 string1是一个被加扰的字符串 string1由小写英文字母 a z 和数字字符 0 9 组成 而加扰字符串由 0 9 a f 组成 string1里面可能包含0个或多个加扰子串
  • 云计算在IT领域的发展和应用

    文章目录 云计算的发展历程 云计算的核心概念 云计算在IT领域的应用 1 基础设施即服务 IaaS 2 平台即服务 PaaS 3 软件即服务 SaaS 云计算的拓展应用 结论 欢迎来到AIGC人工智能专栏 云计算在IT领域的发展和应用 o
  • ARMv8的两种执行状态: AArch64/AArch32

    Copied from ARM Compiler User Guide When compiling code you must first decide which target the executable is to run on A
  • 智能温控风扇设计(采用74ls164移位寄存器)

    温度传感器DS18B20采集环境模拟信号 其输出送入AT89C51 单片机在程序的控制下 将处理过的数据送到移位寄存器74LS164 经74LS164输出后驱动三位数码管显示 当被测温度高于18 时 单片机发出控制信号使降温电扇以自然风的形
  • 电脑能上QQ无法上网页解决方法总结

    一 简单办法 使用腾讯管家 gt 工具箱 gt 电脑诊所 gt 上网异常 gt 能上QQ无法上网页 gt 立即修复 二 较复杂办法 很明显的问题 这个是DNS出了问题 我告诉你一招 基本是100 可以解决的 网上邻居右键属性 找到你的本地连
  • RocketMQ参数配置

    一 MQ启动 gt nohup sh mqnamesrv gt nohup sh mqbroker n 47 97 72 25 9876 c broker properties jps查看启动情况 二 broker properties参数
  • Git - 如何将git修改的文件导出和导入

    1 应用场景 主要用于将git修改的文件导出和导入 帮助提高工作效率 2 学习 操作 1 文档阅读 来自chatGPT的对话 2 整理输出 2 1 如何将git修改的文件导出来 如果您只是想将 Git 仓库中的文件导出到本地磁盘中 而不需要
  • 【PTA】分解质因数

    求出区间 a b 中所有整数的质因数分解 输入格式 输入两个整数a b 数据规模和约定 2 lt a lt b lt 10000 输出格式 每行输出一个数的分解 形如k a1a2a3 a1 lt a2 lt a3 k也是从小到大的 具体可看
  • Solidity 基础(一)

    Solidity 官网 github Solidity是一种静态类型的花括号 curly braces 编程语言 旨在开发运行在以太坊 Ethereum 上的智能合约 Solidity正在迅速发展 作为一门相对年轻的语言 Solidity正
  • 网络工程(计算机网络)毕业论文+PPT【银行内部网络系统规划与设计】

    我有两位优秀的小兄弟毕业了 在他们的允许下 把这两篇毕业论文写成博客 作为网络专业同学的参考 仅供参考 切勿用作其他用途 论文一 网络工程 计算机网络 毕业论文 PPT 银行内部网络系统规划与设计 论文二 网络工程 计算机网络 毕业论文 P
  • Vite 配置 cdn 加载资源

    一 介绍 上篇文章我们从零配置 Vite Vue3 0 开发环境 生产环境 本篇文章我们配置 CDN 加载 因为 Vite 不会重写从外部文件导入的内容 我们需要使用支持 ESM 编译的 CDN 这里我们使用 https esm sh 来引
  • 下拉ajax,ajax下拉框联动

    My JSP car jsp starting page 请选择汽车品牌 宝马 奥迪 奔驰 请选择系列 var xmlHttp 创建XMLHttpRequest对象 function createXMLHttpRequest if wind
  • Kafka3.0.0版本——消费者(自动提交 offset)

    目录 一 自动提交offset的相关参数 二 消费者 自动提交 offset 代码示例 一 自动提交offset的相关参数 官网文档 参数解释 参数 描述 enable auto commi 默认值为 true 消费者会自动周期性地向服务器
  • Spring Boot实现IP地址解析

    一 本地解析 如果使用本地ip解析的话 我们将会借助ip2region 该项目维护了一份较为详细的本地ip地址对应表 如果为了离线环境的使用 需要导入该项目依赖 并指定版本 不同版本的方法可能存在差异
  • Linux下FFMPEG安装要点

    关于linux下ffmpeg的安装 网上的介绍非常多了 基本都能解决大家的问题 我这里只是总结了几点 1 源码下载 git clone git source ffmpeg org ffmpeg git ffmpeg 2 安装SDL SDL是
  • inux shell和c程序之间互相传递数据

    http blog csdn net yff1030 article details 7857927
  • J2EE02 list(集合框架)

    目录 一 思维导图 编辑 二 list 集合的打印方式 三 list集合的特点 1 有序 2 元素可以重复 四 list的删除 五 list集合的 装箱 拆箱 一 思维导图 二 list 集合的打印方式 1 下标遍历for循环 2 fore
  • Kerberos安全认证-连载10-Hive Kerberos 安全配置及访问

    目录 1 Hive 配置 Kerberos 2 Hive Cli使用Kerberos 3 Hive beeline使用Kerberos 4 JDBC访问Kerberos认证Hive 5 Spark访问Kerberos认证Hive 6 Fli
  • 软件测试之同行评审

    Peer Review 同行评审 一 概念及目的 一般来说 一个产品完成之后通常会由它的作者及作者的同事来进行检查 目的是为了评估产品的技术性和质量 这就是我们所说的同行评审 在软件测试中同样也有同行评审 Peer Review 便于对软件
  • 基于HAL库的FREERTOS----------二.任务API函数

    任务API函数览概 CUBEMX对 做了API的封装 很多 的函数没有封装到位 可以用原函数调用 任务API函数分别介绍 1 uxTaskPriorityGet 此函数用来获取指定任务的优先级 要使用此函数的话宏 INCLUDE uxTas