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

学习空闲任务函数

一、user_StopEnterTask 停止 进入任务

/* Private includes -----------------------------------------------------------*/
//includes
#include "user_TasksInit.h"
#include "user_MPUCheckTask.h"#include "ui.h"
#include "ui_HomePage.h"
#include "ui_OffTimePage.h"#include "main.h"
#include "stm32f4xx_it.h"
#include "lcd_init.h"
#include "CST816.h"
#include "key.h"/* Private typedef -----------------------------------------------------------*//* Private define ------------------------------------------------------------*//* Private variables ---------------------------------------------------------*/
uint16_t IdleTimerCount = 0;/* Private function prototypes -----------------------------------------------*//* Tasks ---------------------------------------------------------------------*//*** @brief  Enter Idle state* @param  argument: Not used* @retval None*/
void IdleEnterTask(void *argument)
{uint8_t Idlestr=0;uint8_t IdleBreakstr=0;while(1){//light get darkif(osMessageQueueGet(Idle_MessageQueue,&Idlestr,NULL,1)==osOK){LCD_Set_Light(5);}//resume light if light got dark and idle state breaked by key pressing or screen touchingif(osMessageQueueGet(IdleBreak_MessageQueue,&IdleBreakstr,NULL,1)==osOK){IdleTimerCount = 0;LCD_Set_Light(ui_LightSliderValue);}osDelay(10);}
}/*** @brief  enter the stop mode and resume* @param  argument: Not used* @retval None*/
void StopEnterTask(void *argument)
{uint8_t Stopstr;uint8_t HomeUpdataStr;uint8_t Wrist_Flag=0;while(1){if(osMessageQueueGet(Stop_MessageQueue,&Stopstr,NULL,0)==osOK){/***** your sleep operations *****/sleep:IdleTimerCount = 0;//sensors//lcdLCD_RES_Clr();LCD_Close_Light();//touchCST816_Sleep();/*********************************/vTaskSuspendAll();//Disnable Watch Dog//WDOG_Disnable();//systick intCLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);//enter stop modeHAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_STOPENTRY_WFI);//here is the sleep period//resume run mode and reset the sysclkSET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq));SystemClock_Config();//WDOG_Feed();xTaskResumeAll();/***** your wakeup operations *****//*//MPU Checkif(user_MPU_Wrist_EN){uint8_t hor;hor = MPU_isHorizontal();if(hor && user_MPU_Wrist_State == WRIST_DOWN){user_MPU_Wrist_State = WRIST_UP;Wrist_Flag = 1;//resume, go on}else if(!hor && user_MPU_Wrist_State == WRIST_UP){user_MPU_Wrist_State = WRIST_DOWN;IdleTimerCount  = 0;goto sleep;}}*///if(!KEY1 || HardInt_Charg_flag || Wrist_Flag){Wrist_Flag = 0;//resume, go on}else{IdleTimerCount  = 0;goto sleep;}//lcdLCD_Init();LCD_Set_Light(ui_LightSliderValue);//touchCST816_Wakeup();//check if is Charging/*if(ChargeCheck()){HardInt_Charg_flag = 1;}*///send the Home Updata messageosMessageQueuePut(HomeUpdata_MessageQueue, &HomeUpdataStr, 0, 1);/**********************************/}osDelay(100);}
}void IdleTimerCallback(void *argument)
{IdleTimerCount+=1;//make sure the LightOffTime<TurnOffTimeif(IdleTimerCount == (ui_LTimeValue*10)){uint8_t Idlestr=0;//send the Light off messageosMessageQueuePut(Idle_MessageQueue, &Idlestr, 0, 1);}if(IdleTimerCount == (ui_TTimeValue*10)){uint8_t Stopstr = 1;IdleTimerCount  = 0;//send the Stop messageosMessageQueuePut(Stop_MessageQueue, &Stopstr, 0, 1);}
}

1.1 头文件包含部分

#include "user_TasksInit.h"
#include "user_MPUCheckTask.h"#include "ui.h"
#include "ui_HomePage.h"
#include "ui_OffTimePage.h"#include "main.h"
#include "stm32f4xx_it.h"
#include "lcd_init.h"
#include "CST816.h"
#include "key.h"

user_TasksInit.h 包含了任务初始化相关的函数声明、结构体等,用于初始化整个系统中的各种任务,确保各个任务能正常启动和运行

user_MPUCheckTask.h 应该是检查MPU6050 核心板没用到

ui.hui_HomePage.hui_OffTimePage.h 这些头文件应该是和用户界面不同页面相关的定义

main.h 通常包含主程序模块相关的一些通用定义,例如全局变量声明、主函数中使用到的宏等。

stm32f4xx_it.h 一般是 STM32F4 系列单片机的中断相关的头文件,可能包含了中断服务函数的声明以及一些与中断处理相关的宏定义等内容,用于处理单片机的各种中断事件。

lcd_init.h 应该是与 LCD 显示屏初始化及相关操作有关的头文件,里面会有 LCD 初始化函数(如 LCD_Init)以及亮度设置函数(如 LCD_Set_Light)等的声明,用于控制显示屏的显示状态。

CST816.h 推测是与触摸传感器(可能是型号为 CST816 的触摸芯片)相关的头文件,包含触摸传感器的操作函数声明,如睡眠(CST816_Sleep)、唤醒(CST816_Wakeup等函数,用于管理触摸功能的开启和关闭。

key.h 很可能包含了按键相关的函数声明,像按键扫描函数等,以及按键引脚定义等与硬件按键相关的内容,用于检测按键操作情况。

uint16_t IdleTimerCount = 0;

定义了一个 uint16_t 类型的全局变量 IdleTimerCount,初始值设为 0。从后续代码来看,这个变量用于计时,可能是记录设备处于空闲状态的时长,通过与不同的时间阈值(如 ui_LTimeValue 和 ui_TTimeValue)进行比较,来决定是否执行相应的操作,比如关闭屏幕灯光或者进入停止模式等

1.2 IdleEnterTask函数 空闲任务(用于调节屏幕亮度)

void IdleEnterTask(void *argument)
{uint8_t Idlestr = 0;uint8_t IdleBreakstr = 0;while (1){//light get darkif (osMessageQueueGet(Idle_MessageQueue, &Idlestr, NULL, 1) == osOK){LCD_Set_Light(5);}//resume light if light got dark and idle state breaked by key pressing or screen touchingif (osMessageQueueGet(IdleBreak_MessageQueue, &IdleBreakstr, NULL, 1) == osOK){IdleTimerCount = 0;LCD_Set_Light(ui_LightSliderValue);}osDelay(10);}
}

定义了两个 uint8_t 类型的局部变量 Idlestr 和 IdleBreakstr,初始值都设为 0,它们可能用于接收来自消息队列的相关消息内容,以判断设备的状态变化情况。

当通过 osMessageQueueGet 函数从 Idle_MessageQueue 消息队列中成功获取到消息(返回值为 osOK)时,会执行 LCD_Set_Light(5) 语句,即将 LCD 的亮度设置为 5,这可能表示在接收到特定的空闲相关消息后,调暗屏幕亮度,使屏幕灯光变暗(具体亮度值的含义取决于 LCD_Set_Light 函数的实现和项目中的亮度设定标准)。

当从 IdleBreak_MessageQueue 消息队列中成功获取到消息时,首先将 IdleTimerCount 清零,意味着设备的空闲计时重新开始,然后通过 LCD_Set_Light(ui_LightSliderValue) 将 LCD 的亮度设置为用户界面上设置的亮度滑块值所对应的亮度,这表示当设备从空闲被打断(比如通过按键按下或者屏幕触摸操作)后,恢复屏幕到之前用户设定的亮度

我理解的是一个消息队列用于使屏幕变暗,估计是osMessageQueueGet 获得值,另一个消息队列是用于触发唤醒屏幕。进入空闲状态就息屏省电

1.3 StopEnterTask 函数 

定义了三个 uint8_t 类型的局部变量 StopstrHomeUpdataStr 和 Wrist_Flag,分别用于接收消息队列中的消息、可能用于后续向其他任务发送更新首页相关的消息以及作为一个标志来记录与设备姿态(手腕相关,从代码中对 MPU 和手腕状态的处理推测)有关的情况,初始时 Wrist_Flag 设为 0

 if (osMessageQueueGet(Stop_MessageQueue, &Stopstr, NULL, 0) == osOK)

同样是一个无限循环 while(1)持续检测 Stop_MessageQueue 消息队列中的消息,以决定是否进入停止模式以及后续的唤醒操作等相关处理。

这里有个sleep 估计是要用到goto语句吗?

sleep:IdleTimerCount = 0;//sensors//lcdLCD_RES_Clr();LCD_Close_Light();//touchCST816_Sleep();/*********************************/vTaskSuspendAll();//Disnable Watch Dog//WDOG_Disnable();//systick intCLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);//enter stop modeHAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);//here is the sleep period//resume run mode and reset the sysclkSET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq));SystemClock_Config();//WDOG_Feed();xTaskResumeAll();

先将 IdleTimerCount 清零,用于重置空闲计时(因为即将进入停止模式,相当于空闲状态结束)。然后对各个硬件设备进行相应的关闭或睡眠操作,包括对 LCD 显示屏进行复位引脚操作(LCD_RES_Clr)和关闭灯光(LCD_Close_Light),以及让触摸传感器进入睡眠模式(CST816_Sleep),这些操作都是为了降低设备在停止模式下的功耗。

通过 vTaskSuspendAll 函数暂停所有任务(在支持任务管理的操作系统环境下),接着进行一些与系统时钟和看门狗相关的操作(虽然部分代码被注释掉了,像禁用看门狗 WDOG_Disnable,但整体思路是进行进入停止模式前的系统准备工作),然后通过 CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk) 操作关闭系统滴答定时器中断(SysTick 相关操作),最后使用 HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI) 函数进入停止模式(这里选择了主调节器开启以及等待中断唤醒的方式进入停止模式,具体的电源模式和唤醒方式可根据实际硬件和项目需求选择)。

 /***** your wakeup operations *****//*//MPU Checkif (user_MPU_Wrist_EN){uint8_t hor;hor = MPU_isHorizontal();if (hor && user_MPU_Wrist_State == WRIST_DOWN){user_MPU_Wrist_State = WRIST_UP;Wrist_Flag = 1;//resume, go on}else if (!hor && user_MPU_Wrist_State == WRIST_UP){user_MPU_Wrist_State = WRIST_DOWN;IdleTimerCount = 0;goto sleep;}}*///if (!KEY1 || HardInt_Charg_flag || Wrist_Flag){Wrist_Flag = 0;//resume, go on}else{IdleTimerCount = 0;goto sleep;}//lcdLCD_Init();LCD_Set_Light(ui_LightSliderValue);//touchCST816_Wakeup();//check if is Charging/*if (ChargeCheck()){HardInt_Charg_flag = 1;}*///send the Home Updata messageosMessageQueuePut(HomeUpdata_MessageQueue, &HomeUpdataStr, 0, 1);/**********************************/

这里有一部分代码被注释掉了,原本是关于 MPU(根据陀螺仪,可能用于检测设备姿态,比如手腕是朝上还是朝下)的检测逻辑,根据 MPU 检测到的设备水平状态以及之前记录的手腕状态(user_MPU_Wrist_State,虽然其赋值等操作在当前代码片段不太完整)来决定是否更新手腕状态标志以及是否再次进入睡眠(通过 goto sleep 语句)。
之后的代码根据不同条件判断来决定是否继续执行后续操作还是再次进入睡眠(通过判断按键 KEY1 是否按下充电标志 HardInt_Charg_flag 是否为真以及 Wrist_Flag 的值等情况)。如果满足相应条件(比如按键按下或者正在充电等),则将 Wrist_Flag 清零,准备继续正常运行;否则,将 IdleTimerCount 清零并通过 goto sleep 语句再次进入停止模式相关的睡眠操作。

最后,对硬件设备进行重新初始化和唤醒操作,包括初始化 LCD 显示屏(LCD_Init)并设置其亮度为用户界面设定的亮度值(LCD_Set_Light(ui_LightSliderValue)),唤醒触摸传感器(CST816_Wakeup),并且可以根据需要检查设备是否正在充电(代码中相关部分被注释掉了),

最后通过 osMessageQueuePut 函数向 HomeUpdata_MessageQueue 消息队列发送一个消息(具体消息内容通过 HomeUpdataStr 传递,虽然目前代码中没有对其进行详细赋值等操作,但应该是用于通知其他任务首页相关的更新情况)。

 osDelay(100);

在循环的末尾通过 osDelay(100) 函数让任务暂停 100 个时间单位(同样具体时间单位取决于操作系统配置),以合适的时间间隔来检测 Stop_MessageQueue 消息队列,避免过于频繁检测而占用过多资源,同时也能及时响应进入停止模式的相关消息

1.4 IdleTimerCallback 空闲时间回调函数

void IdleTimerCallback(void *argument)
{IdleTimerCount += 1;//make sure the LightOffTime<TurnOffTimeif (IdleTimerCount == (ui_LTimeValue * 10)){uint8_t Idlestr = 0;//send the Light off messageosMessageQueuePut(Idle_MessageQueue, &Idlestr, 0, 1);}if (IdleTimerCount == (ui_TTimeValue * 10)){uint8_t Stopstr = 1;IdleTimerCount = 0;//send the Stop messageosMessageQueuePut(Stop_MessageQueue, &Stopstr, 0, 1);}
}

函数每次被调用时,会将 IdleTimerCount 变量的值加 1,用于对设备处于空闲状态的时长进行计时。然后通过两个 if 条件判断来决定是否发送相应的消息
当 IdleTimerCount 的值等于 ui_LTimeValue 乘以 10 时(这里乘以 10 可能是因为计时单位和时间阈值的单位换算关系,具体取决于项目设定),会定义一个 uint8_t 类型变量 Idlestr 并初始化为 0,然后通过 osMessageQueuePut 函数向 Idle_MessageQueue 消息队列发送这个消息,这可能是用于触发屏幕灯光调暗等相关的空闲操作(从 IdleEnterTask 函数中对 Idle_MessageQueue 消息的处理逻辑可推测)。
当 IdleTimerCount 的值等于 ui_TTimeValue 乘以 10 时,定义一个 uint8_t 类型变量 Stopstr 并赋值为 1,接着将 IdleTimerCount 清零,再通过 osMessageQueuePut 函数向 Stop_MessageQueue 消息队列发送这个消息,这大概率是用于触发设备进入停止模式相关的操作(从 StopEnterTask 函数中对 Stop_MessageQueue 消息的处理逻辑可推测)

在空闲任务里的时常为 time1时间不操作就进入低亮度状态, 长时间 time2 不操作就进入停止状态,

回调函数作为重复启用的软件定时器的函数  100ms启用1次 也就是100ms计数值自加一次

osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr) {


 

uint8_t ui_LTimeValue = 10;if(IdleTimerCount == (ui_LTimeValue*10))

那ui_LTimeValue*10 = 100 那就是100ms*100=10s 10s空闲任务时间  就会让系统进入降低显示器屏幕的状态,15s进入关断状态 只能由按键 姿态 充电唤醒

相关文章:

学习空闲任务函数

一、user_StopEnterTask 停止 进入任务 /* Private includes -----------------------------------------------------------*/ //includes #include "user_TasksInit.h" #include "user_MPUCheckTask.h"#include "ui.h" #include "ui_Hom…...

Hyper-v中ubuntu与windows文件共享

Hyper-v中ubuntu与windows文件共享 前言相关链接第一步--第一个链接第二步--第二个链接测试与验证 前言 关于Hyper-V的共享我搞了好久&#xff0c;网上的很多教程太过冗余&#xff0c;我直接采用最简单的办法吧 相关链接 Hyper-V中Ubuntu 同windows系统共享文件夹-百度经验 …...

【软件工程】一篇入门UML建模图(类图)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必练内功_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...

Windows 安装Docker For Desktop概要

Windows 安装docker 下载部分的工作需要使用科学技术。如果没有可以联系博主发送已下载好的文件。 本文档不涉及技术的讲解&#xff0c;仅有安装的步骤。 准备工作 包含下载与环境准备&#xff0c;下载的文件仅下载&#xff0c;在后续步骤进行安装。 微软关于wsl的文档&…...

解决循环依赖报错问题

Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘asyncTaskServiceImpl’: Bean with name ‘asyncTaskServiceImpl’ has been injected into other beans [resignServiceImpl] in its raw version as part…...

代码随想录第46期 单调栈

这道题主要是单调栈的简单应用 class Solution { public:vector<int> dailyTemperatures(vector<int>& T) {vector<int> result(T.size(),0);stack<int> st;st.push(0);for(int i1;i<T.size();i){if(T[i]<T[st.top()]){st.push(i);}else{wh…...

中仕公考怎么样?事业编面试不去有影响吗?

事业编考试笔试已经通过&#xff0c;但是面试不去参加会有影响吗&#xff1f; 1. 自动放弃面试资格&#xff1a;未能按时出席事业单位的面试将被视为主动放弃该岗位的竞争机会。 2. 个人信誉问题&#xff1a;面试作为招聘流程的关键步骤&#xff0c;无故缺席可能被解释为诚信…...

OMV7 树莓派 tf卡安装

​ 升级7之后&#xff0c;问题多多&#xff0c;不是docker不行了&#xff0c;就是代理不好使 今天又重装了一遍&#xff0c;用官方的链接&#xff0c;重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置&#xff0…...

Go语言24小时极速学习教程(五)Go语言中的SpringMVC框架——Gin

作为一个真正能用的企业级应用&#xff0c;怎么能缺少RESTful接口呢&#xff1f;所以我们需要尝试在Go语言环境中写出我们的对外接口&#xff0c;这样前端就可以借由Gin框架访问我们数据库中的数据了。 一、Gin框架的使用 1. 安装 Gin 首先&#xff0c;你需要在你的 Go 项目…...

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~’&#xff1a; C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~_射击c-CSDN博客文章浏览…...

Android Studio | 修改镜像地址为阿里云镜像地址,启动App

在项目文件的目录下的 settings.gradle.kts 中修改配置&#xff0c;配置中包含插件和依赖项 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urlu…...

Rocky linux8 安装php8.0

Rocky linux8 安装php8.0 1.安装remi源2.列出php版本3.变更php版本&#xff0c;Rocky8有提供php8版本&#xff0c;所以切换Rocky8提供的版本&#xff0c;而不是remi提供的版本&#xff0c;不过remi有提供php8.1和php8.2版本。4.切换成remi提供的8.0版本5.安装phpendl 1.安装rem…...

Ubuntu 18 EDK2 环境编译

视频&#xff1a;在全新的Ubuntu上从零搭建UEFI的EDK2开发环境 开始&#xff1a;git clone https://github.com/tianocore/edk2.git 开始编译BaseTools前先更新一下子模块&#xff1a;git submodule update --init &#xff0c;然后&#xff1a;make -C BaseTools/ 问题1&a…...

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…...

智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁

近日&#xff0c;贵州省贵阳市中级人民法院对余华英拐卖儿童案做出了一审宣判&#xff0c;判处其死刑&#xff0c;剥夺政治权利终身&#xff0c;并处没收个人全部财产。这一判决不仅彰显了法律的威严&#xff0c;也再次唤起了社会对拐卖儿童犯罪的深切关注。 余华英自1993年至2…...

Spring:IoC/DI加载properties文件

Spring框架可以通过Spring的配置文件完成两个数据源druid和C3P0的配置&#xff08;Spring&#xff1a;IOC/DI配置管理第三方bean&#xff09;&#xff0c;但是其中包含了一些问题&#xff0c;我们来分析下: 这两个数据源中都使用到了一些固定的常量如数据库连接四要素&#xf…...

Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Docker 概述 1.1 Docker 主要组成部分 1.2 Docker 安装 2.0 Docker 常见命令 2.1 常见的命令介绍 2.2 常见的命令演示 3.0 数据卷 3.1 数据卷常见的命令 3.2 常见…...

深挖C++赋值

详解赋值 const int a 10; int b a;&a 0x000000b7c6afef34 {56496} &a 0x000000b7c6afef34 {10} 3. &b 0x000000b7c6afef54 {10} 总结&#xff1a; int a 10 是指在内存中&#xff08;栈&#xff09;中创建一个int &#xff08;4 byte&#xff09;大小的空间…...

【免越狱】iOS砸壳 可下载AppStore任意版本 旧版本IPA下载

软件介绍 下载iOS旧版应用&#xff0c;简化繁琐的抓包流程。 一键生成去更新IPA&#xff08;手机安装后&#xff0c;去除App Store的更新检测&#xff09;。 软件界面 支持系统 Windows 10/Windows 8/Windows 7&#xff08;由于使用了Fiddler库&#xff0c;因此需要.Net环境…...

【python笔记02】面向对象思想

关于面向对象要学会啥&#xff1f; 面向对象编程思想面向对象基本概念 对象类 添加和获取对象属性魔术方法&#xff08;三个常见的&#xff09;面向对象案例 面向对象编程思想 两个时代的两个产物&#xff0c;没有好坏之分&#xff0c;小系统用面向过程&#xff0c;团队开发…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...