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

uCOS3实时操作系统(系统初始化和任务启动)

文章目录

  • ucos初始化
  • 任务创建
  • 任务启动

ucos初始化

  • 系统运行的过程如下:OSInit -> OSTaskCreate -> OSStart
  • ucos初始化主要在 OSInit 中进行,下面列举了该初始化过程中比较重要的几个步骤:
    OSInit()OSInitHook();OS_CPU_ExceptStkBase //将异常栈的栈底(OS_CPU_ExceptStkBase)按 8 字节对齐OS_KA_BASEPRI_Boundary	//初始化全局变量 OS_KA_BASEPRI_Boundary 的值,该全局变量用于设置 BASEPRI 寄存器OSIntNestingCtr = 0u;//中断嵌套计数OSRunning = OS_STATE_OS_STOPPED; //内核运行状态OSSchedLockNestingCtr = 0u;//任务调度器锁定嵌套计数OSTCBCurPtr = (OS_TCB *)0;/* 指向当前任务的任务控制块的指针 */OSTCBHighRdyPtr = (OS_TCB *)0;/* 指向优先级最高的任务的任务控制块的指针 */OSPrioCur = 0u;/* 当前任务的任务优先级 */OSPrioHighRdy = 0u;/* 优先级最高的任务的任务优先级 */p_stk = OSCfg_ISRStkBasePtr;  // 任务异常栈空间清零处理,该栈空间是一个全局变量…… //一些其他的必要的初始化(但是对于程序分析不是很重要没写入进来)OS_PrioInit();for (i = 0u; i < OS_PRIO_TBL_SIZE; i++) {  //OS_PRIO_TBL_SIZE此变量通过设置的最大优先级数量动态调整OSPrioTbl[i] = 0u;			//我们设置32,刚好一个数组只需要一个字即可装下32bit,此处是进行清零操作}							//若后续创建了新的任务则对应的bit会置1,bit31对应优先级0OS_RdyListInit();p_rdy_list = &OSRdyList[i];   //这 OS_CFG_PRIO_MAX 个就绪态任务链表被存放在数组 OSRdyList[OS_CFG_PRIO_MAX中p_rdy_list->HeadPtr    = (OS_TCB *)0;  //数组 OSRdyList 的一个元素就代表一个就绪态任务链表p_rdy_list->TailPtr    = (OS_TCB *)0;OS_TaskInit(p_err);  // 任务管理的初始化,将任务数量计数器清零,将任务切换次数计数器清零OS_IdleTaskInit(p_err);  //创建空闲任务及其相关初始化变量OS_TickInit(p_err);OSTickCtr             = 0u;//将系统时钟节拍计数器(OSTickCtr)清零OSTickList.NbrEntries = 0u;  //将 Tick 任务链表(OSTickList)中指向下一个 Tick 任务控制块的指针清空OSTickList.NbrUpdated = 0u;OS_StatTaskInit(p_err);  //创建统计任务及其相关初始化变量OS_TmrInit(p_err);  //创建软件定时器任务及其相关初始化变量OSCfg_Init();  //主要用于保证一些未使用到的变量不会被编译器优化掉,中途可能会用到OSInitialized = OS_TRUE; //µC/OS-III 内核初始化状态
    

任务创建

  • 下面是一个简单的任务创建函数
    OSTaskCreate(   (OS_TCB        *)&StartTask_TCB,(CPU_CHAR      *)"start_task",(OS_TASK_PTR    )start_task,(void          *)0,(OS_PRIO        )START_TASK_PRIO,(CPU_STK       *)StartTask_STK,(CPU_STK_SIZE   )START_STK_SIZE / 10,(CPU_STK_SIZE   )START_STK_SIZE,(OS_MSG_QTY     )0,(OS_TICK        )0,(void          *)0,(OS_OPT         )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),(OS_ERR        *)&err);
    
  • 接下面简要说明一下创建具体过程
    OSTaskCreate……	//各种可能的错误检查,如栈空间大小检测,中断中非法调用等等OS_TaskInitTCB(p_tcb);  //初始化任务控制块中成员变量的值为0#if (CPU_CFG_STK_GROWTH == CPU_STK_GROWTH_HI_TO_LO)  //栈的生长方向是与硬件有关的p_stk_limit = p_stk_base + stk_limit;  //根据栈的生长方向确定 “水位”限制的大小,因为传入是一个值不是地址#elsep_stk_limit = p_stk_base + (stk_size - 1u) - stk_limit;#endifp_sp = OSTaskStkInit(p_task, //初始化任务栈,详细内容参考后面注释1p_arg,p_stk_base,p_stk_limit,stk_size,opt);p_tcb->StkPtr        = p_sp; //将更新后的栈指针更新至任务控制块的栈指针中…… //根据函数传入的参数初始化任务控制块中的成员变量CPU_CRITICAL_ENTER();  //进入临界区OS_PrioInsert(p_tcb->Prio);   //更新在init函数中创建的优先级位图表OS_RdyListInsertTail(p_tcb);  //任务插入就绪态任务链表,将对应的链表的前后指针都设置为任务控制块地址OSTaskQty++;   //任务数量+1CPU_CRITICAL_EXIT();  //退出临界区OSSched();  //任务切换,这个是下一章节的内容,此时OSRunning还是stoppped状态,会直接退出该函数,需要经过OSStart()函数改变此状态才行。
    
  • 注释1 初始化任务栈,任务创建时会在栈的最开始位置创建一个如下图所示的任务栈空间方便后期进行切换,且任务栈创建成功后会将更新后的栈指针更新至任务控制块的栈指针中,便于后期进行出栈操
    在这里插入图片描述
    在这里插入图片描述
    对应的函数实现如下图所示:
    在这里插入图片描述

任务启动

  • 开始 µC/OS-III 任务调度是 µC/OS-III 内核开始运行前的最后一步,在此之前需要先调用函数 OSInit()对 µC/OS-III 内核进行初始化,并至少创建一个应用任务。通过调用函数 OSStart()就能够开始 µC/OS-III 的任务调度。

    OSStart(&err);if (OSInitialized != OS_TRUE) {  //判断用户在此之前是否没有初始化操作系统*p_err = OS_ERR_OS_NOT_INIT;return;}if (OSTaskQty <= kernel_task_cnt) { //判断用户在此之前是否没有创建应用任务*p_err = OS_ERR_OS_NO_APP_TASK;return;}if (OSRunning == OS_STATE_OS_STOPPED) {OSPrioHighRdy   = OS_PrioGetHighest();  //就绪态任务的任务优先级以位图的当时记录在数组 OSPrioTbl 中通过计算前导零的方式就能够非常方便地获取就绪态任务中最高的任务优先级OSPrioCur       = OSPrioHighRdy;OSTCBHighRdyPtr = OSRdyList[OSPrioHighRdy].HeadPtr;OSTCBCurPtr     = OSTCBHighRdyPtr;  //获取最高优先级任务控制块的指针OSRunning       = OS_STATE_OS_RUNNING;  //将状态改为启动OSStartHighRdy();  //此函数是任务开始调度的核心,下面会进一步讲解*p_err           = OS_ERR_FATAL_RETURN;}
    
  • 函数 OSStartHighRdy()是在文件 os_cpu_a.asm 中定义的一个标号,注意此处与任务创建函数中的任务栈初始化联系十分紧密,将初始化任务栈中的寄存器全部都出栈到CPU寄存器里面,代码如下:

    OSStartHighRdyCPSID   I                                                   ; Prevent interruption during context switchMOV32   R0, NVIC_SYSPRI14                                   ; Set the PendSV exception priorityMOV32   R1, NVIC_PENDSV_PRISTRB    R1, [R0]MOVS    R0, #0                                              ; Set the PSP to 0 for initial context switch callMSR     PSP, R0MOV32   R0, OS_CPU_ExceptStkBase                            ; Initialize the MSP to the OS_CPU_ExceptStkBaseLDR     R1, [R0]MSR     MSP, R1BL      OSTaskSwHook                                        ; Call OSTaskSwHook() for FPU Push & PopMOV32   R0, OSPrioCur                                       ; OSPrioCur   = OSPrioHighRdy;MOV32   R1, OSPrioHighRdyLDRB    R2, [R1]STRB    R2, [R0]MOV32   R0, OSTCBCurPtr                                     ; OSTCBCurPtr = OSTCBHighRdyPtr;MOV32   R1, OSTCBHighRdyPtrLDR     R2, [R1]STR     R2, [R0]LDR     R0, [R2]                                            ; R0 is new process SP; SP = OSTCBHighRdyPtr->StkPtr;MSR     PSP, R0                                             ; Load PSP with new process SPMRS     R0, CONTROLORR     R0, R0, #2BIC     R0, R0, #4                                          ; Clear FPCA bit to indicate FPU is not in useMSR     CONTROL, R0ISB                                                         ; Sync instruction streamLDMFD    SP!, {R4-R11, LR}                                  ; Restore r4-11, lr from new process stackLDMFD    SP!, {R0-R3}                                       ; Restore r0, r3LDMFD    SP!, {R12, LR}                                     ; Load R12 and LRLDMFD    SP!, {R1, R2}                                      ; Load PC and discard xPSRCPSIE    IBX       R1
    
  • 需要注意的是,在我们使用裸机进行中断任务切换的时候不管主程序还是中断都是使用的是MSP堆栈指针,而在ucos操作系统中我们在主程序的任务切换上使用的是PSP堆栈指针,在中断系统调度上中我们使用的是MSP堆栈指针,此外,在中断进行时,系统会自动出入栈除R4-R11以外的寄存器。
    在这里插入图片描述
    在这里插入图片描述

  • 控制寄存器选择当前使用哪个堆栈指针。
    在这里插入图片描述

  • 在上面的代码中用到了入栈出栈相关的指令,具体的描述如下图所示:
    在这里插入图片描述

相关文章:

uCOS3实时操作系统(系统初始化和任务启动)

文章目录 ucos初始化任务创建任务启动 ucos初始化 系统运行的过程如下&#xff1a;OSInit -> OSTaskCreate -> OSStartucos初始化主要在 OSInit 中进行&#xff0c;下面列举了该初始化过程中比较重要的几个步骤&#xff1a;OSInit()OSInitHook();OS_CPU_ExceptStkBase /…...

线上地图导航小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp三大前沿技术推出的一款线上地图导航小程序源码&#xff0c;ThinkPHP作为后端框架&#xff0c;以其轻量、高效和灵活的特点&#xff0c;确保了小程序的稳定性和可扩展性。FastAdmin则是基于ThinkPHP构建的管理后台&#xff0c;操作简便、功能全…...

Mininet--nodelib.py源码解析

整体构架概述 1. What is it&#xff1f; 本代码是 Mininet 网络仿真框架的扩展模块&#xff0c;包含 LinuxBridge 和 NAT 两类节点。LinuxBridge 提供基于 Linux 网桥的交换机功能&#xff0c;支持生成树协议&#xff08;STP&#xff09;&#xff0c;用于构建冗余网络拓扑并防…...

[C++]多重继承:构造函数调用顺序解析

在C中&#xff0c;当派生类通过 多重继承 &#xff08;Multiple Inheritance&#xff09;继承多个基类&#xff08;如 A、B、C&#xff09;时&#xff0c;其构造函数调用顺序遵循以下规则&#xff1a; 1. 基类构造顺序 基类的构造函数调用顺序严格按照派生类定义中的基类声明…...

Math.round(),Math.ceil(),Math.floor(),Math.sqrt(),Math.pow(),Math.abs()等!

希望看到这篇的你今天开心 目录 Math.round():Math.ceil():Math.floor() :Math.sqrt():Math.pow():Math.abs():了解更多&#xff1a; Math.round(): 四舍五入取值 静态方法Math.round()返回四舍五入为最接近的整数的数字值。 对于正数&#xff0c;Math.round() 会将小数部分小…...

Docker 集成KingBase

Docker安装 再linux系统中安装yum命令&#xff0c;通过yum命令可直接安装docker yum命令如下 yum install dockerDocker安装KingBase 安装完成Dockr后&#xff0c;去KingBase官网中下载镜像 下载完成后&#xff0c;通过docker命令将镜像文件导入 docker load -i kdb_x86_64…...

论文速报《Being-0:结合视觉语言模型与模块化技能的人形机器人智能体》

论文链接&#xff1a;https://arxiv.org/pdf/2503.12533 项目主页&#xff1a;https://beingbeyond.github.io/being-0/?utm_sourcecatalyzex.com 0. 简介 人形机器人被认为是实现具身人工智能的理想载体&#xff0c;因其可以像人类一样与现实世界进行物理交互。构建能够在复…...

卷积神经网络--手写数字识别

本文我们通过搭建卷积神经网络模型&#xff0c;实现手写数字识别。 pytorch中提供了手写数字的数据集 &#xff0c;我们可以直接从pytorch中下载 MNIST中包含70000张手写数字图像&#xff1a;60000张用于训练&#xff0c;10000张用于测试 图像是灰度的&#xff0c;28x28像素 …...

JavaScript-原型、原型链详解

一、构造函数 在 JavaScript 中&#xff0c;构造函数是一种特殊的函数&#xff0c;用于创建和初始化对象&#xff0c;它就像一个 “对象模板”。通过 new 关键字调用构造函数时&#xff0c;会创建一个新对象&#xff0c;并将构造函数中的属性和方法 “绑定” 到这个新对象上。…...

深度学习框架PyTorch——从入门到精通(3.3)YouTube系列——自动求导基础

这部分是 PyTorch介绍——YouTube系列的内容&#xff0c;每一节都对应一个youtube视频。&#xff08;可能跟之前的有一定的重复&#xff09; 我们需要Autograd做什么&#xff1f;一个简单示例训练中的自动求导开启和关闭自动求导自动求导与原地操作 自动求导分析器高级主题&…...

永磁同步电机控制算法-VF控制

一、原理介绍 V/F 控制又称为恒压频比控制,给定VF 控制曲线 电压是频率的tt例函数 即控制电压跟随频率变化而变化以保持磁通恒定不变。 二、仿真模型 在MATLAB/simulink里面验证所提算法&#xff0c;搭建仿真。采用和实验中一致的控制周期1e-4&#xff0c;电机部分计算周期为…...

【Docker 运维】Java 应用在 Docker 容器中启动报错:`unable to allocate file descriptor table`

文章目录 一、根本原因二、判断与排查方法三、解决方法1、限制 Docker 容器的文件描述符上限2、在执行脚本中动态设置ulimit的值3、升级至 Java 11 四、总结 容器内执行脚本时报错如下&#xff0c;Java 进程异常退出&#xff1a; library initialization failed - unable to a…...

SpringBoot + Vue 实现云端图片上传与回显(基于OSS等云存储)

前言 在实际生产环境中&#xff0c;我们通常会将图片等静态资源存储在云端对象存储服务&#xff08;如阿里云OSS、七牛云、腾讯云COS等&#xff09;上。本文将介绍如何改造之前的本地存储方案&#xff0c;实现基于云端存储的图片上传与回显功能。 一、技术选型 云存储服务&a…...

Session与Cookie的核心机制、用法及区别

Python中Session与Cookie的核心机制、用法及区别 在Web开发中&#xff0c;Session和Cookie是两种常用的用于跟踪用户状态的技术。它们在实现机制、用途和安全性方面都有显著区别。本文将详细介绍它们的核心机制、用法以及它们之间的主要区别。 一、Cookie的核心机制与用法 1…...

离线安装rabbitmq全流程

在麒麟系统&#xff08;如银河麒麟&#xff09;上离线安装 RabbitMQ 的具体操作步骤如下&#xff1a; 一、准备工作 确认系统版本&#xff1a;确认麒麟系统的版本&#xff0c;例如银河麒麟高级服务器 V10。确定 RabbitMQ 及依赖版本&#xff1a;根据系统版本确定兼容的 Rabbi…...

llama-webui docker实现界面部署

1. 启动ollama服务 [nlp server]$ ollama serve 2025/04/21 14:18:23 routes.go:1007: INFO server config env"map[OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_HOST: OLLAMA_KEEP_ALIVE:24h OLLAMA_LLM_LIBRARY: OLLAMA_MAX_LOADED_MODELS:4 OLLAMA_MAX_…...

第1 篇:你好,时间序列!—— 开启时间数据探索之旅

第 1 篇&#xff1a;你好&#xff0c;时间序列&#xff01;—— 开启时间数据探索之旅 (图片来源: Stephen Dawson on Unsplash) 你有没有想过&#xff1a; 明天的天气会是怎样&#xff1f;天气预报是怎么做出来的&#xff1f;某支股票未来的价格走势如何预测&#xff1f;购物…...

C++算法(11):vector作为函数参数的三种传递方式详解

在C中&#xff0c;std::vector是最常用的动态数组容器之一。当我们需要将vector传递给函数时&#xff0c;不同的传递方式会对性能和功能产生显著影响。本文将详细介绍三种常见的传递方式及其适用场景&#xff0c;帮助开发者根据需求选择最合适的方法。 1. 按值传递&#xff08;…...

版本控制利器——SVN简介

版本控制利器——SVN简介 在软件开发和项目管理的领域中&#xff0c;版本控制是一项至关重要的工作。它能帮助团队成员高效协作&#xff0c;确保代码的安全性和可追溯性。今天&#xff0c;我们就来详细介绍一款经典的版本控制系统——SVN&#xff08;Subversion&#xff09;。…...

链式栈和线性栈

‌1. 线性栈&#xff08;顺序栈&#xff09;‌ ‌结构定义‌&#xff1a; #include <iostream> using namespace std;#define MAX_SIZE 100 // 预定义最大容量// 线性栈结构体 typedef struct {int* data; // 存储数据的数组int top; // 栈顶指针&…...

消息中间件RabbitMQ:简要介绍及其Windows安装流程

一、简要介绍 定义&#xff1a;RabbitMQ 是一个开源消息中间件&#xff0c;用于实现消息队列和异步通信。 场景&#xff1a;适用于分布式系统、异步任务处理、消息解耦、负载均衡等场景。 比喻&#xff1a;RabbitMQ 就像是快递公司&#xff0c;负责在不同系统间安全快速地传递…...

足球 AI 智能体技术解析:从数据采集到比赛预测的全链路架构

一、引言 在足球运动数字化转型的浪潮中&#xff0c;AI 智能体正成为理解比赛、预测赛果的核心技术引擎。本文从工程实现角度&#xff0c;深度解析足球 AI 的技术架构&#xff0c;涵盖数据采集、特征工程、模型构建、实时计算到决策支持的全链路技术方案&#xff0c;揭示其背后…...

VTK知识学习(53)- 交互与Widget(四)

1、测量类Widget 1&#xff09;概述 与测量相关的主要 Widget如下&#xff1a; vtkDistanceWidget:用于在二维平面上测量两点之间的距离。vtkAngleWidget:用于二维平面的角度测量。vtkBiDimensionalWidget:用于测量二维平面上任意两个正交方向的轴长。 按照前面提到的步骤创…...

基础服务系列-Windows10 安装AnacondaJupyter

下载 https://www.anaconda.com/products/individual 安装 安装Jupyter 完成安装 启动Jupyter 浏览器访问 默认浏览器打开&#xff0c;IE不兼容&#xff0c;可以换个浏览器 修改密码 运行脚本...

使用c++调用deepseek的api(附带源码)

可以给服务器添加deepseek这样就相当于多了一个智能ai助手 deepseek的api申请地址使用格式测试效果源码 deepseek的api申请地址 这边使用硅基流动的api&#xff0c;注册就有免费额度 硅基流动: link 使用格式 api的调用格式&#xff0c;ds的api调用就是用固定协议然后发送到…...

HarmonyOS-ArkUI: animateTo 显式动画

什么是显式动画 啊, 尽管有点糙,但还是解释一下吧, 显式动画里面的“显式”二字, 是程序员在代码调用的时候,就三令五申,明明白白调用动画API而创建的动画。 这个API的名字就是: animateTo。这就是显式动画。说白了您可以大致理解为,显式动画,就是调用animateTo来完成…...

Spring AI MCP

MCP是什么 MCP是模型上下文协议&#xff08;Model Context Protocol&#xff09;的简称&#xff0c;是一个开源协议&#xff0c;由Anthropic&#xff08;Claude开发公司&#xff09;开发&#xff0c;旨在让大型语言模型&#xff08;LLM&#xff09;能够以标准化的方式连接到外…...

Kubernetes 创建 Jenkins 实现 CICD 配置指南

Kubernetes 创建 Jenkins 实现 CICD 配置指南 拉取 Jenkins 镜像并推送到本地仓库 # 从官方仓库拉取镜像&#xff08;若网络不通畅可使用国内镜像源&#xff09; docker pull jenkins/jenkins:lts-jdk11# 国内用户可去下面地址寻找镜像源并拉取&#xff1a; https://docker.a…...

01_Flask快速入门教程介绍

一、课程视频 01_Flask快速入门教程介绍 二、课程特点 讲课风格通俗易懂&#xff0c;理论与实战相结合 教程&#xff1a;视频 配套文档 配套的代码 最新本版&#xff0c;Python版本是3.12&#xff0c;Flask版本是3.10 即使是从没接触过Flsk的小白也看得懂学得会 三、适用人…...

SSH反向代理

SSH反向代理 一、过程 1、 确保树莓派和阿里云服务器的 SSH 服务正常运行 检查树莓派的ssh服务 sudo systemctl status ssh如果未启用&#xff0c;请启动并设置开机自启&#xff1a; sudo systemctl enable ssh sudo systemctl start ssh检查阿里云服务器的SSH服务 sudo …...

第 5 篇:初试牛刀 - 简单的预测方法

第 5 篇&#xff1a;初试牛刀 - 简单的预测方法 经过前面四篇的学习&#xff0c;我们已经具备了处理时间序列数据的基本功&#xff1a;加载、可视化、分解以及处理平稳性。现在&#xff0c;激动人心的时刻到来了——我们要开始尝试预测 (Forecasting) 未来&#xff01; 预测是…...

深度学习中的归一化技术:从原理到实战全解析

摘要&#xff1a;本文系统解析深度学习中的归一化技术&#xff0c;涵盖批量归一化&#xff08;BN&#xff09;、层归一化&#xff08;LN&#xff09;、实例归一化&#xff08;IN&#xff09;、组归一化&#xff08;GN&#xff09;等核心方法。通过数学原理、适用场景、优缺点对…...

流量抓取工具(wireshark)

协议 TCP/IP协议簇 网络接口层&#xff08;没有特定的协议&#xff09;PPPOE 物理层数据链路层 网络层: IP(v4/v6) ARP&#xff08;地址解析协议) RARP ICMP(Internet控制报文协议) IGMP传输层&#xff1a;TCP(传输控制协议&#xff09;UDP&#xff08;用户数据报协议)应用层…...

【原创】Ubuntu20.04 安装 Isaac Gym 仿真器

Isaac Gym 是 NVIDIA 开发的一个基于GPU的机器人仿真平台。其高效的 GPU 加速能力和大规模并行仿真性能&#xff0c;成为强化学习训练和机器人控制研究的重要选择。 本文将介绍 Isaac Gym 的安装过程【简易】。 1.配置环境 Ubuntu20.04 安装 NVIDIA 显卡驱动 Ubuntu20.04 安…...

AI 速读 SpecReason:让思考又快又准!

在大模型推理的世界里&#xff0c;速度与精度往往难以兼得。但今天要介绍的这篇论文带来了名为SpecReason的创新系统&#xff0c;它打破常规&#xff0c;能让大模型推理既快速又准确&#xff0c;大幅提升性能。想知道它是如何做到的吗&#xff1f;快来一探究竟&#xff01; 论…...

从“堆料竞赛”到“体验深耕”,X200 Ultra和X200s打响手机价值升维战

出品 | 何玺 排版 | 叶媛 vivo双旗舰来袭&#xff01; 4月21日&#xff0c;vivo X系列春季新品发布会盛大开启&#xff0c;带来了一场科技与创新的盛宴。会上&#xff0c;消费者期待已久的X200 Ultra及X200s两款旗舰新品正式发布。 vivo两款旗舰新品发布后&#xff0c;其打破…...

Macbook IntelliJ IDEA终端无法运行mvn命令

一、背景 idea工具里执行Maven命令mvn package&#xff0c;报错提示 zsh: command not found: mvn。 macOS&#xff0c;默认使用的是zsh&#xff0c;环境变量通常配置在 ~/.zshrc 文件中。 而我之前一直是配置在~/.bash_profile文件中。 二、环境变量 vi ~/.zshrc设置MAVE…...

CentOS 7进入救援模式——VirtualBox虚拟机

​ 目录 1. 在`VirtualBox`环境下,开机按F12,进入`VirtualBox temporary boot device selection `界面,按`c`键,选中`CD-ROM `回车。2. 选中`Troubleshooting`(故障排除),进入`Troubleshooting`界面3. 接下来会显示救援模式菜单,通常选择`"1) Continue"`(除非您…...

AI软件栈:LLVM分析(六)

LLVM后端代码生成的关键步骤 文章目录 指令选择指令调度寄存器分配 指令选择 完成从基于LLVM IR的DAG转换为基于特定目标平台的DAG&#xff08;注意&#xff0c;此时描述格式依然是DAG形态&#xff09;基于TabGen完成指令重映射&#xff08;典型的处理包括&#xff1a;指令拆散…...

【第十六届 蓝桥杯 省 C/Python A/Java C 登山】题解

题目链接&#xff1a;P12169 [蓝桥杯 2025 省 C/Python A/Java C] 登山 思路来源 一开始想的其实是记搜&#xff0c;但是发现还有先找更小的再找更大的这种路径&#xff0c;所以这样可能错过某些最优决策&#xff0c;这样不行。 于是我又想能不能从最大值出发往回搜&#xf…...

Github 热点项目 Jumpserver开源堡垒机让服务器管理效率翻倍

Jumpserver今日喜提160星&#xff0c;总星飙至2.6万&#xff01;这个开源堡垒机有三大亮点&#xff1a;① 像哆啦A梦的口袋&#xff0c;支持多云服务器一站式管理&#xff1b;② 安全审计功能超硬核&#xff0c;操作记录随时可回放&#xff1b;③ 网页终端无需装插件&#xff0…...

5V 1A充电标准的由来与技术演进——从USB诞生到智能手机时代的电力革命

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 一、起源&#xff1a;USB标准与早期电力传输需求 1. USB的诞生背景 1996年&#xff0c;由英特尔、微软、IBM等公司组成的USB-IF&#xff08;USB Implementers Forum&#xff09;发布了…...

驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程

&#x1f3a5; 视频教程请关注 B 站&#xff1a;“嵌入式 Jerry” 一、为什么要学习字符设备驱动&#xff1f; 在 Linux 驱动开发中&#xff0c;字符设备&#xff08;Character Device&#xff09;驱动 是最基础也是最常见的一类驱动类型。很多设备&#xff08;如 LED、按键、…...

外网如何连接内网中的mysql数据库服务器

一、MySQL 产品简介 mysql是一款数据库产品&#xff0c;它主要用于存储、管理和检索数据&#xff0c;对用户的数据进行存储管理 二、运维人员遇到的问题 当内网服务器部署好mysql数据库后&#xff0c;外网如何安全的访问数据库进行增删改查&#xff0c;是运维人员遇到的一个…...

你的大模型服务如何压测:首 Token 延迟、并发与 QPS

写在前面 大型语言模型(LLM)API,特别是遵循 OpenAI 规范的接口(无论是 OpenAI 官方、Azure OpenAI,还是 DeepSeek、Moonshot 等众多兼容服务),已成为驱动下一代 AI 应用的核心引擎。然而,随着应用规模的扩大和用户量的增长,仅仅关注模型的功能是不够的,API 的性能表…...

4月谷歌新政 | Google Play今年对“数据安全”的管控将全面升级!

大家好&#xff0c;我是牢鹅&#xff01;每年的Q2季度是Google Play重要政策更新的时间节点&#xff0c;一般都伴随着重磅政策的更新&#xff0c;今年也不例外。4月10日&#xff0c;谷歌政策迎来2025年第二次更新&#xff0c;本次政策更新内容相较3月政策更新&#xff0c;不管是…...

第十四届蓝桥杯 2023 C/C++组 有奖问答

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 蓝桥云课 有奖问答 思路&…...

【Redis】SpringDataRedis

Spring Data Redis 使得开发者能够更容易地与 Redis 数据库进行交互&#xff0c;并且支持不同的 Redis 客户端实现&#xff0c;如 Jedis 和 Lettuce。Spring Data Redis 会自动选择一个客户端&#xff0c;通常情况下&#xff0c;Spring Boot 默认使用 Lettuce 作为 Redis 客户端…...

XAttention

XAttention: Block Sparse Attention with Antidiagonal Scoring 革新Transformer推理的高效注意力机制资源​​ ​​论文链接​​&#xff1a;XAttention: Block Sparse Attention with Antidiagonal Scoring ​​代码开源​​&#xff1a;GitHub仓库 XAttention是韩松团队提…...

07.Python代码NumPy-排序sort,argsort,lexsort

07.Python代码NumPy-排序sort&#xff0c;argsort&#xff0c;lexsort 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是NumPy的使用语法。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性&#xff0c;希望…...