IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 LiteOS Studio + GCC + JLink
文章目录
- 概述
- LiteOS Studio
- 不推荐?
- 安装和使用手册呢?
- HCIP实验的源码呢?
- 软件和依赖安装
- 软件下载
- 软件安装
- 插件安装
- 依赖工具-方案2
- 依赖工具-方案1
- 工程配置
- 打开或新建工程
- 板卡配置
- 组件配置
- 编译器配置-gcc工具链
- 编译器配置-Makefile脚本
- 其他配置
- 编译完成
- 编译和烧录
- 可执行文件
- STLink转JLink
- 烧录器配置
- 烧录步骤
- 验证和调试
- 程序运行
- 若无打印输出
- 源代码分析
- elf 文件
- 调试器配置
- 单步调试
- 再见
概述
本文详细介绍了华为云物联网专用集成开发环境 LiteOS Studio 的搭建过程和使用方法。可基于此环境完成HCIP-IOT实验。
@HISTORY
为了更好的完成基于小熊派开发板的HCIP实验,我的大多实践并没选用 LiteOS Studio IDE,而是用小熊派社区推荐的 VSCode + Gitbash+GCC 工具模式,也尝试使用过 VSCode+IoT Link 插件模式。在不少地方提到,若聚焦华为硬件与云服务,LiteOS Studio 会更高效,经不住诱导,且HCIP实验指导手册中使用的是 Studio 环境,故再次尝试安装并使用 LiteOS Studio 集成开发环境。
怎么说呢,挺烦的。在开始的差不多一个月内,我始终没有找到 Studio 的安装和使用手册,无论是GitEE、GitHub、华为社区,相关链接都是失效的。在没有详细指导手册的情况下,我只能凭借对类似开发环境的认知和依赖包等,硬强的搭建起了IoT Studio环境。但整个过程相当的不爽,耗费了很多时间,是浪费,这个过程我也简单有所记录。
直到后来,还是意外地发现,虽然网络资料中的各种连接都是失效的,但 LiteOS Studio 的详细的安装说明、使用说明,依然还在,在Git上就有,只是我没有留意到。有了官方保姆级的说明书后,一切就变得顺当了许多,算是豁然开朗吧。
LiteOS Studio
我在这套开发环境的搭建和测试上,耗费了不少心血,推荐还是不推荐呢?
不推荐?
2个月前,我并不推荐使用该IDE环境,主要是因为它多年前就不再被维护了。后来我找到了详细说明书,情况就不一样了!
HUAWEI LiteOS Studio是以Visual Studio Code的社区开源代码为基础,根据C编程语言特点、LiteOS嵌入式系统软件的业务场景,定制开发的一款轻量级集成开发环境解决方案。它提供了代码编辑、编译、烧录、调试等能力。
相比于原始的 VSCode 工具,LiteOS Studio 专为华为 LiteOS 设计,面向物联网嵌入式开发。一站式集成内置组件配置、烧录、调试工具,提供系统级跟踪调试(如内存监控、任务栈分析)。深度集成华为云 IoT 平台(不需要额外的插件扩展云服务),包含完整工具链和 SDK。LiteOS Studio采用混合开源模式,其核心框架和基础工具链开放源码(BSD-3协议),但涉及华为芯片深度集成和商业服务的模块仍为闭源。开发者可根据需求选择开源版本或申请商业授权。
不光不建议使用,开始我是拒绝甚至厌恶此开发环境的。20250415,由于HCIP实验3使用的是该环境,本着按部就班的原则,生怕错过什么,于是重启安装并使用此环境。到最后,感觉还行,至少这个过程也促使我思考并Get到了些知识点。
安装和使用手册呢?
在202503期间,第一次尝试中,光是如何下载该工具,就别扭了一番。
在华为云搜索窗口搜索 #LiteOS Studio#,可以在华为云在线文档资源中找到 安装LiteOS Studio、LiteOS Studio安装指南,GitEE Liteos_studio、开发者联盟官网 等字样的连接,可惜它们全是失效状态。这么不走心,所以就不想用它了。
当初我还总结了如下不想使用该环境的几点原因:
1、官方文档给出的连接多是失效的,无论是指向github还是gitee的。
2、软件已经停更多年,其依赖的VSCode版本也相当的陈旧。上述GitEE项目虽然还在,但是早已没有人维护,项目相关的安装文档、使用文档等全部缺失(在一些老旧的网络文章中,是提及曾经有这些文档的),即使有连接但也都打不开,ISSUE也有人提问,始终无人应答。
3、担心会和新版本的VSCode存在安装冲突不!实践证明,这个现象没有出现。
4、在插件安装界面,不能联网。实践表明,这可能是工具开发者有意为之,直接从代码层级上关闭了软件的联网功能。因为,即使我开着软件自动更新配置,也不会弹更新提示。
时间到了5月4号,我在查看某篇文章的参考链接时,才意外访问到了LiteOS Studio 使用手册,它就在已经被我访问了多次的,GittEE/开源项目 > 开发工具/Huawei LiteOS/LiteOS_Studio项目之下。该项目docs目录下,包含studio的介绍、安装、配置等,非常详细。也就是说,LiteOS Studio 使用手册还在,只是项目主页的连接不对了。
我在 GitEE开源项目 > 开发工具/Huawei LiteOS/LiteOS_Studio 上提交了修改,不过该项目没有人维护,可能不会通过申请。所以我Fork了该项目。可参见 qugx0528 HUAWEI LiteOS Studio 简介,该页面中的跳转链接,我已修改提交,
HCIP实验的源码呢?
参照HCIP-IOT实验手册,应该使用名为 LiteOS_Lab_HCIP 的源码,配置LiteOS Studio环境的使用和学习。
可惜,我在 GitHub 和 GitEE 上都搜不到LiteOS_Lab_HCIP源码项目,只能找到 LiteOS_Lab 项目,但没有实验手册中的案例。在华为云论坛也没搞到下载链接。好在,实验手册中的案例,我是见过的,在小熊派社区提供的资料中。BearPi-IoT_Std开发板案例代码下载,GitEE地址,BearPi-IoT_Std_LiteOS 源码,GitEE下载地址。HCIP实验手册提及的helloword,在BearPi-IoT_Std_LiteOS项目下,
顺嘴也说一些 LiteOS_Lab 项目,其本质上是开发实验框架与工具链。它是围绕LiteOS内核构建的开发环境,提供针对具体硬件平台(如STM32系列)的示例代码、编译工具链和配置工具,帮助开发者快速上手LiteOS开发。实际上,这里头没有看到小熊派的案例程序,也没看见工具链,但却有许多非常有用的文档,如 IoT SDK 架构,各种开发指南,LiteOS使用说明等。
后续在华为云社区也找到了下载链接,已合并上传到CSDN
https://bbs.huaweicloud.com/forum/thread-68066-1-1.html
软件和依赖安装
本章节从简介绍软件和依赖包的安装,详情请参见 HUAWEI LiteOS Studio安装。
软件下载
从 Huawei LiteOS/LiteOS_Studio 或 LiteOS Studio 下载发行版。或从CSDN资源下载。
202503 来看,项目最后发行版 HUAWEI-LiteOS-Studio V1.45.9 Beta 更新于4年前的2021年8月4号。GitHub的访问由于各种原因不太稳定,可通过 如下地址 也能访问到LiteOS Studio项目,并没有任何软件release发布版,只有源码,最后更新时间6年前,同样已停更。
软件安装
IDE主体安装过程很简单,顺着走就行,
插件安装
如上,相关插件也被自动安装了。插件市场无法联网不能使用,你可从本地安装。以中文包为例,简单唠唠。
首先参考 HUAWEI LiteOS Studio安装 中提到的 扩展自动下载程序脚本 得到一个下载中文语言包扩展的地址,克隆到本地目录,并按照VSCODE离线插件安装方式操作即可。
参考使用说明书,通过 Configure Display Language 切换为中文模式。
依赖工具-方案2
我先尝试的是下一节的方案1,那个时候,我还没有发现正规的LiteOS Studio安装说明书,因此借用了小熊派物联网网开发工具集合包。HUAWEI LiteOS Studio安装 文档中提到,HUAWEI LiteOS Studio不提供常用工具、常用扩展的预置,需要用户自行下载,如用户本地已安装,可忽略此步骤。文档中提到的工具和扩展包含,
上述工具中,除了JLink仿真器软件外,在 小熊派 developTools.zip 工具集下都是存在的。下文,烧录配置章节,会进一步讲解如何将ST-LINK刷成J-LINK,并基于JLINK在LiteOS Studio中完成烧录和调试。
依赖工具-方案1
在写此文前,我已经完成了#<IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 VSCode + GitBash + GCC工具>#,文中环境搭建过程中使用了小熊派社区下载的构建和编译工具链集合。下载 developTools.zip ,将安装包解压到任意目录,运行 developTools.exe,按提示安装。
后文在工程配置阶段,会用到上述目录下工具,不要找不到。
工程配置
在该实验中,配置步骤是最关键和最复杂的。
点击如上红框标记处的设置按钮,进入工程设置主界面。本章节主要讲述板卡配置和编译配置。后续章节将讲述烧录配置和调试过程。
打开或新建工程
如下测试过程我是打开的bearpi-iot_std_liteos-master根文件夹。这里还有个坑让我比较蒙圈,有一次我打开的是 bearpi-iot_std_liteos-master\targets\STM32L431_BearPi 目录,重新配置构建器、编译器等,竟然无法执行编译过程,编译就卡在那里,也没有任何的报错或告警。
下文的测试过程是基于最简单的helloworld进行的,
bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Demos\hello_world_demo
板卡配置
选取当前工程对应的开发板,主芯片型号,
@Note,改变板卡配置,最导致编译器、调试器等配置都恢复到默认配置。
组件配置
早期的时候,没有说明书,我不知道这是个什么。当我直接打开小熊派helloworld程序,
内容是空的,我更纳闷啦。后来采用新建工程,component是有内容的,
这里我没大搞明白,但也没有影响到我,实验手册上也没提到。再后来从官方使用说明说中了解到,
如需对LiteOS开放可配置的组件与属性进行使能,而不是仅使用默认的配置,用户可以点击工程配置界面上的组件配置,在左侧的选择组件中点击想要使能或修改的组件,在右侧的组件属性栏勾选需要使能的组件,或更改组件属性值。
编译器配置-gcc工具链
编译器路径,
…\developTools\GNU Tools Arm Embedded\7 2018-q2-update\bin
Make构建器路径,
…\developTools\GNU MCU Eclipse\Build Tools\2.11-20180428-1604\bin\make.exe
Makefile 脚本路径, 上图中显示的是基于VSCode打开目录的相对路径,
…\bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Makefile
关于Makefile脚本的配置,我是耗费了些时间的,它指的就是Makefile构建文件所在的路径。
编译器配置-Makefile脚本
刚开始,由于没有直接下载到HCIP-IoT实验手册中的LiteOS_Lab_HCIP源码,
而只能使用小熊派 bearpi-iot_std_liteos-master\targets\STM32L431_BearPi 源码,
使得配置过程复杂了那么丢丢。你可能需要对Makefile构建系统有基本的了解,能使用 menuconfig 和 genconfig 系统构建工具链中的配置管理工具。关于 menuconfig 和 genconfig 工具与 Makefile之间的互动关系,请参阅 #<IDE/用构建工具 menuconfig和genconfig 驱动Makefile构建流程,基于STM32L431_BearPi源码构建过程的分析>#,这里不再赘述。
我们简化描述配置过程,基础目录 …bearpi-iot_std_liteos-master\targets\STM32L431_BearPi
0、上述根目录下的 Makefile 文件 include 包含使用 .config 和 project.mk 文件,驱动Makefile下的构建流程。
1、将 Demos\hello_world_demo 目录下的defaults.sdkconfig 文件内容,拷贝覆盖到 STM32L431_BearPi目录下的 .config 文件中。
2、随便打开个终端窗口,执行 genconfig.exe,以更新生成 iot_config.h 头文件。
3、上述配置后,就可以放心使用Makefile文件啦。
其他配置
在示例程序中找不到 osal.h 头文件,
…\bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Demos\hello_world_demo.vscode\c_cpp_properties.json
{"configurations": [..."compilerPath": "..GNU Tools Arm Embedded\\7 2018-q2-update\\bin\\arm-none-eabi-gcc.exe","cStandard": "c11","cppStandard": "c++11","intelliSenseMode": "gcc-x64"}],"version": 4
编译完成
按照前文配置,即使不配置烧录和调试卡,编译helloword示例程序,
编译和烧录
上一节的工作,已完成编译过程。接下来我们看看编译结果以及如何下载程序。
可执行文件
编译完成后会生成3种类型的同名文件,
上述三类文件的一个基础对比如下,
文件生成关系
LiteOS通过 Makefile 调用GCC生成 .elf 文件(含完整调试信息)。随后使用 objcopy 工具转换 .elf 为 .bin 或 .hex 文件。
转换逻辑:
.elf → .bin:去除符号表和调试信息,保留纯二进制代码。
.elf → .hex:将二进制代码转换为Intel HEX标准格式,添加地址和校验信息。
逆向不可行:.bin/.hex 无法还原为完整 .elf,因调试信息已丢失
STLink转JLink
为什么多出来这么个步骤呢?在LiteOS Studio烧录配置中没有ST-Link选项。
参考 STM32工程示例/ST-Link仿真器单步调测,章节中的描述,对于板载ST-Link仿真器的STM32开发板,如STM23L431RC、STM32F769NI,为了更加稳定的调测体验,建议刷成JLInk进行调测。在开始之前,需要先确保已安装ST-LINK USB Drivers和J-Link软件。
参见 安装JLink仿真器软件,访问Jlink官网, 选择J-Link Software and Documentation Pack后再选择J-Link Software and Documentation pack for Windows下载JLink软件,如我们经常使用的6.70e版本。Windows版本,针对传统x86/x64架构的Windows系统设计,适用于Intel/AMD平台的PC或工作站。Windows ARM版本,专门为ARM64架构的Windows设备(如Surface Pro X、树莓派Windows IoT版)开发,适配基于ARM的处理器。旧版本一般只有32bit,也可在64bitWin10可靠运行。
上述驱动选择默认安装即可,对于驱动,一般习惯保持默认安装在C盘中。
使用 JLink官网提供的STLink_Reflash工具 ,
第一次尝试失败了,通过deepseek查询,可能是供电不足导致的。我将开发板的USB从集线器上拔下来,直接接到电脑的USB口上,重新执行<1> 固件转换操作,还真成功了。
后来我试图将外置ST-LINK刷成J-LINK失败,文档中提到的是板载的STLink,外置ST-LINK可能就是不可以。
烧录器配置
ST-Link刷成Jlink后,按照上图进行配置。烧录器目录选择JLink驱动的安装目录(不是bin目录哈)。烧录文件可以使用.bin或.hex类型,就是前文提到的编译生成的执行文件。
烧录步骤
首次执行烧录操作,有如下警示,
烧录完成后,显示,
验证和调试
程序运行
以下是程序烧录后的运行结果(非调试状态)(烧录后记得按复位键重启板子),
对打印过程的补充说明,
printf依赖的底层函数,实现在 STM32L431_BearPi\Src\uart_debug.c
若无打印输出
烧录成功后,如果没有信息输出,首先确认AT模式开关是否在MCU侧。如下做简单原因描述,详情参见开发板原理图。
将拨码开关拨至PC侧,通信模组(如NB-IoT、WiFi模块)的串口直接与PC端的USB虚拟串口连接,绕过主控MCU。此时MCU处于断电或空闲状态,仅通信模组工作。
将拨码开关拨至MCU侧,通信模组与主控MCU(STM32L431)的串口(如LPUART1)直连。MCU通过串口发送AT指令控制通信模组,实现数据采集、协议封装及云端交互。如调用HAL_UART_Transmit发送AT指令。
源代码分析
bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Src\main.c
int main(void) {UINT32 uwRet = LOS_OK;HardWare_Init();uwRet = LOS_KernelInit();if (uwRet != LOS_OK) {return LOS_NOK;}extern void shell_uart_init(int baud);shell_uart_init(115200);link_test(); //PROGRESS-TAG-1(void)LOS_Start();return 0;
}static int link_test() {int ret = -1;UINT32 uwRet = LOS_OK;UINT32 handle;TSK_INIT_PARAM_S task_init_param;memset (&task_init_param, 0, sizeof (TSK_INIT_PARAM_S));task_init_param.uwArg = (unsigned int)NULL;task_init_param.usTaskPrio = 2;task_init_param.pcName =(char *) "link_main";task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)link_main; //PROGRESS-TAG-2task_init_param.uwStackSize = 0x1000;uwRet = LOS_TaskCreate(&handle, &task_init_param);if(LOS_OK == uwRet){ret = 0;}return ret;
}
bearpi-iot_std_liteos-master\iot_link\link_main.c
int link_main(void *args) {...#ifdef CONFIG_LINKDEMO_ENABLEextern int standard_app_demo_main(void);(void) standard_app_demo_main(); //PROGRESS-TAG-3
#endif
}
bearpi-iot_std_liteos-master\targets\STM32L431_BearPi\Demos\hello_world_demo\hello_world_demo.c
static int app_hello_world_entry() {while (1) {printf("Hello World! This is BearPi!\r\n");osal_task_sleep(4*1000);}
}//PROGRESS-TAG-4
int standard_app_demo_main() {osal_task_create("helloworld",app_hello_world_entry,NULL,0x400,NULL,2);return 0;
}
elf 文件
Huawei_LiteOS.elf 是华为 LiteOS 操作系统在编译过程中生成的一种可执行文件格式,主要用于调试、仿真和程序分析。通过 objcopy 工具可将 .elf 转换为 .bin 或 .hex,烧录至硬件运行。
该文件遵循 ELF(Executable and Linkable Format) 标准,其特点包括:
复合结构:不仅包含二进制机器码,还记录了程序的内存布局、符号表、调试信息等元数据。
内存地址映射:通过程序头表指定代码段、数据段的加载地址,适应嵌入式系统的内存管理需求。
调试支持:包含源代码与汇编指令的对应关系,支持断点设置、变量监视等调试操。
调试器配置
调试器配置如上图,注意以下几点:
1、GDB目录与编译器目录一致。
如 d:\Program Files\IoT_developTools\GNU Tools Arm Embedded\7 2018-q2-update\bin
该目录含arm-none-eabi-gcc/gdb 等工具。
2、执行文件路径,选择工程编译后生成的*.elf文件。
3、调试配置类型,选择复位调试。
单步调试
查看变量值,监视表达式值、查看调用堆栈、断点等。
再见
在完成HCIP-IoT实验的过程中,还会穿插一些关于IDE构建和使用的文章或内容片段。此文不再多说什么!
相关文章:
IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 LiteOS Studio + GCC + JLink
文章目录 概述LiteOS Studio不推荐?安装和使用手册呢?HCIP实验的源码呢? 软件和依赖安装软件下载软件安装插件安装依赖工具-方案2依赖工具-方案1 工程配置打开或新建工程板卡配置组件配置编译器配置-gcc工具链编译器配置-Makefile脚本其他配置编译完成 …...
常见的 HTTP 接口(请求方法)
一:GET 作用:从服务器获取资源(查询数据)。特点: 请求参数通过 URL 传递(如https://api.example.com/users?id123),参数会显示在地址栏中。不修改服务器数据,属于幂等操…...
墨水屏显示模拟器程序解读
程序如下:出处https://github.com/tsl0922/EPD-nRF5?tabreadme-ov-file // GUI emulator for Windows // This code is a simple Windows GUI application that emulates the display of an e-paper device. #include <windows.h> #include <stdint.h>…...
【图像生成大模型】Step-Video-T2V:下一代文本到视频生成技术
Step-Video-T2V:下一代文本到视频生成技术 引言Step-Video-T2V 项目概述核心技术1. 视频变分自编码器(Video-VAE)2. 3D 全注意力扩散 Transformer(DiT w/ 3D Full Attention)3. 视频直接偏好优化(Video-DPO…...
【Java学习笔记】【第一阶段项目实践】房屋出租系统(面向对象版本)
房屋出租系统(面向对象版本) 整体思想:采用数组存储房屋信息,深刻体会面向对象的好处和过程 一、实现需求 (1)用户层 系统菜单显示 提示用户输入对应的数字选择功能 各个功能界面操作提示(底…...
18. 结合Selenium和YAML对页面继承对象PO的改造
18. 结合Selenium和YAML对页面继承对象PO的改造 一、架构改造核心思路 1.1 改造前后对比 #mermaid-svg-ziagMhNLS5fIFWrx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ziagMhNLS5fIFWrx .error-icon{fill:#5522…...
Vue-监听属性
监听属性 简单监听 点击切换名字,来回变更Tom/Jerry,输出 你好,Tom/Jerry 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>监听属性</title><!-- …...
AI写PPT可以用吗?我测试了3款AI写PPT工具,分享感受
上周五临下班,领导突然让我周末赶出一份季度营销报告 PPT,还要求周一晨会展示。看着空荡荡的 PPT 页面,我满心都是绝望 —— 周末不仅泡汤,搞不好还得熬夜到凌晨。好在同部门的前辈给我推荐了几款 AI 写 PPT 工具,没想…...
FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台,用的在线的ASR和TTS
FreeSWITCH 简单图形化界面43 - 使用百度的unimrcp搞个智能话务台 0、一个fs的web配置界面预览1、安装unimrcp模块2、安装完成后,配置FreeSWITCH。2.1 有界面的配置2.1.1 mod_unimrcp模块配置2.1.2 mod_unimrcp客户端配置 2.2 无界面的配置 3、呼叫规则4、编写流程4…...
C 语言学习笔记(函数)
内容提要 函数 函数的概述函数的分类函数的定义形参和实参函数的返回值 函数 函数的概述 **函数:**实现一定功能的,独立的代码模块,对于函数的使用,一定是先定义,后使用。 使用函数的优势: ①我们可以…...
数据结构 -- 树形查找(二)平衡二叉树
平衡二叉树 定义 平衡二叉树(AVL树) – 树上的任意一点的左子树和右子树的高度之差不超过1 节点的平衡因子 左子树高-右子树高 平衡二叉树的结点的平衡因子的值只可能是-1、0、1 //平衡二叉树结点 typedef struct AVLNode{int key; //数据域int bal…...
day 29
类装饰器 类有修饰器,他的逻辑:接收一个类,返回一个修改后的类。例如 1. 添加新的方法或属性(如示例中的 log 方法)。 2. 修改原有方法(如替换 __init__ 方法,添加日志)。 3. 甚…...
Java 并发编程
黑马程序员深入学习Java并发编程 进程与线程 预备知识 java8,pom.xml <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></depe…...
windows笔记本连接RKNN3588网络配置解析
这几天拿到了一块RKNN3588的板子,准备做视觉和Ros开发用,但是拿到后就蒙蔽了,不知道怎么ssh连到板子上去,更甚者不知道怎么配置网络让RKNN能够联网更新环境,这里记录一下整个过程。主要包括以下两个内容: 1.adb连接RKNN3588开发 2. 网口连接RKNN更新板子环境开发 adb连…...
C++ asio网络编程(8)处理粘包问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 粘包问题一、粘包原因总结: 二、如何处理粘包处理方法 三、完善消息节点MsgNode代码部分细节详解memcpy(_data, &max_len, HEAD_LENGTH);_data…...
【架构美学】Java 访问者模式:解构数据与操作的双重分发哲学
一、模式定义与核心思想 访问者模式(Visitor Pattern)是一种行为型设计模式,其核心目标是将数据操作与数据结构分离。通过定义一个独立的访问者类,使得新增对数据结构中元素的操作时,无需修改元素本身的类结构&#x…...
UE5无法编译问题解决
1. vs编译 2. 删除三个文件夹 参考...
Java可变参数与Collections工具类详解
Java可变参数与Collections工具类详解 一、可变参数(Variable Arguments) 1.1 基本概念 可变参数是Java 5引入的特性,允许在方法中定义数量可变的形参。其核心特点是:形参个数可以动态变化(0个、1个、多个ÿ…...
Git版本管理命令reset
目录 命令 git reset 场景一只回退 工作区代码 场景二回退暂存库与工作区 场景三回退暂存库,工作区,版本库内容 命令 git reset git reset --[soft/mixed(默认)/hard] [文件] soft:只回退版本库中内容 mixed:回退暂存区&…...
改进模糊C均值时序聚类+编码器状态识别!IPOA-FCM-Transformer组合模型
改进模糊C均值时序聚类编码器状态识别!IPOA-FCM-Transformer组合模型 目录 改进模糊C均值时序聚类编码器状态识别!IPOA-FCM-Transformer组合模型效果分析基本描述程序设计参考资料 效果分析 基本描述 1.创新未发表!研究亮点!时序…...
Zookeeper入门(三)
Zookeeper Java 客户端 项目构建 ookeeper 官方的客户端没有和服务端代码分离,他们为同一个jar 文件,所以我们直接引入 zookeeper的maven即可, 这里版本请保持与服务端版本一致,不然会有很多兼容性的问题 1 <dependency>…...
使用Redission来实现布隆过滤器
简述布隆过滤器 布隆过滤器是一种概率型数据结构,它可以用来判断一个元素是否在一个集合中。我们当时使用的是Redisson实现的布隆过滤器。它的底层原理是,先初始化一个比较大的数组,里面存放的是二进制0或1。一开始都是0,当一个k…...
Seata源码—6.Seata AT模式的数据源代理一
大纲 1.Seata的Resource资源接口源码 2.Seata数据源连接池代理的实现源码 3.Client向Server发起注册RM的源码 4.Client向Server注册RM时的交互源码 5.数据源连接代理与SQL句柄代理的初始化源码 6.Seata基于SQL句柄代理执行SQL的源码 7.执行SQL语句前取消自动提交事务的源…...
Spring-Beans的生命周期的介绍
目录 1、Spring核心组件 2、Bean组件 2.1、Bean的定义 2.2、Bean的生命周期 1、实例化 2、属性填充 3、初始化 4、销毁 2.3、Bean的执行时间 2.4、Bean的作用域 3、常见问题解决方案 4、与Java对象区别 前言 关于bean的生命周期,如下所示: …...
目标检测新突破:用MSBlock打造更强YOLOv8
文章目录 YOLOv8的现状与挑战YOLO-MS的MSBlock简介MSBlock的工作原理MSBlock的优势 利用MSBlock改进YOLOv8替换YOLOv8主干网络中的部分模块代码实现:替换CSP模块为MSBlock 在YOLOv8的颈部(Neck)中插入MSBlock代码实现:在颈部区域插…...
[SpringBoot]Spring MVC(4.0)
获取Header 传统获取 header 从 HttpServletRequest 中获取 RequestMapping("/r8")public String r8(HttpServletRequest request) {String userAgent request.getHeader("User-Agent");return "userAgent: "userAgent;}使用浏览器访问后&…...
Linux概述:从内核到开源生态
Linux概述:从内核到开源生态 Linux 是当今计算机领域最核心的开源操作系统内核,其影响力已渗透到服务器、嵌入式设备、云计算甚至超级计算机等各个领域。本章将深入解析Linux的本质、核心架构及其背后的开源哲学。 1. Linux的本质:不只是“操…...
【ubuntu24.04】pycharm 死机结束进程
windows 远程pycharm到ubuntu执行程序 pycharm 在调试过程中,内存耗尽,然后死机了 pycharm 进程 (base) rootk8s-master-pfsrv:/home/zhangbin/下载# ps -ef | grep pycharm root 121245 3230568 0 5月14 pts/8 00:00:00 /bin/bash --rcfile …...
【PRB】深度解析GaN中最浅的受主缺陷
2025 年 1 月 16 日,Virginia Commonwealth University 的 M. A. Reshchikov 和 SUNY–Albany 的 B. McEwen 等人在《Physical Review B》期刊发表了题为《Identity of the shallowest acceptor in GaN》的文章,基于对 50 多个 Be 掺杂 GaN 样品的光致发光实验以及 Heyd-Scus…...
Flink CEP是什么?
Apache Flink 的 CEP(Complex Event Processing,复杂事件处理) 是 Flink 提供的一个库,用于在无界数据流中检测符合特定模式的事件组合。 🎯 一、什么是 CEP? ✅ 定义: CEP 是一种从连续的数据…...
基于STM32的多传感器融合的设施农业小型搬运机器人避障控制系统设计
一、系统总体设计目标 针对设施农业场景中狭窄通道、障碍物多样(如农机具、作物植株、水管)的特点,设计一款基于 STM32 的小型搬运机器人避障控制系统。系统通过多传感器融合实现 360 环境感知,采用模糊 PID 控制算法实现平滑避障,满足温室、大棚等场景的搬运需求。 二、…...
从零开始实现大语言模型(十六):加载开源大语言模型参数
1. 前言 预训练大语言模型的难点不在于算法,而在于数据和算力,绝大多数企业和机构都没有预训练大语言模型的算力资源。在工业界的大语言模型应用实践中,通常会使用领域数据微调开源大语言模型参数,以构建领域大语言模型。 本文介…...
Spark,数据提取和保存
以下是使用 Spark 进行数据提取(读取)和保存(写入)的常见场景及代码示例(基于 Scala/Java/Python,不含图片操作): 一、数据提取(读取) 1. 读取文件数据&a…...
java19
1.集合体系结构 注意: 2.collection遍历之迭代器遍历 一次循环只能一次next方法的原因: 原因:集合长度是单数就报错 3.collection遍历之增强for遍历 如何代码简写呢:集合名.for回车 4.collection遍历之Lambda表达式遍历 5.使用多态…...
从0到1吃透卷积神经网络(CNN):原理与实战全解析
一、开篇:CNN 在 AI 领域的地位 在当今人工智能(AI)飞速发展的时代,卷积神经网络(Convolutional Neural Network,简称 CNN)无疑是深度学习领域中最为耀眼的明星之一 。它就像是 AI 世界里的超级…...
建一个结合双向长短期记忆网络(BiLSTM)和条件随机场(CRF)的模型
构建一个结合双向长短期记忆网络(BiLSTM)和条件随机场(CRF)的模型,通常用于序列标注任务,如命名实体识别(NER)、词性标注(POS Tagging)等。下面我将通过口述的…...
mvc-ioc实现
IOC 1)耦合/依赖 依赖,是谁离不开谁 就比如上诉的Controller层必须依赖于Service层,Service层依赖于Dao 在软件系统中,层与层之间存在依赖。我们称之为耦合 我们系统架构或者设计的一个原则是ÿ…...
符合Python风格的对象(再谈向量类)
再谈向量类 为了说明用于生成对象表示形式的众多方法,我们将使用一个 Vector2d 类,它与第 1 章中的类似。这一节和接下来的几节会不断实 现这个类。我们期望 Vector2d 实例具有的基本行为如示例 9-1 所示。 示例 9-1 Vector2d 实例有多种表示形式 &g…...
4.1.8文件共享
知识总览 基于索引节点的共享方式(硬链接): 让不同用户的文件目录项指向同一个文件的索引节点 用户1创建文件1,并让文件目录项aaa指向了文件1,这个文件对应了一个索引节点,这个索引节点 包含了文件的物理地址和文件的其他属性信…...
[LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
文章摘要 LevelDB的日志管理系统是怎么通过双链表来进行数据管理为什么LevelDB能够在不锁表的情况下进行日志新增 适用人群: 对版本管理机制有开发诉求,并且希望参考LevelDB的版本开发机制。数据库相关从业者的专业人士。计算机狂热爱好者,对计算机的…...
普通用户的服务器连接与模型部署相关记录
普通用户的服务器连接与模型部署相关记录 一、从登录到使用自己的conda 1.账号登陆: ssh xxx172.31.226.236 2.下载与安装conda: 下载conda: wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh 安装con…...
WebSocket解决方案的一些细节阐述
今天我们来看看WebSocket解决方案的一些细节问题: 实际上,集成WebSocket的方法都有相关的工程挑战,这可能会影响项目成本和交付期限。在最简单的层面上,构建 WebSocket 解决方案似乎是添加接收实时更新功能的前进方向。但是&…...
架构思维:构建高并发扣减服务_分布式无主架构
文章目录 Pre无主架构的任务简单实现分布式无主架构 设计和实现扣减中的返还什么是扣减的返还返还实现原则原则一:扣减完成才能返还原则二:一次扣减可以多次返还原则三:返还的总数量要小于等于原始扣减的数量原则四:返还要保证幂等…...
C++函数基础:定义与调用函数,参数传递(值传递、引用传递)详解
1. 引言 函数是C编程中的核心概念之一,它允许我们将代码模块化,提高代码的可读性、复用性和可维护性。本文将深入探讨: 函数的定义与调用参数传递方式(值传递 vs 引用传递)应用场景与最佳实践 2. 函数的定义与调用 …...
深入解析Python中的Vector2d类:从基础实现到特殊方法的应用
引言 在Python面向对象编程中,特殊方法(或称魔术方法)是实现对象丰富行为的关键。本文将以Vector2d类为例,详细讲解如何通过特殊方法为自定义类添加多种表示形式和操作能力。 Vector2d类的基本行为 Vector2d类是一个二维向量类…...
【25软考网工】第六章(7)网络安全防护系统
博客主页:christine-rr-CSDN博客 专栏主页:软考中级网络工程师笔记 大家好,我是christine-rr !目前《软考中级网络工程师》专栏已经更新三十多篇文章了,每篇笔记都包含详细的知识点,希望能帮助到你&#x…...
Mac下载bilibili视频
安装 安装 yt-dlp brew install yt-dlp安装FFmpeg 用于合并音视频流、转码等操作 brew install ffmpeg使用 下载单个视频 查看可用格式 yt-dlp -F --cookies-from-browser chrome "https://www.bilibili.com/video/BV15B4y1G7F3?spm_id_from333.788.recommend_more_vid…...
6个月Python学习计划:从入门到AI实战(前端开发者进阶指南)
作者:一名前端开发者的进阶日志 计划时长:6个月 每日学习时间:2小时 覆盖方向:Python基础、爬虫开发、数据分析、后端开发、人工智能、深度学习 📌 目录 学习目标总览每日时间分配建议第1月:Python基础与编…...
批量处理 Office 文档 高画质提取图片、视频、音频素材助手
各位办公小能手们!你们有没有遇到过想从 Office 文档里提取图片、音频和视频,却又搞得焦头烂额的情况?今天就给大家介绍一款超厉害的工具——OfficeImagesExtractor! 这货的核心功能那可真是杠杠的!首先是高画质提取&a…...
【甲方安全建设】Python 项目静态扫描工具 Bandit 安装使用详细教程
文章目录 一、工具简介二、工具特点1.聚焦安全漏洞检测2.灵活的扫描配置3.多场景适配4.轻量且社区活跃三、安装步骤四、使用方法场景1:扫描单个Python文件场景2:递归扫描整个项目目录五、结果解读六、总结一、工具简介 Bandit 是由Python官方推荐的静态代码分析工具(SAST)…...