【RP2350】香瓜树莓派RP2350之低功耗
本文最后修改时间:2025年05月10日 01:57
一、本节简介
本节以树莓派pico2开发板为例,举例如何写一个低功耗驱动。
二、实验平台
1、硬件平台
1)树莓派pico2开发板
①树莓派pico2开发板(作为仿真器)
②micro usb数据线
2)电脑
3)香瓜RP2350目标板
2、软件平台
1)VS CODE
三、版权声明
1)作者:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务合作:897503845@qq.com
4)香瓜嵌入式之树莓派群:512598061
5)本文出处:原创连载资料《简单粗暴学树莓派》
6)完整开源资料下载地址(电脑端打开):
opengua.taobao.com
四、实验前提
1、在进行本文步骤前,请先阅读以下章节:
1)《简单粗暴学树莓派》的“第一章至第二章”章节。
2、在进行本文步骤前,请先实现以下章节:
1)《简单粗暴学树莓派》的《香瓜树莓派RP2350之搭建开发环境(windows)》
2)《简单粗暴学树莓派》的《香瓜树莓派RP2350之新建工程》
五、硬件原理
1、硬件连接
实际只接了4根线,3.3V、GND、CLK、DIO
注意: 给pico2供电时接VSYS,是因为pico2会再经过稳压到3.3v供电给pico2目标板的rp2350。而香瓜使用的板子仿真接口是直接供电给rp2350的,所以需要直连3.3v。
2、原理图
RP2350A芯片有设计bug,如果不外接下拉电阻,在低功耗时会漏电。所以我们在没有用到的引脚外部加了下拉电阻。
六、实验步骤
1、在VS CODE工程文件夹下,添加驱动GUA_DeepSleep.c(VS CODE会自动加载)
//********************************************************************** //name: GUA_DeepSleep.c //introduce: dormant模式的驱动(sleep模式是关电并需要clock唤醒,dormant模式则是切换晶振通过外部事件唤醒) //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.13 //********************************************************************** #include "hardware/powman.h" #include "hardware/clocks.h" #include "hardware/pll.h" #include "pico/sync.h" #include "hardware/regs/rosc.h" #include "hardware/structs/rosc.h" #include "hardware/regs/xosc.h" #include "hardware/xosc.h" #include "pico/runtime_init.h" #include <stdio.h> #include "pico/stdlib.h" #include "GUA_DeepSleep.h" #include "main.h" /*********************宏定义************************/ #define GUA_KEY_PIN 4 #define GUA_SC89890H_QON_PIN 5 #define GUA_HUSB363_PIN 9 #define GUA_SC89890H_INT_PIN 10 #define GUA_ALARMB_PIN 11 #define GUA_IIC_SDA_PIN 12 #define GUA_IIC_SCL_PIN 13 #define GUA_PCF8563_PIN 14 #define GUA_DCDC_PIN 19 #define LED1_BAT0_PIN 22 #define LED2_BAT25_PIN 23 #define LED3_BAT75_PIN 24 #define LED4_BAT100_PIN 25 /*********************内部函数************************/ static bool GUA_Dormant_Source_Valid(stGUA_Dormant_Source dormant_source); static void GUA_Rosc_Clear_Bad_Write(void); static bool GUA_Rosc_Write_Okay(void); static void GUA_Rosc_Write(io_rw_32 *addr, uint32_t value); static void GUA_Rosc_Disable(void); static void GUA_Rosc_Enable(void); static void GUA_Rosc_Set_Dormant(void); static void GUA_Sleep_Run_From_Dormant_Source(stGUA_Dormant_Source dormant_source); static void GUA_Sleep_PowerUp(void); static void GUA_Disable_Irq(void); static void GUA_DeepSleep_GPIO_Init(void); //********************************************************************** //name: GUA_Dormant_Source_Valid //introduce: 确认要切换的晶振频率是否合规 //parameter: dormant_source:要切换的时钟频率 //return: true or false //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static bool GUA_Dormant_Source_Valid(stGUA_Dormant_Source dormant_source) { switch(dormant_source) { //12MHZ case DORMANT_SOURCE_XOSC: return true; //6.6MHZ case DORMANT_SOURCE_ROSC: return true; //32kHZ case DORMANT_SOURCE_LPOSC: return true; //其他 default: return false; } } //********************************************************************** //name: GUA_Rosc_Clear_Bad_Write //introduce: 清除与重置寄存器坏写状态 //parameter: none //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static void GUA_Rosc_Clear_Bad_Write(void) { hw_clear_bits(&rosc_hw->status, ROSC_STATUS_BADWRITE_BITS); } //********************************************************************** //name: GUA_Rosc_Write_Okay //introduce: 判断rosc写入正常 //parameter: none //return: true or false //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static bool GUA_Rosc_Write_Okay(void) { return !(rosc_hw->status & ROSC_STATUS_BADWRITE_BITS); } //********************************************************************** //name: GUA_Rosc_Write //introduce: 写入寄存器数值 //parameter: addr:寄存器地址 // data:要写入寄存器的数值 //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static void GUA_Rosc_Write(io_rw_32 *addr, uint32_t value) { GUA_Rosc_Clear_Bad_Write(); assert(GUA_Rosc_Write_Okay()); *addr = value; assert(GUA_Rosc_Write_Okay()); }; //********************************************************************** //name: GUA_Rosc_Disable //introduce: 关闭rosc时钟 //parameter: none //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static void GUA_Rosc_Disable(void) { uint32_t tmp = rosc_hw->ctrl; tmp &= (~ROSC_CTRL_ENABLE_BITS); tmp |= (ROSC_CTRL_ENABLE_VALUE_DISABLE << ROSC_CTRL_ENABLE_LSB); GUA_Rosc_Write(&rosc_hw->ctrl, tmp); // Wait for stable to go away while(rosc_hw->status & ROSC_STATUS_STABLE_BITS); } //********************************************************************** //name: GUA_Rosc_Enable //introduce: 开启rosc时钟 //parameter: none //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static void GUA_Rosc_Enable(void) { //Re-enable the rosc GUA_Rosc_Write(&rosc_hw->ctrl, ROSC_CTRL_ENABLE_BITS); //Wait for it to become stable once restarted while (!(rosc_hw->status & ROSC_STATUS_STABLE_BITS)); } //********************************************************************** //name: GUA_Rosc_Set_Dormant //introduce: 进入rosc晶振下的dormant模式 //parameter: none //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static void GUA_Rosc_Set_Dormant(void) { //WARNING: This stops the rosc until woken up by an irq GUA_Rosc_Write(&rosc_hw->dormant, ROSC_DORMANT_VALUE_DORMANT); //Wait for it to become stable once woken up while(!(rosc_hw->status & ROSC_STATUS_STABLE_BITS)); } //********************************************************************** //name: GUA_Sleep_Run_From_Dormant_Source //introduce: 配置时钟源并进入dormant模式 //parameter: dormant_source:时钟源 //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static void GUA_Sleep_Run_From_Dormant_Source(stGUA_Dormant_Source dormant_source) { //判断晶振参数是否正确 assert(GUA_Dormant_Source_Valid(dormant_source)); uint32_t src_hz; uint32_t clk_ref_src; switch(dormant_source) { case DORMANT_SOURCE_XOSC: src_hz = XOSC_HZ; clk_ref_src = CLOCKS_CLK_REF_CTRL_SRC_VALUE_XOSC_CLKSRC; break; case DORMANT_SOURCE_ROSC: src_hz = 6500 * KHZ; // todo clk_ref_src = CLOCKS_CLK_REF_CTRL_SRC_VALUE_ROSC_CLKSRC_PH; break; case DORMANT_SOURCE_LPOSC: src_hz = 32 * KHZ; clk_ref_src = CLOCKS_CLK_REF_CTRL_SRC_VALUE_LPOSC_CLKSRC; break; default: hard_assert(false); } //CLK_REF = XOSC or ROSC or LCOSC clock_configure(clk_ref, clk_ref_src, 0, //No aux mux src_hz, src_hz); //CLK SYS = CLK_REF clock_configure(clk_sys, CLOCKS_CLK_SYS_CTRL_SRC_VALUE_CLK_REF, 0, //Using glitchless mux src_hz, src_hz); //关闭外设时钟 clock_stop(clk_adc); clock_stop(clk_usb); //关闭high-speed serial transmit (HSTX) clock_stop(clk_hstx); // CLK PERI = clk_sys. 外设时钟,使用系统时钟作为参考 clock_configure(clk_peri, 0, CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLK_SYS, src_hz, src_hz); //禁用PLL(相位锁定环) pll_deinit(pll_sys); pll_deinit(pll_usb);
//关闭没用的晶振 //XOSC if(dormant_source == DORMANT_SOURCE_XOSC) { GUA_Rosc_Disable(); } //ROSC or LPOSC else { xosc_disable(); } /* //进入晶振对应的dormant //XOSC if(dormant_source == DORMANT_SOURCE_XOSC) { xosc_dormant(); } //ROSC or LPOSC else { GUA_Rosc_Set_Dormant(); } */ //Reconfigure uart with new clocks //setup_default_uart(); } //********************************************************************** //name: GUA_Sleep_PowerUp //introduce: sleep mode和dormant mode通用的唤醒函数,恢复系统时钟和硬件的配置 //parameter: none //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** static void GUA_Sleep_PowerUp(void) { //启用ROSC GUA_Rosc_Enable(); //重置睡眠使能寄存器,目的是外设和硬件能正常使用 clocks_hw->sleep_en0 |= ~(0u); clocks_hw->sleep_en1 |= ~(0u); //初始化时钟 clocks_init(); //make powerman use xosc again uint64_t restore_ms = powman_timer_get_ms(); powman_timer_set_1khz_tick_source_xosc(); powman_timer_set_ms(restore_ms); //重新初始化串口通信 //setup_default_uart();
//关中断 GUA_Disable_Irq(); } //********************************************************************** //name: GUA_Disable_Irq //introduce: 关闭中断 //parameter: enabled:true or false //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.13 //********************************************************************** extern void GUA_gpio_callback(uint gpio, uint32_t events); //引用其他文件的中断处理函数 static void GUA_Disable_Irq(void) { //4 下降沿中断触发 暂时去除 gpio_set_irq_enabled_with_callback(GUA_KEY_PIN, GPIO_IRQ_EDGE_FALL, false, &GUA_gpio_callback); //9 下降沿中断触发 gpio_set_irq_enabled_with_callback(GUA_HUSB363_PIN, GPIO_IRQ_EDGE_FALL, false, &GUA_gpio_callback); //10 下降沿中断触发 gpio_set_irq_enabled_with_callback(GUA_SC89890H_INT_PIN, GPIO_IRQ_EDGE_FALL, false, &GUA_gpio_callback); //14 下降沿中断触发 RTC需要一直开着 //gpio_set_irq_enabled_with_callback(GUA_PCF8563_PIN, GPIO_IRQ_EDGE_FALL, enabled, &GUA_gpio_callback); } //********************************************************************** //name: GUA_DeepSleep_GPIO_Init //introduce: 设置唤醒中断引脚 //parameter: none //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.13 //********************************************************************** static void GUA_DeepSleep_GPIO_Init(void) { for(uint8_t io = 0; io < 30; io++) { //4 输入上拉 下降沿中断 if(io == GUA_KEY_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_pull_up(io);
//下降沿中断触发 gpio_set_irq_enabled_with_callback(io, GPIO_IRQ_EDGE_FALL, true, &GUA_gpio_callback); } //5 输入上拉 else if(io == GUA_SC89890H_QON_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_pull_up(io); } //9 输入上拉 下降沿中断 else if(io == GUA_HUSB363_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_pull_up(io);
//下降沿中断触发 gpio_set_irq_enabled_with_callback(io, GPIO_IRQ_EDGE_FALL, true, &GUA_gpio_callback); } //10 输入上拉 下降沿中断 else if(io == GUA_SC89890H_INT_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_pull_up(io);
//下降沿中断触发 gpio_set_irq_enabled_with_callback(io, GPIO_IRQ_EDGE_FALL, true, &GUA_gpio_callback); } //11 输入下拉,不能设置为输出,避免烧坏电量计 else if(io == GUA_ALARMB_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_pull_down(io); } //12 输入上拉 else if(io == GUA_IIC_SDA_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_pull_up(io); } //13 悬浮输入 else if (io == GUA_IIC_SCL_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_disable_pulls(io); } //14 输入上拉 下降沿中断 else if(io == GUA_PCF8563_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_pull_up(io);
//下降沿中断触发 gpio_set_irq_enabled_with_callback(io, GPIO_IRQ_EDGE_FALL, true, &GUA_gpio_callback); } //LED1~4 22~25 悬浮输出 else if((io >= LED1_BAT0_PIN) && (io <= LED4_BAT100_PIN)) { gpio_init(io); gpio_set_dir(io, GPIO_OUT); gpio_disable_pulls(io); } //19 悬浮输入,DCDC会被拉低 else if(io == GUA_DCDC_PIN) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_disable_pulls(io); } //悬浮输入 else if(io == 3 || io == 20 || io == 21) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_disable_pulls(io); } //下拉输入 else if(io == 1 || io == 2 || io == 6 || io == 7 || io == 12 ||io == 13 || io == 15 || io ==26 || io == 27 || io == 28 || io == 29 ) { gpio_set_dir(io, GPIO_IN); gpio_set_function(io, GPIO_FUNC_SIO); gpio_pull_down(io); } //其他悬浮输出(0、8、17、18) else { gpio_set_dir(io, GPIO_OUT); gpio_set_function(io, GPIO_FUNC_SIO); gpio_disable_pulls(io); } } } //********************************************************************** //name: GUA_DeepSleep //introduce: 休眠函数 //parameter: none //return: none //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.26 //********************************************************************** //add hardware_powman and hardware_regs (lib) in CMakeLists.txt void GUA_DeepSleep(void) { //等待串口TX缓冲区清空 uart_default_tx_wait_blocking(); //设置睡眠时钟并进入睡眠模式(Dormant只可以设置XOSC和ROSC,不可以设置为LP0SC,否则KEY会电平波动导致进中断) //必须在io中断之前,否则会导致其他io中断,但万用表看不出来波动,可能是有滤波导致电平波动小 GUA_Sleep_Run_From_Dormant_Source(DORMANT_SOURCE_ROSC); //IO配置 GUA_DeepSleep_GPIO_Init(); //确保系统在中断或定时器到期之前不会唤醒 while(gnGUA_Function == FUNC_GUA_SHUTDOWN_EVENT) { __wfi(); } //唤醒后重新启用时钟源和硬件 GUA_Sleep_PowerUp(); } |
2、在VS CODE工程文件夹下,添加驱动GUA_DeepSleep.h(VS CODE会自动加载)
//********************************************************************** //name: GUA_DeepSleep.h //introduce: 深度睡眠驱动 //author: opengua //email: 897503845@qq.com //QQ group: 香瓜嵌入式之树莓派群(512598061) //shop: opengua.taobao.com //changetime: 2025.03.13 //********************************************************************** #ifndef _GUA_DEEP_SLEEP_H_ #define _GUA_DEEP_SLEEP_H_ /*********************外部变量************************/ typedef enum { DORMANT_SOURCE_NONE, DORMANT_SOURCE_XOSC, DORMANT_SOURCE_ROSC, DORMANT_SOURCE_LPOSC, // rp2350 only } stGUA_Dormant_Source; /*********************外部函数声明************************/ extern void GUA_DeepSleep(void); #endif |
3、添加对应驱动文件名称
4、在应用层中调用
1)添加驱动头文件(main.c中)
#include "GUA_DeepSleep.h" |
2)添加测试代码(main.c的main函数中)
//低功耗模式 case FUNC_GUA_SHUTDOWN_EVENT: { //led跑马灯 //GUA_BatteryLed_OnOff(GUA_BATTERY_LED_NEWS_TICKER);
//进入睡眠模式 GUA_DeepSleep(); //初始化 GUA_Init(); break; } |
有报错注意增删减改
七、实验结果
1、工作电流(香瓜实际很多外设): 23.9mA
2、低功耗电流: 7.54mA
因此实验成功。
相关文章:
【RP2350】香瓜树莓派RP2350之低功耗
本文最后修改时间:2025年05月10日 01:57 一、本节简介 本节以树莓派pico2开发板为例,举例如何写一个低功耗驱动。 二、实验平台 1、硬件平台 1)树莓派pico2开发板 ①树莓派pico2开发板(作为仿真器) ②micro usb数…...
招行数字金融挑战赛数据赛道赛题一
赛题描述:根据提供的用户行为数据,选手需要分析用户行为特征与广告内容的匹配关系,准确预测用户对测试集广告的点击情况,通过AUC计算得分。 得分0.6120,排名60。 尝试了很多模型都没有能够提升效果,好奇大…...
仿真生成激光干涉包裹相位数据-用于深度学习训练!
该MATLAB/Octave代码实现了论文[1]中提出的相位提取算法,用于从灰度条纹图案中提取包裹相位图(相位值在-π到+π之间)。代码首先生成模拟的条纹图案,包含背景光、调制光和相位分布,并加入高斯噪声。随后,通过N步相移算法估计背景光和调制光,并计算包裹相位。结果显示包括…...
命令行解释器中shell、bash和zsh的区别
命令行解释器(Command Line Interpreter)是一个程序,它的主要作用是接收用户输入的命令,并执行相应的操作。它充当了用户与操作系统内核之间的桥梁。 一、什么是 Shell? Shell 是一个通用术语,指的是 命令…...
SQL 数据库监控:SQL语句监控工具与实践案例
SQL 数据库监控:SQL语句监控工具与实践案例 SQL语句监控的主要方法 SQL监控主要通过以下几种方式实现: 数据库内置监控功能:大多数数据库系统提供内置的SQL监控工具数据库性能视图/系统表:通过查询特定的系统视图获取SQL执行信…...
招行数字金融挑战赛数据分析赛带赛题二
赛题描述:根据提供的脱敏资讯新闻数据,选手需要对提供的训练集进行特征工程,构建资讯分类模型,对与测试集进行准确的新闻分类。 最终得分:0.8120。十二点关榜没看到排名,估算100? 训练集很小&am…...
llama.cpp初识
Llama.cpp:赋能本地大语言模型推理的核心引擎及其应用场景 引言:Llama.cpp 是什么? 大型语言模型 (LLM) 的兴起正在深刻改变人机交互和信息处理的方式。然而,这些强大的模型通常需要巨大的计算资源,使得它们在云端之…...
【EBNF】EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解
EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解 一、什么是 EBNF? Extended Backus-Naur Form (EBNF)是一种形式化的语法,用于指定编程语言或其他形式化语言的结构。它是Backus-Naur形式(BNF)的扩展,最初…...
Go语言运算符详解
文章目录 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符运算符优先级注意事项 Go语言提供了与其他语言类似的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。这些运算符即可满足基本的运算需求。 1. 算…...
MySQL用户管理
目录 一、用户用户信息创建用户删除用户从远端登录修改用户密码 二、数据库的权限给用户授权回收权限 与Linux操作系统类似,MySQL中也有超级用户和普通用户之分。,如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某一个表&#…...
视频编解码学习三之显示器续
一、现在主流的显示器是LCD显示器吗? 是的,现在主流的显示器仍然是 LCD(液晶显示器,Liquid Crystal Display),但它已经细分为多种技术类型,并和其他显示技术(如OLED)形成…...
VSCode1.101.0便携版|中英文|编辑器|安装教程
软件介绍 Visual Studio Code是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,设计得很人性化,旨在为所有开发者提供一款专注于代码本身的免费的编辑器。 软件安装 1、 下载安装包…...
Scala 中累加器的创建与使用格式详解
1. 内置累加器的创建与使用格式 1.1 创建内置累加器 // 通过 SparkContext 创建 val acc sc.longAccumulator("累加器名称") // Long 类型(默认初始值 0) val accDouble sc.doubleAccumulator("累加器名称") // Double 类型&a…...
【DNDC模型】双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的应用
由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到,要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时,提到要把减污降碳协同增效作为促…...
深入剖析缓存与数据库一致性:Java技术视角下的解决方案与实践
一、缓存与数据库一致性问题根源 读写分离的架构矛盾 缓存作为数据库的“副本”,天然存在数据同步延迟。 高频读写场景下,缓存与数据库的更新顺序、失败重试等操作易引发不一致。 经典问题场景 场景1:先更新数据库,再删除缓存。…...
Anaconda环境中conda与pip命令的区别
文章目录 conda与pip的基本区别在Anaconda环境中的实际差异安装包环境管理依赖解决示例最佳实践建议 常见问题解答 conda与pip的基本区别 包来源与生态系统 conda:从Anaconda默认仓库或conda-forge等渠道获取包 不仅管理Python包,还能管理非Python依赖&…...
使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门
一、FastAPI概述 1.1 什么是FastAPI FastAPI is a modern, high-performance Python web framework designed for building APIs. It’s rapidly gaining popularity due to its ease of use, speed, and powerful features. Built on top of Starlette, FastAPI leverages a…...
每日c/c++题 备战蓝桥杯(P1002 [NOIP 2002 普及组] 过河卒)
洛谷P1002 [NOIP 2002 普及组] 过河卒 题解 题目描述 过河卒是一道经典的动态规划题目。题目大意是:一个卒子从棋盘左上角(0,0)出发,要走到右下角(n,m),棋盘上有一个马在(x,y)位置,卒子不能经过马所在位置及其周围8个位置。求卒…...
kubectl系列(十二):查询pod的resource 配置
在 Kubernetes 中,可以通过 kubectl 命令快速查询 Pod 的资源请求(requests)和限制(limits)配置。以下是多种方法实现这一目标: 1. 查看 Pod 的资源请求和限制(基础版) 使用 kubec…...
前端面试2
1. 面试准备 1. 建立自己的知识体系 思维导图ProcessOn框架Vue elementUI自查 https://zh.javascript.info/ 借鉴 https://juejin.cn/post/6844904103504527374http://conardli.top/blog/article/https://github.com/mqyqingfeng/Bloghttp://47.98.159.95/my_blog/#html 2.技能…...
使用 Java 反射动态加载和操作类
Java 的反射机制(Reflection)是 Java 语言的一大特色,它允许程序在运行时检查、加载和操作类、方法、字段等元信息。通过 java.lang.Class 和 java.lang.reflect 包,开发者可以动态加载类、创建实例、调用方法,甚至在运行时构造新类。反射是 Java 灵活性的核心,广泛应用于…...
基于Dockers的Bitwarden的私有本地部署
基于Dockers的Bitwarden的私有本地部署 文章目录 基于Dockers的Bitwarden的私有本地部署 本文首发地址 https://h89.cn/archives/355.html bitwarden 默认连接的是国外服务器 https://bitwarden.com/ ,连接不是很稳定,也没有安全感,所以我选择…...
spark-Schema 定义字段强类型和弱类型
在数据处理和存储中,Schema(模式)定义了数据的结构和字段属性,其中字段的强类型和弱类型是重要的概念,直接影响数据的验证、存储和处理方式。以下是详细解释: 1. 强类型(Strongly Typed&#x…...
【第35节 数据库设计】
本章目录: 一、节概述二、知识详解1. 数据库设计的基本步骤2. 用户需求分析3. 概念结构设计(E-R建模)4. 逻辑结构设计5. 物理结构设计6. 数据库实施7. 数据库运行维护8. 商业智能(BI)与数据仓库数据仓库的特点: 9. OLT…...
C++基本知识 —— 缺省参数·函数重载·引用
C基本知识 —— 缺省参数函数重载引用 1. 缺省参数2. 函数重载3. 引用3.1 引用的基础知识3.2 引用的作用3.3 const 引用3.4 指针与引用的关系 1. 缺省参数 什么是缺省参数?缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数的时候,如…...
大数据基础——Ubuntu 安装
文章目录 Ubuntu 安装一、配置电脑二、安装系统 Ubuntu 安装 一、配置电脑 1、进入VMware 2、选择配置类型 3、选择硬件兼容性版本 4、当前虚拟机的操作系统 选择“稍后安装操作系统”(修改) 5、选择虚拟机将来需要安装的系统 选中“Linux”和选择…...
英伟达微调qwen2.5-32B模型,开源推理模型:OpenCodeReasoning-Nemotron-32B
一、模型概述 OpenCodeReasoning-Nemotron-32B 是一个大型语言模型,基于 Qwen2.5-32B-Instruct 开发,专为代码生成推理任务进行了后续训练,支持 32,768 个标记的上下文长度,适用于商业和非商业用途。 二、性能表现 在 LiveCode…...
苍穹外卖-创建阿里云oss工具包
添加配置信息: sky:alioss:endpoint: ***access-key-id: ***access-key-secret: ***bucket-name: *** 把配置的内容转换成对象: Component ConfigurationProperties(prefix "sky.alioss") Data public class AliOssProperties {private St…...
代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历
589.N叉数的前序遍历: 状态:已做出 思路: N叉树的前序遍历和二叉树很像,我这里使用栈来实现。首先把根结点入栈,然后删除栈顶节点后把栈顶节点的所有子树都插入到栈,这里需要注意的是插入的方式是从最后一…...
鸿蒙跨平台开发教程之Uniapp布局基础
前两天的文章内容对uniapp开发鸿蒙应用做了一些详细的介绍,包括配置开发环境和项目结构目录解读,今天我们正式开始写代码。 入门新的开发语言往往从Hello World开始,Uniapp的初始化项目中已经写好了一个简单的demo,这里就不再赘述…...
面试中常问的设计模式及其简洁定义
🎯 一、面试中常问的设计模式及其简洁定义 模式名常被问到解释(简洁)单例模式✅ 高频保证一个类只有一个实例,并提供全局访问点。工厂模式✅ 高频创建对象的接口由子类决定,屏蔽了对象创建逻辑。抽象工厂模式✅提供多…...
关于 js:6. 网络与加密模块
一、AJAX AJAX(Asynchronous JavaScript And XML) 异步 JavaScript 与 XML(现在多为 JSON) 它允许网页在不重新加载整个页面的情况下,从服务器请求数据并更新页面内容。 主要用途: 提交表单时无需刷新页…...
量化交易系统开发经验分享--回测框架调研
一、前言 这段时间在集中做一个量化交易系统的开发任务,目前系统的MVP已经完成开发,后续会整理一些经验与成果和大家交流。刚好有一个前期做策略回测这块的调研,下面把调研的成果做一个整理总结先给大家分享一下,请批评指正。 在介…...
[学习]RTKLib详解:convkml.c、convrnx.c与geoid.c
本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…...
【ajax基础】
提示:文章为 学习过程中的记录实践笔记。有问题欢迎指正。 文章目录 前言一、实现步骤二、完整示例三、封装总结 前言 AJAX 不是编程语言,是一种从网页访问web服务器的技术。 可以实现不刷新页面更新网页 在页面加载后从服务器请求/获取数据 在后台向服…...
Nodejs核心机制
文章目录 前言 前言 结合 Node.js 的核心机制进行说明: 解释事件循环的各个阶段。 答案 Node.js 事件循环分为 6 个阶段,按顺序执行: Timers:执行 setTimeout 和 setInterval 的回调。 Pending I/O Callbacks:处理系…...
Kubernetes 集群部署应用
部署 Nginx 应用 命令行的方式 1. 创建 deployment 控制器的 pod # --imagenginx:这个会从 docker.io 中拉取,这个网站拉不下来 # kubectl create deployment mynginx --imagenginx# 使用国内镜像源拉取 kubectl create deployment mynginx --imaged…...
【Linux篇】高并发编程终极指南:线程池优化、单例模式陷阱与死锁避坑实战
深入理解线程池设计与应用:高效并发编程的秘密 一. 线程池1.1 什么是线程池1.2 线程池的优点1.3 线程池的应用场景 二. 线程池设计三. 单例模式3.1 什么是单例模式3.2 单例模式特点3.3 实现单例模式方法3.3.1 饿汉实现⽅式3.3.2 懒汉实现⽅式 四. 线程安全和重入问题…...
学习和测试WebApi项目限制客户端ip访问接口(基于中间件)
WebApi项目需要限制仅允许有限的客户端访问接口,百度相关内容,网上很多介绍WebApi接口IP限流的文章,稍微调整就能用于限制IP访问,微软官网中也有文章介绍客户端 IP 安全列表(参考文献1),可以通过…...
闲鱼智能客服机器人-实现闲鱼平台7×24小时自动化值守
专为闲鱼平台打造的AI值守解决方案,实现闲鱼平台724小时自动化值守,支持多专家协同决策、智能议价和上下文感知对话。 🌟 核心特性 智能对话引擎 功能模块技术实现关键特性上下文感知会话历史存储轻量级对话记忆管理,完整对话历…...
Apache Ranger 2.2.0 编译
安装包下载: https://ranger.apache.org/download.html 编译环境: Linux centos7jdk 1.8maven 3.9.6gitpython 3 git 安装 yum -y install gitpython3安装 yum install epel-release -y yum install python3 python3-devel -y批量安装开发工具套件 …...
实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API
实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API 理论千遍,不如动手一遍!在前面几篇文章中,我们了解了 Serverless 的概念、FaaS 的核心原理以及 BaaS 的重要作用。现在,是时候把这些知识运用起来,亲手构建一个简单但完整的 Serverless 应用了。 …...
鱼眼相机生成-BEV鸟瞰图-入门教程
目录 原理介绍 1. IPM与BEV转换的核心原理 2. 尺度信息的来源 3. 尺度信息的准确性限制 4. 实际应用中的处理方法 代码实现: 360 BEV环视拼接算法 一、核心算法流程 三、实际应用挑战与优化 四、开源实现参考 原理介绍 1. IPM与BEV转换的核心…...
设计模式简述(十八)享元模式
享元模式 描述基本组件使用 描述 当内存中存在大量类似的对象时,可以考虑使用享元模式减少整体内存占用。 可以将相同的部分和不同的部分进行拆分,以达到多个对象共享相同部分内存的目的。 基本组件 通常享元对象通过共享的属性映射一个享元对象。 公…...
Google语法整理
以下是从整理出的 Google 语法: site:指定域名,如 “apache site:bbs.xuegod.cn”,可查询网站的收录情况 。 inurl:限定在 url 中搜索,如 “inurl:qq.txt”,可搜索 url 中包含特定内容的页面&a…...
【每日一题 | 2025年5.5 ~ 5.11】搜索相关题
个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【5.5】P3717 [AHOI2017初中组] cover2. 【5.6】P1897 电梯里的尴尬3. 【5.7】P2689 东南西北4. 【5.8】P1145 约瑟夫5. 【5.9】P1088 [NOIP 2004 普及组] 火星人6. 【5.10】P1164 小A点菜7. 【5.11】P101…...
【MySQL】页结构详解:页的大小、分类、头尾信息、数据行、查询、记录及数据页的完整结构
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
C++ stl中的priority_queue的相关函数用法
文章目录 priority_queuepriority_queue定义方式priority_queue相关函数 priority_queue priority_queue 称为 优先级队列,默认使用vector作为底层存储数据的容器,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用…...
软件架构师知识点总结
一、综合知识 软件架构师综合知识总结-CSDN博客 二、案例 软件架构师案例知识点总结-CSDN博客 三、论文 1、题目类型:八大架构;系统开发(开发方法/模型、需求分析、测试等);系统可靠性、安全性、容错技术等&#…...
MySQL数据库常见面试题之三大范式
写在前面 此文章大部分不会引用最原始的概念,采用说人话的方式。 面试题:三大范式是什么?目的是什么?必须遵循吗? 假设有一张表(学号,姓名,课程,老师) 是…...