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

特权FPGA之按键消抖

 

 完整代码如下所示:

`timescale 1ns / 1ps// Company: 
// Engineer:		 特权
//
// Create Date:  
// Design Name:    
// Module Name: 
// Project Name:   
// Target Device:  
// Tool versions:  
// Description:
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 欢迎加入EDN的FPGA/CPLD助学小组一起讨论:http://group.ednchina.com/1375///说明:当三个独立按键的某一个被按下后,相应的LED被点亮;
//		再次按下后,LED熄灭,按键控制LED亮灭
/*****************************************************************************************************************/
module sw_debounce(clk,rst_n,sw1_n,sw2_n,sw3_n,led_d1,led_d2,led_d3);input   clk;	//主时钟信号,50MHz
input   rst_n;	//复位信号,低有效
input   sw1_n,sw2_n,sw3_n; 	//三个独立按键,低表示按下
output  led_d1,led_d2,led_d3;	//发光二极管,分别由按键控制//--------------------------------------------------------------------------------------------------------------------reg[2:0] key_rst;  // 20ms滤除抖动always @(posedge clk  or negedge rst_n)if (!rst_n) key_rst <= 3'b111;else key_rst <= {sw3_n,sw2_n,sw1_n};reg[2:0] key_rst_r;       //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中always @ ( posedge clk  or negedge rst_n )if (!rst_n) key_rst_r <= 3'b111;else key_rst_r <= key_rst;//当寄存器key_rst由1变为0时,led_an的值变为高,维持一个时钟周期 
wire[2:0] key_an ;
assign key_an = key_rst_r & (~key_rst);
/*
key_rst     1 1 1 0 0 1 
~key_rst    0 0 0 1 1 0
key_rst_n   _ 1 1 1 0 0 1
key_an        0 0 1 0 0
*/
//-------------------------------------------------------------------------------------------------------------------------reg[19:0]  cnt;	//计数寄存器always @ (posedge clk  or negedge rst_n)if (!rst_n) cnt <= 20'd0;	//异步复位else if(key_an) cnt <=20'd0;// 按键消抖代码核心else cnt <= cnt + 1'b1;reg[2:0] low_sw;always @(posedge clk  or negedge rst_n)if (!rst_n) low_sw <= 3'b111;else if (cnt == 20'hfffff) 	//满20ms,将按键值锁存到寄存器low_sw中	 cnt == 20'hfffff,之所以这样设计,人按下按键通常至少也要几百毫秒的时间,这20ms的时间窗口内,什么也不需要做。low_sw <= {sw3_n,sw2_n,sw1_n};//---------------------------------------------------------------------------
reg  [2:0] low_sw_r;       //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中always @ ( posedge clk  or negedge rst_n )if (!rst_n) low_sw_r <= 3'b111;else low_sw_r <= low_sw;
/*
low_sw		111 111 111 110 110 110  
~low_sw     000 000 000 001 001 001
low_sw_r        111 111 111 110 110 110led_ctrl	000 000 000 001 000 000 */
//当寄存器low_sw由1变为0时,led_ctrl的值变为高,维持一个时钟周期 
wire[2:0] led_ctrl =  low_sw_r[2:0] & ( ~low_sw[2:0]);reg d1;
reg d2;
reg d3;always @ (posedge clk or negedge rst_n)if (!rst_n) begind1 <= 1'b0;d2 <= 1'b0;d3 <= 1'b0;endelse begin		//某个按键值变化时,LED将做亮灭翻转if ( led_ctrl[0] ) d1 <= ~d1;	if ( led_ctrl[1] ) d2 <= ~d2;if ( led_ctrl[2] ) d3 <= ~d3;endassign led_d3 = d1 ? 1'b1 : 1'b0;		//LED翻转输出
assign led_d2 = d2 ? 1'b1 : 1'b0;
assign led_d1 = d3 ? 1'b1 : 1'b0;endmodule

边沿检测

always @(posedge clk  or negedge rst_n)if (!rst_n) key_rst <= 3'b111;else key_rst <= {sw3_n,sw2_n,sw1_n};reg[2:0] key_rst_r;       //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中always @ ( posedge clk  or negedge rst_n )if (!rst_n) key_rst_r <= 3'b111;else key_rst_r <= key_rst;//当寄存器key_rst由1变为0时,led_an的值变为高,维持一个时钟周期 
wire[2:0] key_an ;
assign key_an = key_rst_r & (~key_rst);
/*
key_rst     1 1 1 0 0 1 
~key_rst    0 0 0 1 1 0
key_rst_n   _ 1 1 1 0 0 1
key_an        0 0 1 0 0
*/

key_rst_n的数据延迟了一个时钟周期。

知识点1:

按位与(&):

2个多位操作数按位进行与运算,各位的结果按顺序组成一个新的多位数。例如,a=2’b10,b=2’b11,则a&b的结果为2’b10;[1]

知识点2:

 

 设置两个寄存器,对前一状态和后一状态进行寄存,若前后两个状态不同,则检测到了边沿。对于上升沿和下降沿的确定可以用组合逻辑比较来确定。若前一状态D[1]为高电平,后一状态D[0]为低电平,则为下降沿,反之为上升沿。[2]

 

当然,TQ老师用的方法不一样,道理是相同的。个人推荐文献2中提到的办法。要注意的是,后者是双边沿检测。

//设置两个寄存器,实现前后电平状态的寄存
//相当于对dat_i 打两拍always @(posedge clk or negedge rst_n)beginif(rst_n == 1'b0)beginD <= 2'b00;endelse beginD <= {D[0], data};  	//D[1]表示前一状态,D[0]表示后一状态(新数据) endend//组合逻辑进行边沿检测assign  pos_edge = ~D[1] & D[0];assign  neg_edge = D[1] & ~D[0];assign  data_edge = pos_edge | neg_edge;

接下来是核心代码。按键按下了,计数器清零,等待20ms,然后再把按键值输出给led灯。

//-------------------------------------------------------------------------------------------------------------------------reg[19:0]  cnt;	//计数寄存器always @ (posedge clk  or negedge rst_n)if (!rst_n) cnt <= 20'd0;	//异步复位else if(key_an) cnt <=20'd0;// 按键消抖代码核心else cnt <= cnt + 1'b1;reg[2:0] low_sw;always @(posedge clk  or negedge rst_n)if (!rst_n) low_sw <= 3'b111;else if (cnt == 20'hfffff) 	//满20ms,将按键值锁存到寄存器low_sw中	 cnt == 20'hfffff,之所以这样设计,人按下按键通常至少也要几百毫秒的时间,这20ms的时间窗口内,什么也不需要做。low_sw <= {sw3_n,sw2_n,sw1_n};//---------------------------------------------------------------------------

 

 

reg d1;
reg d2;
reg d3;always @ (posedge clk or negedge rst_n)if (!rst_n) begind1 <= 1'b0;d2 <= 1'b0;d3 <= 1'b0;endelse begin		//某个按键值变化时,LED将做亮灭翻转if ( led_ctrl[0] ) d1 <= ~d1;	if ( led_ctrl[1] ) d2 <= ~d2;if ( led_ctrl[2] ) d3 <= ~d3;endassign led_d3 = d1 ? 1'b1 : 1'b0;		//LED翻转输出
assign led_d2 = d2 ? 1'b1 : 1'b0;
assign led_d1 = d3 ? 1'b1 : 1'b0;

参考文献

[1]FPGA_Verilog基础篇:verilog基本逻辑运算_verilog两组多位宽信号相与-CSDN博客

[2]FPGA基础学习——Verilog实现的边沿检测(上升沿下降沿检测)及Modelsim仿真_verilog 上升沿检测-CSDN博客 

相关文章:

特权FPGA之按键消抖

完整代码如下所示&#xff1a; timescale 1ns / 1ps// Company: // Engineer: 特权 // // Create Date: // Design Name: // Module Name: // Project Name: // Target Device: // Tool versions: // Description: // // Dependencies: // // Revision: // …...

实时比分更新系统的搭建

搭建一个实时比分更新系统需要考虑多个技术环节&#xff0c;以下是一个完整的实现方案&#xff1a; 一、系统架构 1.数据获取层 比分数据API接入&#xff08;如熊猫比分、API-Football等&#xff09; 网络爬虫&#xff08;作为备用数据源&#xff09; 2.数据处理层 …...

【Linux】线程的概念与控制

目录 1. 整体学习思维导图 2. 线程的概念 2.1 基础概念 2.2 Linux下的线程 初步理解&#xff1a; 2. 分页式存储 3.1 页表 3.1.1 页框/页 3.1.2 页表机制 3.1.3 从虚拟地址到物理地址的转换 总结&#xff1a; 3.2 TLB快表 3.3 缺页异常&#xff08;Page Fault&am…...

K8s 老鸟的配置管理避雷手册

Yining, China 引言 对于这种案例&#xff0c;你们的处理思路是怎么样的呢&#xff0c;是否真正的处理过&#xff0c;如果遇到&#xff0c;你们应该怎么处理。 最后有相关的学习群&#xff0c;有兴趣可以加入。 开始 一、血泪教训&#xff1a;环境变量引发的真实灾难 1.1 …...

飞速(FS)解决方案验证实验室搬迁升级,赋能客户技术服务

飞速&#xff08;FS&#xff09;解决方案验证实验室近日顺利完成搬迁升级&#xff0c;标志着飞速&#xff08;FS&#xff09;在解决方案可行性验证、质量保障以及定制化需求支持方面迈上新台阶&#xff0c;进一步提升了产品竞争力和客户信任度。 全新升级的实验室定位为技术验证…...

柔性关节双臂机器人奇异摄动鲁棒自适应PD控制

1 双臂机器人动力学模型 对于一个具有多个关节的机器人来说&#xff0c;机器人端动力学子方程及关节驱动电机端动力学子方程为&#xff1a; 以上为推导过程&#xff0c;MATLAB程序已完成&#xff0c;若需要可找我。...

遵循IEC62304YY/T0664:确保医疗器械软件生命周期合规性

一、EC 62304与YY/T 0664的核心定位与关系 IEC 62304&#xff08;IEC 62304&#xff09;是国际通用的医疗器械软件生命周期管理标准&#xff0c;适用于所有包含软件的医疗器械&#xff08;如嵌入式软件、独立软件、移动应用等&#xff09;&#xff0c;其核心目标是确保软件的安…...

Kafka和RocketMQ相比有什么区别?那个更好用?

Kafka和RocketMQ相比有什么区别?那个更好用? Kafka 和 RocketMQ 都是广泛使用的消息队列系统&#xff0c;它们有很多相似之处&#xff0c;但也有一些关键的区别。具体选择哪个更好用&#xff0c;要根据你的应用场景和需求来决定。以下是它们之间的主要区别&#xff1a; 1. …...

空对象模式(Null Object Pattern)在C#中的实现详解

一 、什么是空对象模式 空对象模模是靠”空对孔象式是书丯一种引施丼文行为,行凌,凌万成,个默疤"空象象象象来飞䛿引用用用用电从延盈盈甘仙丿引用用用职从延务在仅代砷易行行 」这种燕式亲如要目的片片 也说媚平父如如 核心思烟 定义一个人 派一个 &#xfffd; 创建…...

【Windows】Win2008服务器SQL服务监控重启脚本

以下是一个用于监控并自动重启 SQL Server 服务的批处理脚本&#xff0c;适用于 Windows Server 2008 和 SQL Server 2012&#xff08;默认实例&#xff09;&#xff1a; echo off setlocal enabledelayedexpansion:: 配置参数 set SERVICE_NAMEMSSQLSERVER set LOG_FILEC:\SQ…...

Spring MVC 操作会话属性详解(@SessionAttributes 与 @SessionAttribute)

Spring MVC 操作会话属性详解&#xff08;SessionAttributes 与 SessionAttribute&#xff09; 1. 核心注解对比 注解作用范围功能SessionAttributes类级别声明控制器中需要持久化的模型属性&#xff08;存入 HttpSession&#xff09;SessionAttribute方法参数/返回值显式绑定…...

416. 分割等和子集

416. 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和…...

Composer安装Laravel步骤

Composer安装Laravel步骤 要使用 Composer 安装 Laravel&#xff0c;请按照以下步骤操作&#xff1a; 确保已经安装了 Composer。如果还没有安装&#xff0c;请访问 https://getcomposer.org/download/ 下载并安装。 打开命令行或终端。 使用 cd 命令导航到你的项目目录&…...

游戏引擎学习第209天

调整椅子α 昨天&#xff0c;我们实现了将数据输出到调试流中的功能&#xff0c;之前的调试流大多只包含性能分析数据&#xff0c;而现在我们可以将任意数据放入调试流中。 完成这个功能后&#xff0c;我们接下来要做的是收集这些数据并显示出来&#xff0c;这样我们就能有一…...

更新vscode后链接远程服务器出现了报错‘无法建立连接:远程主机不满足运行vscode服务器的先决条件’20250408

更新了vscode之后再链接远程服务器出现了报错&#xff0c;如下&#xff1a; 1. 确认服务器上的库版本 1.1 检查 glibc 版本 在服务器终端运行&#xff1a; ldd --version 最低要求&#xff1a;VS Code 远程开发需要 glibc ≥ 2.28。 1.2 检查 libstdc 版本 在服务器终端运…...

电磁兼容特种测试

并非所有的检测都能在实验室的标准场地中完成。今天&#xff0c;就带大家走进电磁兼容特种测试中需要现场测试的情况&#xff0c;看看哪些场合和设备有着特殊的测试需求。 哪种场合需要现场测试&#xff1f; 大型设备由于物理尺寸或供电功率上的限制&#xff0c;无法在一般…...

PyTorch 基础要点详解:从模型构建到评估

在深度学习领域&#xff0c;PyTorch 作为一款广受欢迎的开源框架&#xff0c;为开发者提供了便捷高效的工具。今天&#xff0c;我们就深入探讨一下 PyTorch 中的几个关键要点&#xff1a;torch.nn.Linear、torch.nn.MSELoss、model.train() 以及 model.eval()&#xff0c;了解它…...

Dockerfile中CMD命令未生效

今天在使用dockerfile构建容器镜像时&#xff0c;最后一步用到CMD命令启动start.sh&#xff0c;但是尝试几遍都未能成功执行脚本。最后查阅得知&#xff1a;Dockerfile中可以有多个cmd指令&#xff0c;但只有最后一个生效&#xff0c;CMD会被docker run之后的参数替换。 CMD会…...

Linux平台MQTT测试抓包分析

Linux平台搭建MQTT测试环境-CSDN博客基于这里的测试代码抓包 sudo tcpdump -i any -w mqtt1.cap 上述源码中 tcp://localhost:1883 配置连接&#xff1a; Broker Address: localhostPort: 1883 整体通信流程 1. Subscriber和Broker&#xff08;代理服务器&#xff09;建立…...

Docker全方位指南

目录 前言 第一部分&#xff1a;Docker基础与安装 1.1 什么是Docker&#xff1f; 1.2 Docker的适用场景 1.3 全平台安装指南 1.4 配置优化 第二部分&#xff1a;Docker核心操作与原理 2.1 镜像管理 2.2 容器生命周期 2.3 网络模型 2.4 Docker Compose 第三部分&…...

【经典DP】三步问题 / 整数拆分 / 不同路径II / 过河卒 / 下降路径最小和 / 地下城游戏

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;动态规划 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 动态规划总结Fibonacci数列BC140 杨辉三角杨辉三角三步问题最小花费爬楼梯孩子们的游戏解码方法整数拆分不同路径不同路径II过…...

Koji/OBS编译节点OS版本及工具版本管理深度实践指南

引言 在分布式编译框架Koji/OBS中&#xff0c;有效管理编译节点的操作系统&#xff08;OS&#xff09;版本及工具版本是确保构建环境稳定性、兼容性和安全性的关键。本文将从多版本共存、自动化更新、兼容性管理等多个维度&#xff0c;系统阐述如何高效管理编译节点的OS版本及…...

39、web前端开发之Vue3保姆教程(三)

四、Vue3中集成Element Plus 1、什么是Element Plus Element Plus 是一款基于 Vue 3 的开源 UI 组件库,旨在为开发者提供一套高质量、易用的组件,用于快速构建现代化的 web 应用程序。 Element Plus 提供了大量的 UI 组件,包括但不限于: 表单组件:输入框、选择器、开关…...

多类型医疗自助终端智能化升级路径(代码版.下)

医疗人机交互层技术实施方案 一、多模态交互体系 1. 医疗语音识别引擎 # 基于Wav2Vec2的医疗ASR系统 from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC import torchaudioclass MedicalASR:def __init__(self):self.processor = Wav2Vec2Processor.from_pretrai…...

Git代码管理

这里写目录标题 分支管理策略TrunkBased&#x1f331; 核心理念✅优点❌缺点适用场景 GitFlow✅ GitFlow 的优点❌ GitFlow 的缺点适用场景 AOneFlow✅ AOneFlow 的优点❌缺点适用场景 如何选择分支策略&#xff1f;代码提交规范&#x1f331;分支管理&#x1f504;代码更新⚔️…...

CubeMX配置STM32F103PWM连续频率输出

要求&#xff1a; 输出2-573Hz频率&#xff0c;输出频率步长小于1Hz 一、CubeMX配置 auto-reload preload在下个周期加载ARR Output compare preload 在下个周期加载CCR 二、 程序 1.启动PWM输出 HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); 2.根据频率调整PSC、ARR、…...

举例说明计算机视觉(CV)技术的优势和挑战。

计算机视觉(CV)技术是人工智能领域的一个重要分支,通过让计算机“看”和“理解”图像或视频,可以实现许多实际应用。以下是计算机视觉技术的优势和挑战的例子: 优势: 自动化处理:CV技术可以自动化地处理大量图像或视频数据,实现快速而准确的分析和识别。提高效率:在许…...

工程师 - FTDI SPI converter

中国网站&#xff1a;FTDIChip- 首页 UMFT4222EV-D UMFT4222EV-D - FTDI 可以下载Datasheet。 UMFT4222EVUSB2.0 to QuadSPI/I2C Bridge Development Module Future Technology Devices International Ltd. The UMFT4222EV is a development module which uses FTDI’s FT4222H…...

河畔石上数(C++)

在 C 里&#xff0c;std::set 是标准模板库&#xff08;STL&#xff09;提供的一种关联容器&#xff0c;它能高效地存储唯一元素&#xff0c;并且元素会按照特定的顺序排列&#xff0c;默认是升序。下面从多个方面为你详细介绍 std::set。 1. 头文件包含 若要使用 std::set&a…...

《线性表、顺序表与链表》教案(C语言版本)

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…...

【用Cursor 进行Coding 】

「我」&#xff1a;“添加 XXX 功能” &#xff3b;Claude-3.7&#xff3d;:“好的&#xff0c;我完成了&#xff0c;还顺手做了 19个你没要求不需要的功能、甚至还修改了原有999行正常代码 &#xff5e; 不用谢” &#xff3b;Gemini-2.5&#xff3d;:“好的&#xff0c;我会…...

vue2 打包时增加时间戳防止浏览器缓存,打包后文件进行 js、css 压缩

文章目录 前言一、什么是浏览器缓存二、展示效果三、vue.config.js 代码四、代码压缩部分服务器不支持五、感谢 前言 vue 开发过程中&#xff0c;项目前端代码需要更新&#xff0c;更新后由于浏览器缓存导致代码没有及时更新所产生错误&#xff0c;所以在打包时增加时间戳防止…...

TIM定时器

一、TIM定时器 STM32高级定时器实战&#xff1a;PWM、捕获与死区控制详解-CSDN博客 二、相关函数 1.TIM_TimeBaseInitTypeDef结构体讲解 typedef struct {uint16_t TIM_Prescaler; // 预分频器&#xff0c;用于设置定时器计数频率uint16_t TIM_CounterMode; /…...

S130N-ISI 全栈方案与云平台深度协同:重构 PLC 开发新范式

一、什么是 PLC&#xff1f; 1.技术定义 PLC&#xff08;Power Line Communication&#xff09;是一种创新的通信技术&#xff0c;它以电力线作为天然的传输介质&#xff0c;通过先进的信号调制技术将高频数据信号叠加于工频电流之上&#xff0c;实现电力输送与数据通信的双频共…...

Jenkins 插件文件优先使用 .jpi 后缀

.hpi 和 .jpi 文件本质上是 Jenkins 插件的打包格式&#xff0c;两者的区别主要体现在历史和命名习惯上&#xff1a; ✅ .hpi&#xff08;Hudson Plugin&#xff09; 来源&#xff1a;最初是 Hudson 项目的插件格式。含义&#xff1a;Hudson Plugin 的缩写。用途&#xff1a;早…...

# 决策树与PCA降维在电信客户流失预测中的应用

决策树与PCA降维在电信客户流失预测中的应用 在数据分析和机器学习领域&#xff0c;电信客户流失预测是一个经典的案例。本文将通过Python代码实现&#xff0c;探讨决策树模型在电信客户流失预测中的应用&#xff0c;并结合PCA降维技术优化模型性能&#xff0c;同时对比降维前…...

go语言的语法糖以及和Java的区别

1. Go 语言的语法糖及简化语法 Go 语言本身设计理念是简洁、清晰&#xff0c;虽然不像某些动态语言那样“花哨”&#xff0c;但它提供了几种便捷语法&#xff0c;使代码更简洁&#xff1a; 1.1 短变量声明&#xff08;Short Variable Declaration&#xff09; 语法&#xff1…...

WebRtc 视频流卡顿黑屏解决方案

// node webrtc视频转码服务 const url "http://10.169.xx.xx:8000" <video :ref"videoRefs${index}" :id"videoRefs4_${index}" :src"item" controls:key"item" autoplay muted click"preventDefaultClick"…...

信息安全测评中心-国产化!

项目上使用产品&#xff0c;必须通过国家信息安全测评/ 信息技术产品安全测评&#xff0c;有这个需求的话&#xff0c;可以到CN信息安全测评中心官网中的--测评公告一栏中&#xff0c;找符合要求的产品。 测评公告展示的包括硬件产品、系统、服务资质等。 网址及路径&#xf…...

MySQL学习笔记九

第十一章使用数据处理函数 11.1函数 SQL支持函数来处理数据但是函数的可移植性没有SQL强。 11.2使用函数 11.2.1文本处理函数 输入&#xff1a; SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; 输出&#xff1a; 说明&#…...

DFS 蓝桥杯

最大数字 问题描述 给定一个正整数 NN 。你可以对 NN 的任意一位数字执行任意次以下 2 种操 作&#xff1a; 将该位数字加 1 。如果该位数字已经是 9 , 加 1 之后变成 0 。 将该位数字减 1 。如果该位数字已经是 0 , 减 1 之后变成 9 。 你现在总共可以执行 1 号操作不超过 A…...

动态规划dp专题-(上)

目录 dp理论知识&#x1f525;&#x1f525; &#x1f3af;一、线性DP &#xff08;1&#xff09;&#x1f680;斐波那契数 -入门级 &#xff08;2&#xff09;&#x1f680;898. 数字三角形-acwing ---入门级 &#xff08;3&#xff09;往期题目 ①选数异或&#xff1a;在…...

正则表达式(一)

一、模式&#xff08;Patterns&#xff09;和修饰符&#xff08;flags&#xff09; 通过正则表达式&#xff0c;我们可以在文本中进行搜索和替换操作&#xff0c;也可以和字符串方法结合使用。 正则表达式 正则表达式&#xff08;可叫作 “regexp”&#xff0c;或 “reg”&…...

需求变更导致成本超支,如何止损

需求变更导致成本超支时&#xff0c;可以通过加强需求管理、严格的变更控制流程、优化资源配置、实施敏捷开发、提高风险管理意识等方法有效止损。其中&#xff0c;加强需求管理是止损的核心措施之一。需求管理涉及需求明确化、需求跟踪和变更的管理&#xff0c;有效的需求管理…...

《数据分析与可视化》(清华)ch5-实训代码

小费数据集预处理——求思考题_有问必答-CSDN问答 以上代码在Jupyter Notebook中可以运行&#xff0c;但是在python中就会出如下问题&#xff1a; 这个错误表明在尝试计算均值填充缺失值时&#xff0c;数据中包含非数值类型的列&#xff08;如文本列&#xff09;&#xff0c;…...

E: The package APP needs to be reinstalled, but I can‘t find an archive for it.

要解决错误 “E: The package mytest needs to be reinstalled, but I can’t find an archive for it”&#xff0c;通常是因为系统中存在损坏的软件包记录或安装过程中断导致 /var/lib/dpkg/status 文件异常。以下是综合多篇搜索结果的解决方案&#xff1a; 解决步骤 备份关…...

若依startPage()详解

背景 startPage基于PageHelper来进行强化&#xff0c;在用户传入pagesize,pageNum等标准参数的时候不需要进行解析 步骤 1.通过ServletUtils工具类getRequestAttributes来获取当前线程的上下文信息 public static ServletRequestAttributes getRequestAttributes() {try {R…...

Oracle AQ

Oracle AQ&#xff08;Advanced Queuing&#xff09; 是 Oracle 数据库内置的一种消息队列&#xff08;Message Queue&#xff09;技术&#xff0c;用于在应用或系统之间实现异步通信、可靠的消息传递和事件驱动架构。它是 Oracle 数据库的核心功能之一&#xff0c;无需依赖外部…...

npm报错CERT_HAS_EXPIRED解决方案

npm报错解决方案 npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED方案1:尝试切换镜像 # 使用腾讯云镜像 npm config set registry https://mirrors.cloud.tencent.com/npm/# 或使用官方npm源&#xff08;科学上网&#xff09; npm config set registry http…...

pnpm 中 Next.js 模块无法找到问题解决

问题概述 项目在使用 pnpm 管理依赖时,出现了 “Cannot find module ‘next/link’ or its corresponding type declarations” 的错误。这是因为 pnpm 的软链接机制在某些情况下可能导致模块路径解析问题。 问题诊断 通过命令 pnpm list next 确认项目已安装 Next.js 15.2.…...