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

【嵌入式——FreeRTOS】任务

【嵌入式——FreeRTOS】任务

  • 任务创建和删除
    • 动态方式创建任务
    • 静态方式创建任务
  • 删除任务
  • 任务切换
    • 调度器
    • 任务切换流程
  • 任务挂起
  • 任务恢复
  • 相关API函数

任务创建和删除

动态方式创建任务

任务的任务控制块以及任务的栈空间所需的内存,均由freeRTOS从freeRTOS管理的堆中分配。此函数创建任务会立刻进入就绪态,由任务调度器调度运行。
任务的优先级,值越大,优先级越高

函数

xTaskCreate();
//返回值为pdPASS,任务创建成功。
//返回值为errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY,任务创建失败BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,  				//指向任务函数的指针const char * const pcName,  				//任务名字 最大长度configMAX_TASK_NAME_LEN(20)const configSTACK_DEPTH_TYPE usStackDepth,	//任务堆栈大小 字为单位void * const pvParameters,  				//传递给任务函数的参数UBaseType_t uxPriority, 					//任务优先级 范围 0 ~ configMAX_PRIORITIES(32)-1 TaskHandle_t * const pxCreatedTask ) 		//任务句柄,任务的任务控制块

示例

static void udpserver_sendto_client (void* argument){}static TaskHandle_t	udpserver_tid;#define UDPSERVER_THREAD_NAME       "task name"
#define UDPSERVER_THREAD_STKSZ      (configMINIMAL_STACK_SIZE * 4)
#define UDPSERVER_THREAD_PRIO       (tskIDLE_PRIORITY + 3)BaseType_t ret = xTaskCreate(udpserver_sendto_client, UDPSERVER_THREAD_NAME, UDPSERVER_THREAD_STKSZ, 
NULL, UDPSERVER_THREAD_PRIO, &udpserver_tid);

实现动态创建任务流程

  1. 将FreeRTOSConfig.h文件中的configSUPPORT_DYNAMIC_ALLOCATION宏配置为1;
  2. 定义函数入口参数;
  3. 编写任务函数。

动态创建任务内部实现

  1. 申请堆栈内存和任务控制块内存;
  2. TCB结构体成员赋值;(把前面申请的堆栈地址,赋值给控制块的堆栈成员)
  3. 初始化控制块中的成员
  4. 添加新任务到就绪列表。

静态方式创建任务

任务的任务控制块以及任务的栈空间所需的内存,需用户分配提供。

函数

xTaskCreateStatic();
//返回值为句柄或者其他值,任务创建成功。
//返回值为NULL,任务创建失败。TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,			//指向任务函数的指针const char * const pcName, 			//任务名字 最大长度configMAX_TASK_NAME_LEN(20)const uint32_t ulStackDepth,		//任务堆栈大小 字为单位void * const pvParameters,			//传递给任务函数的参数UBaseType_t uxPriority,				//任务优先级 范围 0 ~ configMAX_PRIORITIES(32)-1 StackType_t * const puxStackBuffer,	//任务堆栈,一般为数组由用户分配StaticTask_t * const pxTaskBuffer ) //任务控制块指针,由用户分配PRIVILEGED_FUNCTION;

示例

#define STACK_SIZE 200//空闲任务配置
StaticTask_t idle_task_tcb;
StackType_t idle_task_stack[configMINIMAL_STACK_SIZE];//软件定时器任务配置
StaticTask_t time_task_tcb;
StackType_t time_task_stack[configTIMER_TASK_STACK_DEPTH];StaticTask_t xTaskBuffer;
StackType_t xStack[ STACK_SIZE ];//空闲任务内存分配
void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,StackType_t ** ppxIdleTaskStackBuffer,uint32_t * pulIdleTaskStackSize )
{*ppxIdleTaskTCBBuffer = &idle_task_tcb;*ppxIdleTaskStackBuffer = idle_task_stack;*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;}//软件定时器内存分配
void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,StackType_t ** ppxTimerTaskStackBuffer,uint32_t * pulTimerTaskStackSize )
{*ppxTimerTaskTCBBuffer = &time_task_tcb;*ppxTimerTaskStackBuffer = time_task_stack;pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;}void vTaskCode( void * pvParameters ){}TaskHandle_t xHandle = xTaskCreateStatic(vTaskCode,       // Function that implements the task."NAME",          // Text name for the task.STACK_SIZE,      // Stack size in words, not bytes.( void * ) 1,    // Parameter passed into the task.tskIDLE_PRIORITY,// Priority at which the task is created.xStack,          // Array to use as the task's stack.&xTaskBuffer );  // Variable to hold the task's data structure.

静态创建任务使用流程

  1. 将FreeRTOSConfig.h文件中的configSUPPORT_STATIC_ALLOCATION宏配置为1;

  2. 定义空闲任务和定时器任务的任务堆栈即TCB;

  3. 实现两个接口函数

    1. vApplicationGetIdleTaskMemory()
    2. vApplicationGetTimerTaskMemory();可选的
  4. 定义函数入口参数;

  5. 编写任务函数;

静态创建任务内部实现

  1. TCB结构体成员赋值;
  2. 添加新任务到就绪列表;

删除任务

用于删除已经被创建的任务。被删除的任务将从就绪态任务列表,阻塞态任务列表,挂起态任务列表和事件列表中移除。

函数

vTaskDelete();void vTaskDelete( TaskHandle_t xTaskToDelete )
//xTaskToDelete 待删除的任务句柄

注意

  1. 当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)。
  2. 空闲任务会负责释放被删除任务中由系统分配的内存,但是由用户在任务删除前申请的内存,则需要由用户在任务被删除前提前释放,否则将导致内存泄漏。

删除任务流程

  1. 将INCLUDE_vTaskDelete宏配置为1;
  2. 入口参数输入需要删除的任务句柄(NULL代表自身);

删除任务内部实现过程

  1. 获取所要删除任务的控制块;

  2. 将被删除的任务移除所在列表;

  3. 判断所需删除的任务

    1. 删除任务自身,需先添加到等待删除列表,内存释放将在空闲任务进行。
    2. 删除其他任务,释放内存,任务数量–
  4. 更新下个任务的阻塞时间;

任务切换

调度器

实现任务间的切换。本质就是CPU寄存器的切换

//启动任务,开启调度
vTaskStartScheduler();

当由任务A切换到任务B时,主要分为两步

第一步:需暂停任务A的执行,并将此时任务A的寄存器保存到任务堆栈,这个过程叫做保存现场。
第二步:将任务B的各个寄存器值(被存于任务堆栈中)恢复到CPU寄存器中,这个过程叫做恢复现场。对任务A保存现场,对任务B恢复现场,这个过程被称为上下文切换。

任务切换流程

  1. 触发PendSV中断
  2. 当前的psp是正在运行的任务的栈指针,读取当前psp进程指针,存入r0
  3. 压栈(保存现场)
  4. 获取当前最高优先级任务的任务控制块
  5. 出栈(恢复现场)
  6. 更新切换后的任务的栈指针给psp
  7. bx r14指向新任务函数

PendSV中断如何触发

  1. 滴答定时器中断调用。
  2. 执行FreeRTOS提供的相关API函数,portYIELD();

任务挂起

挂起任务

函数

此函数用于挂起任务,使用时将FreeRTOSConfig.h文件中宏INCLUDE_vTaskSuspend配置为1。
无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复。
当传入参数为NULL,则代表挂起任务自身(当前正在运行的任务)。

void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION;
//xTaskToSuspend  待挂起任务的句柄

任务恢复

恢复被挂起的任务

函数

此函数用于恢复任务,使用时将FreeRTOSConfig.h文件中宏INCLUDE_vTaskSuspend配置为1。
任务无论被挂起多少次,只需在任务中调用vTaskResume()恢复一次,就可以继续运行,且被恢复的任务会进入就绪状态。
在中断中恢复被挂起的任务。带有“FromISR”后缀是在终端函数中专用的API函数

void vTaskResume( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION;
//xTaskToResume 待恢复任务的任务句柄

此函数用于恢复任务,使用时将FreeRTOSConfig.h文件中宏INCLUDE_vTaskSuspend配置为1,宏INCLUDE_xTaskResumeFromISR配置为1。
被恢复的任务的优先级大于当前执行的任务的优先级,就会返回pdTRUE需要手动执行任务切换(portYIELD_FROM_ISR()函数)。
中断服务程序中要调用freeRTOS的API函数则中断优先级不能高于freeRTOS所管理的最高优先级(5~15)。

BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION;
//xTaskToResume 待恢复任务的任务句柄
//返回值 pdTRUE 任务恢复后需要进行任务切换  pdFALSE任务恢复后不需要进行任务切换

相关API函数

函数描述
uxTaskPriorityGet()获取任务优先级
vTaskPrioritySet()设置任务优先级
uxTaskGetNumberOfTasks()获取系统中任务的数量
uxTaskGetSystemState()获取所有任务状态信息
vTaskGetInfo()获取指定单个任务信息
xTaskGetCurrentTaskHandle()获取当前任务的任何句柄
xTaskGetHandle()根据任务名获取该任务的任何句柄
uxTaskGetStackHighWaterMark()获取任务的任务栈历史剩余最小值
eTaskGetState()获取任务状态
vTaskList()以表格形式获取所有任务的信息
vTaskGetRunTimeStats()获取任务的运行时间

更多API请查看官网

相关文章:

【嵌入式——FreeRTOS】任务

【嵌入式——FreeRTOS】任务 任务创建和删除动态方式创建任务静态方式创建任务 删除任务任务切换调度器任务切换流程 任务挂起任务恢复相关API函数 任务创建和删除 动态方式创建任务 任务的任务控制块以及任务的栈空间所需的内存,均由freeRTOS从freeRTOS管理的堆中…...

网关,路由器,交换机

一、网关 (Gateway) 是一种设备,用于连接不同网络,能够转发数据包并翻译协议,允许不同类型的网络通信。网关通常工作在OSI模型的应用层或传输层,提供连接和路由服务。 应用场景例子: 在企业网络中,网关可…...

sublime 3 背景和字体颜色修改

sublime 4 突然抽风,每次打开都显示 “plugin_host-3.3 has exited unexpectedly, some plugin functionality won’t be available until Sublime Text has been restarted” 一直没调好,所以我退回到sublime 3了。下载好了软件没问题,但是一…...

leetcode 403周赛 包含所有1的最小矩形面积||「暴力」

3197. 包含所有 1 的最小矩形面积 II 题目描述: 给你一个二维 二进制 数组 grid。你需要找到 3 个 不重叠、面积 非零 、边在水平方向和竖直方向上的矩形,并且满足 grid 中所有的 1 都在这些矩形的内部。 返回这些矩形面积之和的 最小 可能值。 注意…...

Stable Diffusion web UI 插件

2024.7.3更新,持续更新中 如果需要在linux上自己安装sd,参考:stable diffusion linux安装 插件复制到 /stable-diffusion-webui/extensions 目录下,然后重新启动sd即可 一、插件安装方法 每种插件的安装方法可能略有不同&#xf…...

深度学习中的反向传播算法的原理

深度学习中的反向传播算法的原理,以及如何计算梯度 反向传播算法(Backpropagation)是深度学习中最核心的优化技术之一,用于训练神经网络。它基于链式法则,通过从输出层逆向计算误差并逐层传递到输入层来更新模型参数&…...

身处奇瑞看三星:既“开卷“又“起火“,却更难受了

三星"起火" 这几天奇瑞的事情,让大家破防了,纷纷表示国内的就业市场环境普遍恶劣。 那我们转个眼,看看海外企业的情况。 最近一周,三星频频登上新闻,颇有"起火"之势。 在刚步入下半年的 7 月 1 日…...

系统架构设计师教程(清华第2版)<第1章 绪论>解读

系统架构设计师教程 第一章 绪论 1.1 系统架构概述1.1.1 系统架构的定义及发展历程1.1.2 软件架构的常用分类及建模方法1.1.3 软件架构的应用场景1.1.4 软件架构的发展未来1.2 系统架构设计师概述1.2.1 架构设计师的定义、职责和任务1.2.2 架构设计师应具备的专业素质1.3 如何成…...

Vue + Element UI + JSEncrypt实现简单登录页面

安装依赖 npm install jsencrypt --save局部引入 import JSEncrypt from jsencrypt/bin/jsencrypt;登录页面index.vue <template><div class"loginbody"><div class"logindata"><div class"logintext"><h2>Wel…...

从“关注流”到“时间线”,搜狐给内容加信任价值

文 | 螳螂观察 作者 | 易不二 在近日第十六季搜狐新闻马拉松活动中&#xff0c;搜狐新闻APP的“时间线”功能备受瞩目。不仅开幕式现场竖了一块“左手时间线&#xff0c;右手关注流”的路牌&#xff0c;张朝阳也着重强调了“时间线”产品的互动方式&#xff1a;“关注是基础&…...

vscode的一些使用问题

vscode使用技巧 1、快捷键&#xff08;1&#xff09;打开命令面板&#xff08;2&#xff09;注释&#xff08;3&#xff09;删除行&#xff08;4&#xff09;上下移动光标&#xff08;5&#xff09;光标回退&#xff08;6&#xff09;复制行&#xff08;7&#xff09;插入空白行…...

爬虫-网页基础

HTML 基本语法 HTML&#xff1a;Hyper Text Markup Language, 超文本标记语言&#xff0c;是计算机语言的一种&#xff0c;由元素构成。 p元素 <p>Web 真好玩&#xff01;</p> 由三大部分组成 开始标签&#xff1a;一对尖括号中间包裹这元素名称元素内容&#x…...

保存huggingface缓存中AI模型(从本地加载AI模型数据)

在github下拉项目后,首次运行时会下拉一堆模型数据&#xff0c;默认是保存在缓存的&#xff0c;如果你的系统盘空间快满的时候就会被系统清理掉&#xff0c;每次运行又重新下拉一次&#xff0c;特别麻烦。 默认下载的缓存路径如下&#xff1a;C:\Users\用户名\.cache\huggingf…...

wps的xlsm和xltm和xlam格式的文件各有什么区别

文章目录 一、前言二、WPS表格文件格式介绍1. .xlsm 文件格式2. .xltm 文件格式3. .xlam 文件格式 三、总结 一、前言 本文将详细介绍WPS表格中三种常见的文件格式&#xff1a;.xlsm、.xltm、和.xlam&#xff0c;并提供通俗易懂的解释和示例&#xff0c;帮助用户理解它们的区别…...

软件性能测试有哪几种测试方法?专业性能测试报告出具

软件性能测试是指对软件系统在特定负载条件下的性能进行评估和验证的过程&#xff0c;目的是确保软件在正常使用的情况下能够满足用户的要求&#xff0c;并在稳定的性能水平下运行&#xff0c;在软件开发过程中起到了至关重要的作用&#xff0c;可以确保软件产品的质量和可靠性…...

JavaScript语言简介与实战应用:从零开始的编程之旅

JavaScript&#xff0c;一种轻量级的、解释型的、面向对象的脚本语言&#xff0c;自1995年由Netscape公司的Brendan Eich设计以来&#xff0c;迅速成为了Web开发中不可或缺的一部分。它不仅能够为静态网页添加动态效果&#xff0c;还能实现客户端与服务器的交互&#xff0c;如今…...

如何理解synchronized锁升级

在Java中&#xff0c;synchronized 关键字是实现线程同步的一种方式&#xff0c;它涉及到锁的升级和释放的过程。理解synchronized 锁的升级可以分为三个阶段&#xff1a;无锁状态、偏向锁状态和轻量级锁状态。 无锁状态&#xff1a; 当对象被创建时&#xff0c;默认处于无锁状…...

js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some

遍历方法返回值使用场景备注副作用for 循环——遍历数组通用可以改变原数组forEach 循环——遍历数组ES5 新增&#xff0c;不支持中断和异步可以改变原数组for of 循环——遍历数组ES6 新增可以改变原数组map格式化后的数组格式化数组的API不会改变原数组filter过滤后的数组过滤…...

Node.js开发实战 视频教程 下载

ode.js开发实战 视频教程 下载 下载地址 https://download.csdn.net/download/m0_67912929/89487510 01-课程介绍.mp4 02-内容综述.mp4 03-Node.js是什么? .mp4 04-Node.js可以用来做什么?.mp4 05-课程实战项目介绍.mp4 06-什么是技术预研? .mp4 07-Node.js开发环境…...

VS2022(Visual Studio 2022)最新安装教程

1、下载 1、下载地址 - 官网地址&#xff1a;下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux - 根据自己的电脑的 【操作系统】 灵活选择。 2、安装包 【此处为Windows系统安装包】 2、安装 1、打开软件 - 右击【以管理员身份打开】&#xff0c; 2、准备配置 …...

从华为和特斯拉之争,看智能驾驶的未来

“一旦特斯拉完全解决自动驾驶问题并量产Optimus&#xff0c;任何空头都将被消灭&#xff0c;即使是比尔-盖茨也不例外。”7月2日&#xff0c;马斯克再次在社交媒体X上画下了这样的“大饼”。 与此同时&#xff0c;特斯拉的股价在最近的三个交易日也迎来了24%的涨幅&#xff0c…...

20240705 每日AI必读资讯

&#x1f4da;Retool 刚刚发布了最新2024上半年《人工智能现状报告》 - 收集了约750名技术人员的意见 - 包括开发者、数据团队和各行业的领导者&#xff0c;了解如何利用人工智能产生真正的影响。 &#x1f517; 2024上半年《人工智能现状报告》Retool刚刚发布了最新-CSDN b…...

C++ 设计模式之访问者模式

C 设计模式之访问者模式 简介 1、访问者模式 &#xff08;Visitor&#xff09;是一种行为型设计模式&#xff0c;它表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 使用该模式可以在不修改已有程序结构的前提…...

linux——IPC 进程间通信

IPC 进程间通信 interprocess communicate IPC&#xff08;Inter-Process Communication&#xff09;&#xff0c;即进程间通信&#xff0c;其产生的原因主要可以归纳为以下几点&#xff1a; 进程空间的独立性 资源隔离&#xff1a;在现代操作系统中&#xff0c;每个进程都…...

JAVA数字化产科管理平台源码:涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理

JAVA数字化产科管理平台源码&#xff1a;涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全流程的信息化管理 智慧产科管理系统是基于自主研发妇幼信息平台&#xff0c;为医院产科量身打造的信息管理系统&#xff0c;涵盖了孕妇从建档、产检、保健、随访、分娩到产后42天全…...

http数据传输确保完整性和保密性整流程方案(含源码)

往期文章回顾 【深度学习】 【深度学习】物体检测/分割/追踪/姿态估计/图像分类检测演示系统【含源码】【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示【深度学习】行人跌倒行为检测软件系统【深度学习】火灾检测软件系统【深度学习】吸烟行为检测软件系统【深度…...

UE插件与云渲染:10个提升效率的选择

Unreal Engine&#xff08;虚幻引擎&#xff09;的插件生态丰富多样&#xff0c;从提升视觉效果到优化工作流程&#xff0c;为开发者提供了无限扩展的可能。本文推荐10款备受欢迎的插件&#xff0c;助你激发创意&#xff0c;提升开发效率. 一、地牢建筑师&#xff1a;程序化关…...

[Shell编程学习路线]——shell脚本中case语句多分支选择详解

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f6e0;️Shell编程专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月21日16点30分 &#x1f004;️文章质量&#xff1a;95分 ————前言———— 在Shell编程中&#xff0c;处理多种条件…...

Django REST Framework(四)DRF Serializer

作用: 1. 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 2. 反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型 3. 反序列化,完成数据校验功能 定义序列化器 Django REST framework中的Serializer使用类来定义&a…...

【C语言】bool 关键字

在C语言中&#xff0c;bool类型用于表示布尔值&#xff0c;即真或假。C语言本身在标准库中并未提供布尔类型&#xff0c;直到C99标准引入了stdbool.h头文件。该头文件定义了bool类型&#xff0c;以及两个常量&#xff1a;true和false。在此之前&#xff0c;通常使用整数来表示布…...

开发电商ERP系统需要接入哪些平台API?

跟随全渠道发展趋势&#xff0c;很多实体商家开设电商店铺&#xff0c;为消费者提供便捷的购物体验&#xff0c;增强消费者的满意度&#xff0c;同时也提升了企业自身的市场竞争力。为了满足商家业务拓展需求&#xff0c;很多原本主要服务于实体商贸企业的ERP服务商&#xff0c…...

Meet AI4S 直播预告丨房价分析新思路:神经网络直击复杂地理环境中的空间异质性

近年来&#xff0c;房地产市场起起落落&#xff0c;房价已经成为了扰动居民幸福感的重要影响因素。大多数家庭都需要面对「买不买房、何时买房、在哪儿买房、买什么房」的艰难抉择&#xff0c;每一个问题的答案都在某种程度上与房价的波动息息相关。 近年来&#xff0c;我国各…...

支持向量机(SVM)在机器学习中的简单示例

目录 工作原理 核函数 SVM用于分类 结果分析 结论 ❤❤❤动动发财的小手点点赞点点关注哦~~~❤❤❤ 支持向量机是一种强大的监督学习模型&#xff0c;用于分类和回归任务。它通过找到数据点之间的最优边界来区分不同的类别。SVM特别适用于那些具有清晰边界但线性不可分的…...

使用Anaconda虚拟环境安装Opencv、pytorch、torchvision踩坑记录

电脑 python 环境版本过高与下载Opencv&#xff08;3.4以下&#xff09;不匹配&#xff0c;因为版本过高部分算法收米&#xff0c; 从而在虚拟环境重新下载python老版本 本文默认您的电脑上已经安装了Anaconda 我是按照这位博文安装的 安装Opencv (详解)安装3.4.1.15版本…...

【人工智能】CPU、GPU与TPU:人工智能领域的核心处理器概述

在人工智能和计算技术的快速发展中&#xff0c;CPU&#xff08;中央处理器&#xff09;、GPU&#xff08;图形处理器&#xff09;和TPU&#xff08;张量处理器&#xff09;作为核心处理器&#xff0c;各自扮演着不可或缺的角色。它们不仅在性能上各有千秋&#xff0c;还在不同的…...

【康复学习--LeetCode每日一题】3099. 哈沙德数

题目&#xff1a; 如果一个整数能够被其各个数位上的数字之和整除&#xff0c;则称之为 哈沙德数&#xff08;Harshad number&#xff09;。给你一个整数 x 。如果 x 是 哈沙德数 &#xff0c;则返回 x 各个数位上的数字之和&#xff0c;否则&#xff0c;返回 -1 。 示例 1&a…...

docker使用jdk21启动jar包报错

[0.007s][warning][os,thread] Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached. [0.007s][error ][gc,task ] Failed to create worker thread解决办法 1 &#xff08;使用doc…...

Object 类中的公共方法详解

Object 类中的公共方法详解 1、clone() 方法2、equals(Object obj) 方法3、hashCode() 方法4、getClass() 方法5、wait() 方法6、notify() 和 notifyAll() 方法 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 Java 中&#xff0c;Object…...

python 字典 一个key 多 value 遍历

在Python中&#xff0c;如果一个键对应多个值&#xff0c;你需要确保这些值被存储在一个容器类型&#xff08;如列表或集合&#xff09;中。你可以使用默认字典&#xff08;collections.defaultdict&#xff09;来简化这个过程。以下是一个示例代码&#xff1a; from collecti…...

vue---基本原理(二)

1、slot的基础理解 slot又名插槽&#xff0c;是vue的内容分发机制&#xff0c;组件内部的模板引擎使用slot元素作为承载分发的出口。是子组件的一个模板标签元素&#xff0c;而这一个标签元素是否显示&#xff0c;以及怎么显示&#xff0c;是由父元素控制的。slot又分为默认插槽…...

桂花网蓝牙网关X1000:引领物联网新时代的智能连接

在物联网技术飞速发展的今天&#xff0c;蓝牙网关作为连接蓝牙设备与互联网的关键设备&#xff0c;其性能与稳定性直接影响到物联网系统的整体运行效果。桂花网蓝牙网关X1000凭借其卓越的性能和广泛的应用场景&#xff0c;成为了物联网领域的佼佼者。 一、产品概述 桂花网蓝牙…...

JAVA案例模拟电影信息系统

一案例要求&#xff1a; 二具体代码(需要在同一个包下创建三个类) Ⅰ&#xff1a;实现类 package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {javabean[]moviesnew javabean[4];movies[0] new ja…...

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务10:Hive安装部署

任务描述 任务内容为安装并配置在Hadoop集群中使用Hive。 任务指导 Hive是一个基于Hadoop的数据仓库框架&#xff0c;在实际使用时需要将元数据存储在数据库中 具体安装步骤如下&#xff1a; 1. 安装MySQL数据库&#xff08;已安装&#xff09; 2. 解压缩Hive的压缩包 3…...

第一百四十二节 Java数据类型教程 - Java字符数据类型

Java数据类型教程 - Java字符数据类型 Character类的一个对象包装一个char值。 字符类包含isLetter()和isDigit()方法来检查字符是否为字母和数字。 toUpperCase()和toLowerCase()方法将字符转换为大写和小写。 该类提供了一个构造函数和一个工厂valueOf()方法来从char创建对…...

AI 绘画的常用技巧和操作方法

随着人工智能技术的飞速发展&#xff0c;AI 绘画已经成为设计和艺术领域的一股新兴力量。无论是设计师、艺术家&#xff0c;还是普通的科技爱好者&#xff0c;都能通过 AI 绘画工具创造出令人惊叹的作品。 AI 绘画的基本原理 AI 绘画的核心在于机器学习算法。通过训练大量的图像…...

Kafka入门到精通(四)-SpringBoot+Kafka

一丶IDEA创建一个空项目 二丶添加相关依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springf…...

起飞,纯本地实时语音转文字!

简介 偶然在 github 上翻到了这个项目 https://github.com/k2-fsa/sherpa-ncnn 在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持 iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 也就是说语音转文字可以不再借助网络服务的接口&am…...

SQL面试题练习 —— 找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期

目录 1 题目2 建表语句3 题解 1 题目 找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期 样例数据 ----------------------------------------------- | user_login.user_id | user_login.login_date | ---------------------------------------------…...

微深节能 煤码头自动化翻堆及取料集控系统 格雷母线

微深节能格雷母线高精度位移测量系统是一种先进的工业自动化位置检测解决方案&#xff0c;它被广泛应用于煤码头自动化翻堆及取料集控系统中&#xff0c;以实现对斗轮堆取料机等大型机械设备的精准定位和自动化控制。 系统原理简述&#xff1a; 格雷母线系统的工作原理基于电磁…...

CSS 背景添加白色小圆点样式

css也是开发过程中不可忽视的技巧 此专栏用来纪录不常见优化页面样式的css代码 效果图: 未添加之前: 代码: background: radial-gradient(circle at 1px 1px, #3d3c3c 2px, transparent 0);background-size: 20px 25px;...