IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 VSCode + IoT Link 插件

文章目录

  • 概述
  • IDE安装
    • 安装旧版本VSCode
    • 安装插件
    • 安装问题和解决
    • 手动安装SDK包
    • 手动下载依赖工具
  • IoTLink配置
    • IoTLink Home
    • 用户设置-工具链-编译器
    • 用户设置-工具链-构建器
    • 用户设置-工具链-烧录器
    • 用户设置-SDK管理
    • 工程设置-SDK配置
    • 工程设置-编译器
    • 工程设置-调试器
  • 创建工程
    • Demo 源码
    • 编译和烧录
  • IDE测试
    • 检查通信模组
    • 产品和模型
    • 注册设备
    • 关于设备秘钥
    • 编解码插件
    • 数据结果
    • 本地调试

概述

本文详细介绍了基于 VSCode + IoT Link + GCC 搭建和开发华为物联网设备侧程序的方式方法,分析了此环境的优劣势和注意事项。本文基于IoTDA 在线文档 <基于NB-IoT小熊派开发智慧路灯>中的说明进行实践,对对其进行了补充和注意事项总结。

@HISTORY
通过些旧资料信息只是推测,华为最开始推出的IDE是 LiteOS Studio + GCC 方案, 如,在HCIP-IoT实验手册中提及使用,偶尔一些帖子里也能看到,但在华为云社区几乎看不到它的身影啦。开发环境 VSCode + IoT Link 可能是中间阶段的一个产物(只是猜哈),在华为云IoTDA在线文档,2025年更新的一些示例程序中依然在使用。关于前者的使用,我们可以参见 #<IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 LiteOS Studio + GCC + JLink>#,我更推荐的IDE方案,#<IDE/IoT/搭建物联网(LiteOS)集成开发环境,基于 VSCode + GitBash + GCC工具>#。

丑话说在前边,
参考 IoTDA 在线文档 <基于NB-IoT小熊派开发智慧路灯>中的表述,以windows 10 64-bit系统Visual Studio Code为例,请下载1.49版本,其他版本不支持IoT Link。

在VSCode插件库中搜索发现,该插件的停更时间比 LiteOS Studio 发行版的停更时间还早一年,这东东2020年不更新了。好在关于它的使用时尚活跃的,
在这里插入图片描述
设备接入 IoTDA 中提及的上述在线文档 ,其更新时间是2025年3月,就是前几天。既然此文档中还是描写使用 IoT Link 插件,那,不至于如此不堪,诓骗用户吧。至少该模式的环境搭建是有文档可参考的,只能硬着头皮来来了。本章基于此帮助文档进行实操实践,记录了一些问题和心得。

后记,
在解决一些安装问题的过程中,我还发现了 https://flyfishzy.github.io/iotstudio-doc/zh/ 这个插件使用说明网站,其中有对于IoT Link Studio 的一个完整全面的安装和使用说明。在Deepseek的辅助分析下,认为该网站是该网站是:基于 GitHub Pages 部署,域名 flyfishzy.github.io 表明是个人或小团队维护的开源项目文档,非企业级官方页面。,某开发者使用 Markdown 编写文档,通过 GitBook 生成结构化输出(如电子书目录导航、交互式网页),并通过 GitHub Pages 托管 GitBook 生成的静态站点。
但再后来,
我在华为云开发者社区博客里也发现了上述网站的身影,参见 202308发表的 <VSCode 搭建 IoT Link 开发环境,华为云IoT+鸿蒙> 这篇文章,其中提到 “在安装插件页,详情的底部,有介绍插件的官网 https://flyfishzy.github.io/iotstudio-doc/zh/”。我重新打开 IoT link 插件安装界面,还果然有, Tutorials/教程,指向上述网址,
在这里插入图片描述
如下,是在VSCode在线可得可安装的IoT Link 插件,
在这里插入图片描述
可以大致了解到,IoT Link Studio是针对IoT物联网端侧开发的IDE环境,提供了编译、烧录、调试等一站式开发体验,支持 C、 C++、汇编等多种开发语言,让您快速、高效地进行物联网开发。通过上文提到的 IoT link 官方教程,并没有明说这是针对华为云 IoT 的,也没有表明其开发者是华为或子部门,也没有任何的个人署名,我不太好去猜测这其中的原因,可能是怕引起不必要的麻烦吧,从本文档的关联资料中可以看到,它就是针对华为云物联网开发的。

IDE安装

参考 IoTDA 在线文档 <基于NB-IoT小熊派开发智慧路灯>,文中将华为一站式开发工具平台定义为 VS code工具IoTlink插件。

安装旧版本VSCode

现在是202503,比较尴尬的是,我们得下载使用旧版本 Visual Studio Code,且有地方标明了只能是 1.49 版本,其他版本不支持 IoT Link 。
在这里插入图片描述
如果你已经安装过较新的版本,请卸载,并最好在断网的情况下安装上述旧版本。
再次提示,安装前先断网,否则在你安装完成后的几十秒内,在你关闭自动更新选项前,VSCode后台就偷偷地默默地替你把升级完成了。如果你不听话断网,你极有可能在试图关闭自动更新功能的过程中,被提示当前软件处于启动状态,无法执行完安装,此时就晚了,即使你点击取消也没有用,看到此提示的时候,后台已经给你升级结束,就等你重启软件了。

安装插件

若英文不过关,先装 Chinese (Simplified) (简体中文) 插件。在菜单栏->文件->设置->应用程序,更改如下2个配置:
在这里插入图片描述
接下来,正常安装 IoT Link 插件,
在这里插入图片描述
上述安装过程,你看可能会在右下角看到包含但不限于上图中的依赖库或扩展的安装过程。IoT Link 插件安装过程中,会自动安装其依赖的 C/C++插件,推荐自己在安装C++ Intelliense 插件等。一个简单的环境,可能最起码要包含如下基础插件配备,
在这里插入图片描述

安装问题和解决

Network Error !具体如下图,(前文我们关闭了软件自动更新,并不是关闭了全部网络哈)
在这里插入图片描述
分析上述问题的可能原因如下,如,外网访问限制、依赖路径配置错误、网络稳定性差、代理未配置等等。我本来在这里写了很多,后来都删了,感觉有点浪费时间。我们稍微说一下,代理配置这个事情:
若用户处于企业内网或需要代理访问外网,但未在VSCode中设置代理(首选项→设置→代理服务器),会导致下载请求被拦截。这种情况下,即使你配置代理通常也没啥鸟用,一般公司网络安全没有那么不堪吧。我回到家,在打开科学上网,并打开VSCode代理服务器的情况下,依然存在上述插件安装异常。
在这里插入图片描述
对于这点多说几句,如果你网络知识,比如,对关于什么网络代理、防火墙、证书等概念和操作不是特别在行,不要轻易尝试。即使你尝试了,若不成功,记得修改回去,因为你的这些修改可能导致VSCode不能正常连接到插件市场,一个可能的异常提示如下,

//插件卡中的异常调试
//We cannot connect to the Extension Marketplace at this time,please try again later。

如果最后还是不成功,不要太执着,自动安装依赖毕竟不是最终目的…
可能还存在其他方向的问题,我没有想到。也可能是对上述问题的解决方案没有卡到点上。总之安装 IoT Link Studio 时,并没有出现预期的自动从网络下载最新的SDK包以及gcc依赖环境。我只能临时尝试手动了,这并不丢人。

手动安装SDK包

假如下载SDK包及gcc依赖环境失败,请手动下载SDK包 ,参考实验指导手册,放到C:\Users${用户名}.iotlink\sdk目录下,文件名修改为IoT_LINK。放置完后,重新打开VSCode即可。这里的路径就是后续[用户设置-SDK管理]章节中显示的路径。
在这里插入图片描述
当然,放在C盘,让人很不舒服。很遗憾,不支持修改。

手动下载依赖工具

参考Gitbash的环境搭建过程。

IoTLink配置

安装完成旧版本的VSCode和IoT Link等插件后,我们需要配置IoT工程

IoTLink Home

我们启用 IoT link 插件后,可以在VSCode页面左下角看到一个工具栏,如下图,
在这里插入图片描述
点击Home按钮,
在这里插入图片描述
如上,点击 [IoT Link设置]。建议先进行用户设置,再进行工程设置。
在这里插入图片描述
因为在用户设置中,会有方便的工具链安装连接可以使用。而工程设置中,只有选择操作,没有安装入口,若你之前没有安装过相关工具,则无法进行选择,挺矛盾的。

用户设置-工具链-编译器

点击上图GCC下载安装按钮,将跳转到 GNU Arm Embedded Toolchain Downloads,下载 win32.zip 工具链版本,如下图,
在这里插入图片描述
下载过程,
在这里插入图片描述
如上图,虽然能访问,但是下载速度相当的慢,这也可能是导致不能自动下载的原因之一。如上图,我下载的是较新的版本(小熊派 developTools.zip依赖包中是7.3),安装到D:\Program Files目录下,
在这里插入图片描述

用户设置-工具链-构建器

前文提到了,在工具链设置卡中,贴心提供了GCC和JLINK下载链接,但这里并没有提供make的下载链接,如本章节概述图示,此目录默认为${system_default},即系统Path环境变量配置,这是很危险的配置方式,因为你的系统里可能安装了多个版本的make工具,先识别到哪个不确定,
在这里插入图片描述
我昨天刚安装了小熊派 developTools.zip,其中在上述目录包含make工具。在华为云示例文档中,并没有提及make工具的安装,可能是太习以为常啦,这是常用工具。如果你之前没有安装过任何版本,可以访问 Make for Windows,下载zip版本,在必要的情况还需要安装libintl3、libiconv2依赖。上述developTools中的make版本是4.2.1,还挺新的,我就借用了。

要注意的是,Make工具路径的配置应该选择make.exe可执行文件,而不仅是其目录。但这里有bug,开发者将打开文件功能意外开发成了打开目录功能,文件名需要自己输入(并重启软件)。如果你选择的是目录不是文件,则在编译时,可能会报错,大约如下,

D:\Program Files\IoT_developTools\GNU MCU Eclipse\Build Tools\2.11-20180428-1604\bin -f,Makefile,-j
Error: spawn D:\Program Files\IoT_developTools\GNU MCU Eclipse\Build Tools\2.11-20180428-1604\bin ENOENT

最终GCC和Make配置如下,
在这里插入图片描述

用户设置-工具链-烧录器

在这里插入图片描述
JLink目录是个默认显示,其实它尚不存在。点击跳转 SEGGER Downloads,下载到 JLink_Windows_V824_i386.exe 文件,全默认安装。
在这里插入图片描述
在指导书中,使用的是ST-Link驱动适配OpenOCD模式,所以没有提及J-Link驱动安装。在LiteOS Studio环境中,则强制使用Jlink模式,需要将STLink重刷成JLink。本次实验,我们使用的是ST-Link和OpenOCD,按照 <基于NB-IoT小熊派开发智慧路灯>中的相关步骤进行即可,可不去关注J-link。如果你对Jlink及其使用有所了解,它可能是更稳妥的选择。

如果以前刷过烧录器到JLINK,记得恢复哈,
在这里插入图片描述
哈哈,光靠上边还不行,还得借助STM32 ST-LINK Utility重新联网烧录STlink固件,
在这里插入图片描述
烧录完成后,将小小南瓜派开发板的电源/烧录/串口线,重新拔插下,must哦。

用户设置-SDK管理

在这里插入图片描述
回到手动安装SDK包那一小节,这里就是其要求的默认路径,很遗憾,不支持修改。

工程设置-SDK配置

在这里插入图片描述
这属于SDK裁剪配置,在对工程树结构不太熟悉的情况下,可先不关注这块。

工程设置-编译器

在这里插入图片描述
这里的编译器配置为 ${system_default},它是指系统Path目录。这里不建议使用此默认目录。因为我们的系统中,可能有好多个地方都存在gcc的可执行文件。我的就被识别到了Qt安装目录下。
在这里插入图片描述
修改后的编译器配置,
在这里插入图片描述
在该插件下的[工程设置-调试器-OpenOCD路径]、[用户设置-工具链-Make工具路径],叫做路径配置的地方,都是要具体到文件名,而不是文件夹名。但是这里的编译器路径,却得配置文件夹路径,因为不光要用gcc,还要用gdb工具。

工程设置-调试器

OpenOCD(Open On-Chip Debugger) 是一款开源的片上调试工具,在嵌入式开发中广泛用于芯片初始化、固件烧录、实时调试等场景,尤其在与 GCC 工具链结合时,能够构建完整的交叉编译与调试环境。首先OpenOCD本身是一个跨平台的调试软件,在Windows对应可执行文件openocd.exe,以小熊派 developTools.zip为例,openocd目录下,包含 bin/openocd 和 bin-x64\openocd ,其中bin被默认添加到了系统Path,对于64bit系统,我们建议使用修改配置成bin-x64目录,会更高效稳定些。

调试器配置中的OpenOCD,我们使用 D:\Program Files\IoT_developTools\openocd\bin-x64。还要注意的是,OpenOCD作为协议适配层,通过插件化架构支持多种调试接口协议,如,JTAG协议、SWD协议(Serial Wire Debug)等。
OpenOCD的运作可以分为两个层次,
核心软件层:通过可执行文件提供调试服务,包含GDB服务器、Telnet接口等模块。支持动态加载配置脚本(.cfg文件),定义适配器类型、目标芯片参数等。协议驱动层:通过插件机制支持不同调试接口的协议栈,例如:ST-Link调试器的配置脚本 interface/stlink.cfg、具体系列芯片调试参数target/stm32l4x.cfg。这里提到的stm32l4x.cfg文件,是在安装IoTLink插件的过程中,被下载到VSCode插件extensions目录下的,
在这里插入图片描述
还要注意的是,这里的OpenOCD路径应该是文件路径不是文件夹,插件开发者在这里犯了同样的错误,像前边"用户设置-工具链-MAKE工具路径"那样,要自己手动输入文件名,而不能通过选择框搞定,最终调试器配置为,
在这里插入图片描述

OpenOCD要与GDB协同工作,
在使用OpenOCD进行嵌入式调试时,GDB是必需的调试工具,两者通过明确的角色分工实现高效协同调试。OpenOCD与GDB的协作是硬件与源码调试的桥梁:OpenOCD作为“翻译官”,负责将GDB的高级指令转换为硬件可识别的信号。GDB作为“指挥官”,提供用户友好的调试界面与逻辑控制。 两者通过RSP协议实现高效通信,是嵌入式开发中不可或缺的工具链组合。

创建工程

在这里插入图片描述
新建工程成功后,IoT Link 工具条,对比创建项目前,变化如下,
在这里插入图片描述
这里的示例工程的源码,应该是从 C:\Users\qugx0528.iotlink\sdk\IoT_LINK 目录下拷贝出来的。

Demo 源码

在上一小节,我们通过使用IoTLink插件创建IoT工程时,可以选择基于示例工程创建。这里的示例工程,是安装IoTLink插件的过程中被拷贝到安装目录下的。对比小小派社区给出的bearpi-iot_std_liteos项目下的示例程序,两者几乎是一致的。

//E:\IoT\QuickStart\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(); //最终会调用standard_app_demo_main函数(void)LOS_Start();return 0;
}//E:\IoT\QuickStart\Demos\oc_streetlight_template\oc_streetlight_template.c
int standard_app_demo_main() {...osal_task_create("app_collect",app_collect_task_entry,NULL,0x400,NULL,3);osal_task_create("app_report",app_report_task_entry,NULL,0x1000,NULL,2);osal_task_create("app_command",app_cmd_task_entry,NULL,0x1000,NULL,3);//osal_int_connect(KEY1_EXTI_IRQn, 2,0,Key1_IRQHandler,NULL);osal_int_connect(KEY2_EXTI_IRQn, 3,0,Key2_IRQHandler,NULL);...return 0;
}

编译和烧录

单击VSCode底部工具栏的“Build”,等待系统编译完成。编译成功后,界面显示“编译成功”在这里插入图片描述
单击VSCode底部工具栏的“Download”,等待系统烧录完成。烧录成功后,界面显示“烧录成功”
在这里插入图片描述

IDE测试

此章节不是本文重点,详情参考 IoTDA在线文档, <基于NB-IoT小熊派开发智慧路灯>。

检查通信模组

在其他的文章中,我们已经进行过相关实验,彼时使用的是独立串口工具,这里使用IoT Link串口终端再行实验。
在这里插入图片描述

产品和模型

在这里插入图片描述
如上,创建产品,并按照文档说明,导入现有的产品模型,保持ZIP格式导入。

注册设备

基于产品及其模型,创建注册设备的入口有两个,我们在之前的实验中都用过,再回顾下。

方案1:在所有设备界面->设备列表->注册设备,
在这里插入图片描述
参见 #<IoT/基于NB28-A/BC28-CNV通信模组使用AT指令连接华为云IoTDA平台># 文中相关内容。

方案2:在产品详情->进入在线调试选项卡->新增测试设备,
在这里插入图片描述

就目前的实际观察来说,在调试阶段,我没有感受到两种设备的区别,可以通过不同路径进入相同调试卡。具体比较下这俩入口:
单设备注册(设备列表入口)
适用于正式生产环境中的设备批量或单个接入,需严格遵循产品模型和安全规范。通常用于真实设备的长生命周期管理,支持完整功能(如数据持久化、规则引擎联动、OTA升级等) 。
在线调试中的新增测试设备
专为开发调试阶段设计,简化注册流程,便于快速验证设备与平台的通信功能。此类设备通常用于临时测试,可能不支持某些高级功能(如设备联动规则),且数据可能不持久化。

关于设备秘钥

在"基于NB-IoT小熊派开发智慧路灯"说明书中,其创建设备时,选择的是“不加密”,并使用不加密的Coap协议,5683端口。我在 #<IoT/HCIP/基于NB-IoT模组的AT指令实验(小熊派IoT+NB28-A模组)>#,我临时得出的结论是,似乎不再提供Coap不加密传输协议了,而且若不输入秘钥,平台会自动生成。因此在上述创建设备的过程中,我是添加了秘钥的,在这种情况下,Demo代码也要对应的做出一点点修改,

#if 0
#define cn_endpoint_id        "BearPi_0001"
#define cn_app_server         "119.3.250.80"
#define cn_app_port           "5683"
#else
#define cn_endpoint_id        "67fb1c725367f573f7825201_8600xxxxxxxxxxx3"
#define cn_app_server         "124.70.30.197"
#define cn_app_port           "5684"   //使用coaps协议
#define cn_app_pskid           "8600xxxxxxxxxxx3"
#define cn_app_psk             "0xxxxxxxxxxxxxxxxxxxxx"
#define cn_app_psklen          22
#endif

代码修改后,记得重新编译和烧录。

编解码插件

在注册设备环节,使用哪种方式注册设备都该是你没有问题。但若你沉浸于在线文档,没有认真思考,就会遇到如下问题,
在这里插入图片描述
异常信息不难理解,对啊,我还没有开发编解码插件呢?在线说明书竟然跳过了这一步,我也很纳闷。在十几分钟的时间内,我甚至怀疑,难不成使用以下(产品详情->在线调试->新增测试设备)方法创建注册的设备,不需要开发编解码插件?我看了Demo中的源码,确认发出的是二进制数据,又在在线文档中零散的查询了些资料,最终我确定,无论哪种方案注册的设备,在Coap协议下,必须要开发编解码插件。再后来,在小熊派社区提供的教程中,也看到了相关的说明。自己水平不足,文档又不给力,就是这么费劲。

结合在线说明书中的产品模型服务列表和服务能力列表,
在这里插入图片描述
结合源代码中的消息标识和结构定义,

#define cn_app_connectivity    0 //对应服务类型Connectivity //实时监测信号质量
#define cn_app_lightstats      1 //对应服务类型Button //监测F2按键的状态 
#define cn_app_light           2 //对应服务类型Sensor //实时监测光照强度
#define cn_app_ledcmd          3 //对应服务类型LED /下发命令
#define cn_app_cmdreply        4 //对应服务类型LED /命令响应#pragma pack(1)
//对应服务类型Connectivity //实时监测信号质量
typedef struct {int8_t msgid;int16_t rsrp;int16_t ecl;int16_t snr;int32_t cellid;
}app_connectivity_t;//对应服务类型Button //监测F2按键的状态 
typedef struct {int8_t msgid;int16_t tog;
}app_toggle_t;//对应服务类型Sensor //实时监测光照强度
typedef struct {int8_t msgid;int16_t intensity;
}app_light_intensity_t;//对应服务类型LED /下发命令
typedef struct {int8_t msgid;uint16_t mid;char led[3];
}app_led_cmd_t;//对应服务类型LED /命令响应
typedef struct {int8_t msgid;uint16_t mid;int8_t errorcode;char curstats[3];
}app_cmdreply_t;#pragma pack()

结合上述两类信息,进行编解码插件的图形化开发,添加如下消息,并绑定产品模型的属性和命令。
在这里插入图片描述
还要注意的是,完成编解码插件开发后,主要右上角的部署操作。

数据结果

在这里插入图片描述
以上述光照强度为例,由于代码上报频率设置和网络延迟等,其变化频率是很慢的,不要着急,耐心观察。

本地调试

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/81422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度剖析:Dify+Sanic+Vue+ECharts 搭建 Text2SQL 项目 sanic-web 的 Debug 实战

目录 项目背景介绍sanic-web Dify\_service handle\_think\_tag报错NoneType问题描述debug Dify调用不成功&#xff0c;一直转圈圈问题描述debug 前端markdown格式只显示前5页问题描述debug1. 修改代码2.重新构建1.1.3镜像3.更新sanic-web/docker/docker-compose.yaml4. 重新部…

理想AI Talk第二季-重点信息总结

一、TL&#xff1b;DR 理想为什么要做自己的基模&#xff1a;座舱家庭等特殊VLM场景&#xff0c;deepseek/openai没有解决理想的基模参数量&#xff1a;服务端-300B&#xff0c;VLencoder-32B/3.6B&#xff0c;日常工作使用-300B&#xff0c;VLA-4B为什么自动驾驶可以达成&…

TensorRT

TensorRT 下载 TensorRT 7.1.3.4 TAR压缩包&#xff0c;解压到安装目录&#xff1a; tar xzvf TensorRT-7.1.3.4.Ubuntu-16.04.x86_64-gnu.cuda-11.0.cudnn8.0.tar.gz 添加 TensorRT lib 到环境变量&#xff1a; gedit ~/.bashrc # 添加 export LD_LIBRARY_PATH$LD_LIBRARY_PAT…

【NGINX】 -9 nginx + tomcat实现的多级反向代理

文章目录 1、tomcat的安装 (centos版本)1.1 安装Java依赖环境1.2 安装tomcat 2、tomcat的虚拟主机的配置2.1 配置多级目录 3、利用nginx的反向代理实现将转发指向一个虚拟机3.1 nginx服务器的配置3.2 客户端配置 4、 反向多级代理代理服务器操作nginx 1 服务器nginx 2 服务器to…

基于requests_html的python爬虫

前言&#xff1a;今天介绍一个相对性能更高的爬虫库requests_html&#xff0c;会不会感觉和requests有点联系&#xff1f;是的。为什么开始不直接介绍呢&#xff1f;因为我觉得requests是最基本入门的东西&#xff0c;并且在学习过程中也能学到很多东西。我的python老师在介绍这…

【架构篇】架构类型解释

架构设计的本质&#xff1a;从模糊概念到系统化思维 摘要 “架构”是系统设计的灵魂&#xff0c;但许多人对它的理解仍停留在抽象层面。本文系统解析架构的8大核心维度&#xff0c;结合设计原则、案例与误区分析&#xff0c;帮助开发者建立从战略到落地的完整认知框架。 一、架…

用Python绘制梦幻星空

用Python绘制梦幻星空 在这篇教程中&#xff0c;我们将学习如何使用Python创建一个美丽的星空场景。我们将使用Python的图形库Pygame和随机库来创建闪烁的星星、流星和月亮&#xff0c;打造一个动态的夜空效果。 项目概述 我们将实现以下功能&#xff1a; 创建深蓝色的夜…

PyTorch循环神经网络(Pytotch)

文章目录 循环神经网络&#xff08;RNN&#xff09;简单的循环神经网络长短期记忆网络&#xff08;LSTM&#xff09;门控循环单元&#xff08;GRU&#xff09; 循环神经网络&#xff08;RNN&#xff09; 循环神经网络&#xff08;RecurrentNeuralNetwork&#xff0c;RNN&#…

用算术右移实现逻辑右移及用逻辑右移实现算术右移

函数srl()用算术右移实现逻辑右移&#xff0c;函数sra()用逻辑右移实现算术右移。 程序代码 int sra(int x,int k); unsigned int srl(unsigned int x, int k);void main() {int rx1,k,x1;unsigned int rx2,x2;k3;x10x8777;x20x8777;rx1sra(x1, k);rx2srl(x2, k);while(1); }…

pojo层、dao层、service层、controller层的作用

在Java Web开发中&#xff0c;常见的分层架构&#xff08;如Spring Boot项目&#xff09;通常包含POJO层、DAO层、Service层和Controller层&#xff0c;各层职责明确&#xff0c;协同工作。以下是各层的作用及相互关系&#xff1a; 1. POJO层&#xff08;Model/Entity层&#…

【Linux网络】五种IO模型与阻塞IO

IO 在Linux网络环境里&#xff0c;IO&#xff08;Input/Output&#xff09;指的是网络数据在系统与外部网络&#xff08;像其他设备、服务器或者客户端&#xff09;之间进行传输的过程。 它是网络编程和系统性能优化的核心内容。 IO &#xff1a;INPUT和OUTPUT&#xff08;站…

入门OpenTelemetry——应用自动埋点

埋点 什么是埋点 埋点&#xff0c;本质就是在你的应用程序里&#xff0c;在重要位置插入采集代码&#xff0c;比如&#xff1a; 收集请求开始和结束的时间收集数据库查询时间收集函数调用链路信息收集异常信息 这些埋点数据&#xff08;Trace、Metrics、Logs&#xff09;被…

大数据场景下数据导出的架构演进与EasyExcel实战方案

一、引言&#xff1a;数据导出的演进驱动力 在数字化时代&#xff0c;数据导出功能已成为企业数据服务的基础能力。随着数据规模从GB级向TB级甚至PB级发展&#xff0c;传统导出方案面临三大核心挑战&#xff1a; ‌数据规模爆炸‌&#xff1a;单次导出数据量从万级到亿级的增长…

拓展运算符与数组解构赋值的区别

拓展运算符与数组解构赋值是ES6中用于处理数组的两种不同的特性&#xff0c;它们有以下区别&#xff1a; 概念与作用 • 拓展运算符&#xff1a;主要用于将数组展开成一系列独立的元素&#xff0c;或者将多个数组合并为一个数组&#xff0c;以及在函数调用时将数组作为可变参…

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案) 一、单项选择题(每题 5 分) C++ 程序流程控制的基本结构不包括以下哪项? A. 分支结构 B. 数据结构 C. 循环结构 D. 顺序结构 以下哪段代码能将数组 int a[4] = {2, 4, 6, 8}; 的所有元素变…

计算机视觉与深度学习 | Python实现EMD-CNN-LSTM时间序列预测(完整源码、数据、公式)

EMD-CNN-LSTM 1. 环境准备2. 数据生成(示例数据)3. EMD分解4. 数据预处理5. CNN-LSTM模型定义6. 模型训练7. 预测与重构8. 性能评估核心公式说明1. 经验模态分解(EMD)2. CNN-LSTM混合模型参数调优建议扩展方向典型输出示例以下是使用Python实现EMD-CNN-LSTM时间序列预测的完…

React 19中useContext不需要Provider了。

文章目录 前言一、React 19中useContext移除了Provider&#xff1f;二、使用步骤总结 前言 在 React 19 中&#xff0c;useContext 的使用方式有所更新。开发者现在可以直接使用 作为提供者&#xff0c;而不再需要使用 <Context.Provider>。这一变化简化了代码结构&…

单片机-STM32部分:14、SPI

飞书文档https://x509p6c8to.feishu.cn/wiki/VYYnwOc9Zi6ibFk36lYcPQdRnlf 什么是SPI SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&…

Vue 3 动态 ref 的使用方式(表格)

一、问题描述 先给大家简单介绍一下问题背景。我正在开发的项目中&#xff0c;有一个表格组件&#xff0c;其中一列是分镜描述&#xff0c;需要支持视频上传功能。用户可以为每一行的分镜描述上传对应的视频示例。然而&#xff0c;在实现过程中&#xff0c;出现了一个严重的问…

构建 TypoView:一个富文本样式预览工具的全流程记录

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 在一次和 CodeBuddy 的日常交流中&#xff0c;我提出了一个构想&#xff1a;能不能帮我从零构建一个富文本样式…