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

IAR开发环境的安装、配置和新建STM32工程模板

IAR到环境配置到新建工程模板-以STM32为例

  • 一、 简单介绍一下IAR软件
    • 1. IAR的安装
      • (1) 下载IAR集成开发环境安装文件
      • (2) 安装
    • 2. 软件注册授权
  • 二、IAR上手使用(基于STM32标准库新建工程)
    • 1、下载标准库文件
    • 2、在IAR新建工程
      • (1)新建工程文件目录
      • (2)工程所需库文件准备
      • (3)新建IAR工程
      • (4)添加标准库文件到工程中
    • 3. 配置当前新建工程的环境
      • (1)选择单片机型号
      • (2)添加库文件和路径以及宏定义
    • 4、程序编译测试
  • 三、结语

一、 简单介绍一下IAR软件

瑞典著名软件开发商IAR Systems公司2014年推出了最新版本IAR Embedded Workbench For ARM V7.1 (简称IAR EWARM V7.1),它是一种增强型一体化开发平台,其中完全集成了开发嵌入式系统所需要的文件编辑、项目管理、编译、链接和调试工具。IAR公司独具特色的CSPY调试器,不仅可以在系统开发初期进行无目标硬件的纯软件仿真,也可以结合JLink/JTrace硬件仿真器,对用户系统进行实时在线仿真调试。
在这里插入图片描述

IAR的Embedded Workbench系列是一种增强型一体化嵌入式集成开发环境,其中完全集成了开发嵌入式系统所需要的文件编辑、项目管理、编译、链接和调试工具。IAR公司独具特色的C-SPY调试器,不仅可以在系统开发初期进行无目标硬件的纯软件仿真,也可以结合IAR公司推出的J-Link硬件仿真器,实现用户系统的实时在线仿真调试。如今软件本版已经更新到9.40。在这里插入图片描述IAR的Embedded Workbench系列源自浏览器(Source Browser)功能利用符号数据库使用户可以快速浏览源文件,可通过详细的符号信息来优化变量存储器。文件查找功能可在指定的若干种文件中进行全局文件搜索。还提供了对第三方工具软件的接口,允许用户启动指定的应用程序。IAR的Embedded Workbench系列适用于开发基于8位、16位以及32位微处理器的嵌入式系统,其集成开发环境具有统一界面,为用户提供了一个易学易用的开发平台。IAR公司提出了所谓“不同架构,惟一解决方案”的理念,用户可以针对多种不同的目标处理器,在相同的集成开发环境中进行基于不同CPU的嵌入式系统应用程序开发,有效提高工作效率,节省工作时间。IAR的Embedded Workbench系列还是一种可扩展的模块化环境,允许用户采用自己喜欢的编辑器和源代码控制系统,链接定位器(XLINK)可以输出多种格式的目标文件,使用户可以采用第三方软件进行仿真调试和芯片编程。2022年3月16日,嵌入式开发软件和服务的全球领导者IAR Systems日前宣布:其专业开发工具链IAR Embedded Workbench® for RISC-V现已支持64位RISC-V内核。凭借此次在内核支持能力方面的扩展,IAR Systems在为RISC-V提供专业开发解决方案方面继续走在前沿。

(注:以上资料来自网络)

1. IAR的安装

我们所说的IAR for ARM其实是Embedded Workbench for ARM,即嵌入式工作平台,在有些地方也会看见IAR EWARM,其实它们都是同一个集成开发工具软件,只是叫法不一样而已。开发的一个集成开发环境(简称IAR EWARM,也简称为IAR for ARM)。比较其他的ARM 开发环境,IAR EWARM 具有入门容易、使用方便和代码紧凑等特点。AR for ARM现在(2016年10月)最新版本V7.80,支持的器件包含Cortex-A、Cortex-R、and Cortex-M系列等多大几千种,具体可以到IAR官方网站(https://www.iar.com/)查看。初次接触它的人可遇见不同的版本可能会误以为不是同一个软件,其实是因为IAR更换logo比较频繁,在笔者写本节教程前夕官方又更换了其logo,如文章开头的配图中所示。

(1) 下载IAR集成开发环境安装文件

打开官网(https://www.iar.com/iar-embedded-workbench)下载新版,试用14天或者购买许可,也可以从网上寻找第三方资源下载旧版本。IAR的安装过程大同小异,此处笔者以7.8作为教程演示。当然了,因为某些特殊原因,笔者此处描述可能略有不详,还请结合网上的其他教程。
在这里插入图片描述

(2) 安装

IAR for ARM集成开发环境的安装比较简单(基本上就是一路Next下去)。还是按照常规安装教程讲述一下吧,以上面下载的“EWARM-CD- 7702-11710.exe”软件为例讲述。

1、首先是找到所下载的软件安装包,双击软件安装包程序运行,等待计入如图页面选择第二个B并点击安装IAR。
在这里插入图片描述

2、在安装向导界面点击<下一步>后在新界面选择选择接收许可协议条款如图,然后点击<下一步>。

在这里插入图片描述

3、在如下界面点击 < Change >选择安装路径(默认C盘,如果你的C盘空间比较大可以默认不用改,个人习惯此处笔者安装到D盘目录),点击<下一步> 。
在这里插入图片描述

4、在如下界面勾选需要安装调试的驱动(默认安装所有,但你可以根据个人情况安装,去掉不需要或用不到的驱动以节省安装时间和内存空间),点击<下一步>在这里插入图片描述
5、 如下图,选择安装程序文件夹(这里如果没有特殊需要,默认即可,若你安装多个版本的IAR,可以更改文件夹名称并将不同版本的IAR安装到此目录下),点击<下一步>,在洗一个界面提示(安装路径、驱动等)是否装备好安装,点击< Next > 开始安装。在这里插入图片描述

6、安装过程大概有几分钟,需要等待,然后在弹出的提示框中选择 <是(Y)>进入驱动安装过程。
在这里插入图片描述

7、等待驱动安装完成弹出软件安装完成的提示,在此处有两个选项,这里都不选择,点击下方< Finish >。在这里插入图片描述

8、如图在安装向导界面,选择< Exit > 退出安装管理界面。
在这里插入图片描述

2. 软件注册授权

完成了IAR的安装是不能够满足使用的你还需要注册关于注册,IAR软件的注册是相对复杂一点的,此处不做过多说明,详细教程网上很多,请自行参考,也可以参考这个IAR软件安装图文教程。在官网软件下载网页有相应的软件授权许可提示信息,没有授权的软件仅可试用两周的时间,且对编写的程序大小也做了相应的限制。
在这里插入图片描述
IAR for ARM是一个收费的软件,官方严厉打击盗版,若你是商业用途,建议购买正版授权软件,DIY玩家无所谓了。

二、IAR上手使用(基于STM32标准库新建工程)

以下笔者将基于ST标准库新建STM32工程来介绍IAR如何配置工程环境。首先需要准备两样东西:STM32标准库和IAR集成开发环境。

1、下载标准库文件

STM32的标准库,可以直接去官网(https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries.html)下载不一定需要使最新的版本,选择适合的就可以。

在这里插入图片描述

在这里插入图片描述
值得注意的是,虽然在国内ST设立了官方站点,可以轻松打开访问如上页面,但有些时候选择好了版本,点击下载时在弹出的邮件确认信息反馈可能会有延迟或web页面收不到你确认邮件后的下载请求信息,不过一些热心的网友下载玩完成后将其共享了出来,大家可以直接在一些论坛搜索到并下载,例如笔者在大学的时候经常去逛B站啊、技术论坛之类的,还在CSDN上进行一些嵌入式学习笔记和技术心得等创作,也得到过许多人的认可和点赞。

  • – - - - - - - - - - - - - 一点点废话 - - - - - - - - - - - - - - - - - - - - *
    对于一个初学者而言,兴趣是最好的老师,而在诸多的技术论坛上有许许多多的有趣的开源项目,当你看到他们通过自己编程设计做出来的东西,或趣味十足或科技炫酷,每当我看到诸如此类的东西,内心都非常的激动,很想自己动手制作一个比他们的还要高级的,所以啊者就是我坚持学习的最初动力啊来源,当然也不排除对技术的热爱,或者对未来事业的一丁点长久考虑。言归正传,接下来从新建工程开始,了解主流嵌入式开发软件的基本使用流程。

我用的是F1系列,如果你用的不是F1系列,那么打开上面的链接后找到对应的标准库下载。下载解压完如下图(这里可以看到版本是v3.5.0)。在这里插入图片描述

其中文件夹里面有IAR和MDK的示例工程,也有其他编译器的示例工程,以及相关外设的驱动例程程序。在这里选择我们所需要的一种开发工具即可,不会用到所有的例子,同时如果我们没有买官方的开发板,它的例程摸板也不能直接使用。我们只需要将关键的库文件复制到自己新的项目文件目录下,根据实际中自己所用开发板的资源进行开发修改或编写对应的应用即可。

2、在IAR新建工程

整个流程概括为复制库文件到项目工程磁盘目录 -> IAR新建工作区新建工程 -> 向IAR工程添加工程磁盘目录下的文件 -> 新建并配置IAR工程->正常编译。为了让更多初学者能过够清楚和明白,可以安装下面的详细教程操作。

(1)新建工程文件目录

选择一个合适的磁盘目录新建一个英文工程名作为新建工程的总目录,切记这个工程目录文件夹不能包含中文,同时尽量减少文件夹所在路径长度和路径中空格的出现。原因是如果中文路径和过长且复杂的路径会使得程序编译慢,最重要的时一些跳转操作将不能正常使用。在这里插入图片描述

可以看到,笔者在新建目录时还建立了一个MDK的子目录,这是因为为了方便后期工程模板的通用性和可移植性,将IAR和MDK目录 提前建立好,方便后期操作,同样地,在该文件目录下还添加了一个删除无编译过程产生的临时文件的。实际上IAR和MDK在ARM系开发,尤其STM32等系列单片机上的开发使用大同小异,只是工具的使用上和工具环境配置上有些差别,但总体相差不大。笔者对基于标准库新建STM32 IAR工程做了一个简单的结构概括,如图,当然了这些文件夹分类可根据自己的喜好进行调整,只要IAR里对应路径引用正确就可以。在这里插入图片描述

当熟悉MDK的同学自然会更改好地理解,当然了,通过本教程的学习,掌握IAR基于标准库文件新建工程的结构和方法后,对MDK新建工程的文件结构也会有所帮助,相对而言MDK甚至要更简单一些,在此没有用到,故不多赘述,有兴趣的可以参考网上的优质教程,上面的文件结构是笔者个人习惯的方式,不一定就合理正确,这个根据实际使用情况而定。

(2)工程所需库文件准备

将标准库STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\EWARM文件夹里的 .icf 文件全部复制到IAR下的Config文件夹里。然后再将stm32标准库中STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Drivers里的两个文件复制到自建的STM32F1xLIB\Libraries下的Libraries文件夹里。在这里插入图片描述

将标准库中STM32\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
下的 .c和 .h文件分别复制到新建工程文件夹中的两个目录中,也可以直接放到User目录。在这里插入图片描述

最后就是将标准库CMSIS目录下两个问价夹里的文件分别复制到新建工程文件夹中,对应将其中CM3\DeviceSupport\ST\STM32F10x里的startup文件复制到新建的STM32F1xLIB\CMSIS\startup中即可。
在这里插入图片描述

(3)新建IAR工程

打开IAR软件,在上边菜单栏选择 找到并点击确认。在这里插入图片描述

在弹出的工程模板选项界面,选择第一个 也就是空的工程,接着点击。在这里插入图片描述

如上图,当点击确定后让你选择保存工程的选择,这里找到我们一开始咋磁盘目录新建的工程目录文件夹,因为时IAR工程,所以将其保存到对应的IAR目录下,并输入文件名:STM32F1xLIB并点击保存,由于我已经保存过一次所以,可以看到在文件夹中已经有了对应的文件,下表面保存工作空间的也是一样。在这里插入图片描述

确定保存后会返回到,IAR界面,此时继续在左上角的菜单栏选择找到< Save Workspace>
点击进入保存工作空间操作。同上面保存工程一样,我们将工作空间也保存到IAR目录下,一般习惯是将工作空间命名与工程名称一致,当然了,IAR支持一个工作空间下建立多个工程,通过打开不同工程让其处于活跃状态让你操作,但一般情况一个工作空间我们用不着,也就不做区分了。在这里插入图片描述

(4)添加标准库文件到工程中

首先选择工程并右键点击,根据工程结构大致添加到目录:在这里插入图片描述

需要注意的是这里是笔者建立的工程目录结构,仅供参考,因为这个不是一定要建立文件夹,如果你觉得建立文件夹比较麻烦,那也可以将所有用到的文件直接添加到工程中,但是这样可能会因为文件比较多导致在写代码过程中一时间找不到想要的那个,所以笔者还是建议建立几个文件夹和文件目录对应库文件和用户文件做一个简单的区分,以便于修改操作时快速定位到目标文件。在这里插入图片描述

保存完成后接下来就是相关的环境配置,也许你会觉得自己只是新建一个工程,为何如此复杂,但其实者写都是为了后面的程序编写开发工作做一个减法,新建一个好的工程模板并配置好相应的设置,那么以后便可以直接使用模板建立相同类型的新工程,只需要替换对应库文件和做一些很小的环境改变。

3. 配置当前新建工程的环境

(1)选择单片机型号

如图所示,有三种方式可以进入工程配置界面(还有一种是在空白处右击鼠标进入)。在这里插入图片描述

IAR新建空白工程不像MDK,在一开始不会让你选择具体型号的单片机,而是在工程建立完成后的配置环节,进入配置界面后,首先选择自己的开发板型号,打开Project->Options,General Options->Target->Device选择使用的芯片型号,General Options->Library Configuration勾上Use CMSIS,具体操作见下图:
在这里插入图片描述
如图 依次选择自己所使用的芯片型号

在这里插入图片描述

在这里插入图片描述

(2)添加库文件和路径以及宏定义

在C/C++Compiler->Preprocessor 选项栏中,一处是配置头文件目录(为了在每个程序文件中使用#include时不加上路径),另一处是定义全局宏,如下图配置:
在这里插入图片描述
可以看到,通过点选文件夹添加的路径时绝对路径,这样不利于后期工程的移植,此时可以选中该条路径点击向下小箭头,选择第二个相对路径,其中第三个是编译器中所带库的头文件路径,避免工程移植和修改库文件的便捷性,一般选择第二个就可以了。依次将新建工程中所有包含头文件文件夹路径添加上,然后添加一处宏定义。

在这里插入图片描述

  • USE_STDPERIPH_DRIVER:STM32初始文件中用于选择不同的初始程序。
  • STM32F10X_HD :告诉stm32初始文件,编译程序目标型号对应FLSH大小,以便确定程序代码起止空间地址等。

接下来是编译器的相关设设置,主要用作编译链接,所以首先需要配饰链接编译文件的路径。这里注意选择的是我们下载的ST官方标准固件库中配套例程所提供的后缀为.icf的文件,注意选择完成后同样将绝对路径修改为相对路径,这里没有选项修改,可以直接复制前面头文件相对路径的前缀,在输入框中直接编辑即可。

在这里插入图片描述

最后,确定好下载或调试器选择,配置Debugger,在选项中选择自己使用的调试器(如下图),再里把前面的勾打上,点击就完成了所有工程配置。
在这里插入图片描述

4、程序编译测试

这里我们将复制过来的main.c文件中的内容删除或者删除不需要的内容,仅仅保留一个头文件和主函数。或者编写一个简单的闪灯程序进行编译烧录测试。

#include "stm32f10x.h" 
static void LED_GPIO_Init(void)
{GPIO_InitTypeDef  GPIO_InitStruct = {0};    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能GPIOC所在时钟GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_8|GPIO_Pin_13; //引脚选择8和13GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;  	 //设置推挽输出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  	 //电平翻转速度GPIO_Init(GPIOC, &GPIO_InitStruct);
} //毫秒级的延时
static void delay_ms(int ms)     //写一个简单的软件延时函数
{    int i=0;  while(ms--){i=12000;  //自己定义while(i--) ;    }
}int main(void) //主函数
{LED_GPIO_Init();  //调用上面定义的初始化函数对GPIO进行初始化while(1)
{GPIO_SetBits(GPIOA,GPIO_Pin_8);   //PA8 输出高电平GPIO_SetBits(GPIOC,GPIO_Pin_13);  //PC13 输出高电平delay_ms(300);      			  // 延时GPIO_ReSetBits(GPIOA,GPIO_Pin_8); //PA8 输出低电平GPIO_ResetBits(GPIOC,GPIO_Pin_13);delay_ms(300);} 
}

在这里插入图片描述

如果你前面的步骤完全是和笔者一样,那么恭喜你,此处一定会有一大堆报错,仔细一看上百个。怎么办呢,是不是想要放弃了? 这才刚刚开始,怎么能轻言放弃?听我仔细道来。

因为ST官方推出HAL库后近年来主推图形化快速配置,通过STM32cubeMX和STM32cubeIDE停止标准库的更新,虽然从官方下在的库是3.5.0版本,但由于缺少对其的维护,个别文件版本一九很老,所以再次不适配其中的一些函数啊,模块的兼容。所以不能够直接使用,而像IAR或者Arm MDK在更新自家工具版本的同时也会对其所支持的芯片固件库进行一个更新,如果不使用官方下载的固件库新建工程而直接基于集成开发环境新建工程使用集成开发环境自带新版库则不太会出现这种问题。
言归正传,解决办法其实是非常的简单粗暴的。主要基于是从IAR或者MDK自带库中复制一个直接替换新建工程中所使用的文件即可。这里因为“core_cm3.h”这个文件的版本较低导致不兼容,所以直接替换:(找到安装IAR目录下的core_cm3.h复制到新建的ST32工程目录中,替换对应文件)
在这里插入图片描述
如果,这里你觉的找个文件比较麻烦,那还有一个办法,就是直接把它在你的新建工程中删除或重命名其其他名称,总之就是让编译器在你的工程文件夹目录下找不到即可。这样一来,编译器则会自动从编译器自己的固件库中找到它。值得注意的是,编译后还有如下报错
在这里插入图片描述

解决办法,按照报错提示将C/C++ Compiler中的< Language conformance> 从第二个修改为第一个,保存并再次编译。
在这里插入图片描述

在这里插入图片描述
如图,编译完成,看到 “errors:0 ” 和 “ warnings:0 ” 的时候是不是顿时感觉自信心又回来了呢,其实遇见错误并不可怕,可怕的是没有一个鉴定信心去解决问题。笔者以前大多数用的基本都是MDK但只用MDK是不够的,在工程师的眼里,没有哪个工具是可以一直用到底的,工具只多不少,当你掌握的工具越多,在处理一些问题时就有更多的选择,而且这个解决问题的能力和方法乃至效率是会随着经验的积累不断的提升的。

三、结语

这片文章写于2023年4月份,但由于个人比较忙,没时间整理,故才发布,其中提到的新建工程的模板修改好了,已经放至STM32 IAR-MDK通用工程模板。也可以从CSDNSTM32-IAR和MDK通用模板下载。笔者也是如有问题,还请大佬指出。

相关文章:

IAR开发环境的安装、配置和新建STM32工程模板

IAR到环境配置到新建工程模板-以STM32为例 一、 简单介绍一下IAR软件1. IAR的安装&#xff08;1&#xff09; 下载IAR集成开发环境安装文件&#xff08;2&#xff09; 安装 2. 软件注册授权 二、IAR上手使用(基于STM32标准库新建工程)1、下载标准库文件2、在IAR新建工程&#x…...

FPGA优质开源项目 – PCIE通信

本文介绍一个FPGA开源项目&#xff1a;PCIE通信。该工程围绕Vivado软件中提供的PCIE通信IP核XDMA IP建立。Xilinx提供了XDMA的开源驱动程序&#xff0c;可在Windows系统或者Linux系统下使用&#xff0c;因此采用XDMA IP进行PCIE通信是比较简单直接的。 本文主要介绍一下XDMA I…...

NLP:长文本场景下段落分割(文本分割、Text segmentation)算法实践----一种结合自适应滑窗的文本分割序列模型

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…...

商汤科技2021校招-开发大类B卷

笔试时间:2020.09.18,19:00——21:00 岗位:嵌入式软件工程师 题型:单选4道,不定项选择题2道,填空2道,编程2道。 1、单选 1、在一棵二叉树上第5层的结点数最多是:16 第1层1个 2^0 第2层2个 2^1 第3层4个 2^2 第n层 2^(n-1...

陪诊小程序开发|陪诊系统定制|数字化医疗改善就医条件

健康问题这几年成为人们关注的焦点之一&#xff0c;然而看病却是一个非常麻烦的过程&#xff0c;特别是对于那些身处陌生城市或者不熟悉就医流程的人来说。幸运的是现在有了陪诊小程序下&#xff0c;为您提供便捷的助医服务&#xff0c;使得就医过程得更加简单和轻松。 陪诊系统…...

stable diffusion(1): webui的本地部署(windows)

一、前言 是的&#xff0c;现在是202308月份了&#xff0c;网上已经有很多打包好的工具&#xff0c;或者直接进一个web就能用SD的功能&#xff0c;但是我们作为程序员&#xff0c;就应该去躺坑&#xff0c;这样做也是为了能够有更多自主操作的空间。 像其他AI一样&#xff0c…...

(树) 剑指 Offer 36. 二叉搜索树与双向链表 ——【Leetcode每日一题】

❓ 剑指 Offer 36. 二叉搜索树与双向链表 难度&#xff1a;中等 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个 排序的循环双向链表。要求不能创建任何新的节点&#xff0c;只能调整树中节点指针的指向。 为了让您更好地理解问题&#xff0c;以下面的二叉搜索树为…...

TypeScript初学

文章转载&#xff1a;https://blog.csdn.net/weixin_46185369/article/details/121512287 写的很详细&#xff0c;适合初学者看看。 一、TypeScript是什么&#xff1f; 1.TypeScript简称&#xff1a;TS&#xff0c;是JavaScript的超集。简单来说就是&#xff1a;JS有的TS都有…...

C/C++预定义宏

MSVC文档&#xff1a; https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros?viewmsvc-170 GCC文档&#xff1a; https://gcc.gnu.org/onlinedocs/gcc/Function-Names.html https://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html 参考&#xff1a;…...

原型链污染挖掘(存储XSS)

服务XSS响应 将JSON content-type更改为HTML 在Express应用中使用 JSON内容类型响应 并反映一个JSON&#xff1a; app.use(bodyParser.json({type: application/json})); app.post(/, function(req, res){_.merge({}, req.body);res.send(req.body); }); 在这些情况下&…...

Chrome开发者工具介绍

Chrome开发者工具介绍 前言1 打开DevTools2 命令菜单3 Elements面板ConsoleJavaScript调试Network 前言 Chrome开发者工具是谷歌浏览器自带的一款开发者工具&#xff0c;它可以给开发者带来很大的便利。常用的开发者工具面板主要包含Elements面板、Console面板、Sources面板、…...

利用MMPose进行姿态估计(训练、测试全流程)

前言 MMPose是一款基于PyTorch的姿态分析开源工具箱&#xff0c;是OpenMMLab项目成员之一&#xff0c;主要特性&#xff1a; 支持多种人体姿态分析相关任务&#xff1a;2D多人姿态估计、2D手部姿态估计、动物关键点检测等等更高的精度和更快的速度&#xff1a;包括“自顶向下”…...

ROS2 编译含有自定义消息项目报错:msg/detail/header__struct.h: 没有那个文件或目录

项目场景&#xff1a; 当迁移ROS 1 项目到 ROS 2 时&#xff0c;有时候会遇到消息类型的变化和更新&#xff0c;消息类型可能需要进行一些调整以适应新的ROS 2要求。本文将介绍如何处理自定义消息中的Header字段&#xff0c;以确保项目能够顺利地适应ROS 2的消息类型定义。 问…...

线段树思想拆解(下篇)

线段树思想拆解&#xff08;下篇&#xff09; 上篇回顾 到这里我们已经处理好了初始化以及添加方法&#xff0c;接下来实现范围的 query 方法 public int query(int queryL, int queryR) {return query(queryL, queryR, 1, orgLength - 1, 1);}到此为止通过借助 sum 数组&…...

Containerd容器镜像管理

1. 轻量级容器管理工具 Containerd 2. Containerd的两种安装方式 3. Containerd容器镜像管理 4. Containerd数据持久化和网络管理 1、Containerd镜像管理 1.1 Containerd容器镜像管理命令 docker使用docker images命令管理镜像单机containerd使用ctr images命令管理镜像,con…...

Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机当前数据吞吐量(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK里函数来获取相机当前数据吞吐量&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机的数据吞吐量的技术背景CameraExplorer如何查看相机吞吐量信息在BGAPI SDK里通过函数获取相机接口吞吐量 Baumer工业相机通过BGAPI SDK获取…...

Ubuntu服务器版配置wifi

最近把曾经不用的上网本安装了一个Ubuntu-Server版&#xff0c;当成服务器来用&#xff0c;因为家庭网络布线问题&#xff0c;只好用自带的WIFI来连接网络&#xff0c;Server版也没有什么图形化的管理工具&#xff0c;之后手动编辑配置文件了。 Server下面配置起来还是很方便的…...

Windows 主机的VMware 虚拟机访问 wsl-ubuntu 的 API 服务

Windows 主机的VMware 虚拟机访问 wsl-ubuntu 的 API 服务 0. 背景1. 设置2. 删除 0. 背景 需要从Windows 主机的VMware 虚拟机访问 wsl-ubuntu 的 API 服务。 1. 设置 Windows 主机的IP&#xff1a;192.168.31.20 wsl-ubuntu Ubuntu-22.04 的IP&#xff1a;172.29.211.52 &…...

【Spring】(一)Spring设计核心思想

文章目录 一、初识 Spring1.1 什么是 Spring1.2 什么是 容器1.3 什么是 IoC 二、对 IoC 的深入理解2.1 传统程序开发方式存在的问题2.2 控制反转式程序的开发2.3 对比总结 三、对 Spring IoC 的理解四、DI 的概念4.1 什么是 DI4.2 DI 与 IoC的关系 一、初识 Spring 1.1 什么是…...

chrome插件开发实例04-智能收藏夹

目录 功能说明 演示 源码下载 源代码 manifest.json popup.html popup.js background.js 功能说明 基于chrome插件࿰...

iOS技术之 手机系统15.0之后 的 UITableView section header多22像素问题

iOS 15 的 UITableView又新增了一个新属性&#xff1a;sectionHeaderTopPadding 会给每一个section header 增加一个默认高度&#xff0c;当我们 使用 UITableViewStylePlain 初始化 UITableView的时候&#xff0c;就会发现&#xff0c;系统给section header增高了22像素。 解…...

Windows下安装Kafka(图文记录详细步骤)

Windows下安装Kafka Kafka简介一、Kafka安装前提安装Kafka之前&#xff0c;需要安装JDK、Zookeeper、Scala。1.1、JDK安装&#xff08;version&#xff1a;1.8&#xff09;1.1.1、JDK官网下载1.1.2、JDK网盘下载1.1.3、JDK安装 1.2、Zookeeper安装1.2.1、Zookeeper官网下载1.2.…...

linuxARM裸机学习笔记(3)----主频和时钟配置实验

引言&#xff1a;本文主要学习当前linux该如何去配置时钟频率&#xff0c;这也是重中之重。 系统时钟来源&#xff1a; 32.768KHz 晶振是 I.MX6U 的 RTC 时钟源&#xff0c; 24MHz 晶振是 I.MX6U 内核 和其它外设的时钟源 1. 7路PLL时钟源【都是从24MHZ的晶振PLL而来…...

防勒索病毒

随着勒索软件攻击在2023年的激增&#xff0c;网络安全已成为当今最重要的议题之一。根据区块链分析公司Chainaanalysis的最新报告&#xff0c;勒索软件攻击已成为唯一呈增长趋势的基于加密货币的犯罪行为&#xff0c;勒索金额更是比一年前增加了近1.758亿美元&#xff0c;达到4…...

剑指 Offer 53 - II. 0~n-1 中缺失的数字

力扣 一个长度为n-1的递增排序数组中的所有数字都是唯一的&#xff0c;并且每个数字都在范围0&#xff5e;n-1之内。在范围0&#xff5e;n-1内的n个数字中有且只有一个数字不在该数组中&#xff0c;请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 示例 2: 输入: [0,1,2,3,4,5…...

vue2和vue3区别

vue2和vue3的区别有以下8点&#xff1a; 1、双向数据绑定原理不同&#xff1b; 2、是否支持碎片&#xff1b; 3、API类型不同&#xff1b; 4、定义数据变量和方法不同&#xff1b; 5、生命周期钩子函数不同&#xff1b; 6、父子传参不同&#xff1b; 7、指令与插槽不同&#x…...

IMV3.0

经历了两个版本&#xff0c;基础内容在前面&#xff0c;可以使用之前的基础环境&#xff1a; v1&#xff1a; https://blog.csdn.net/wtt234/article/details/132139454 v2&#xff1a; https://blog.csdn.net/wtt234/article/details/132144907 一、代码组织结构 二、代码 2.…...

怎么在树莓派环境上搭建web网站,并发布到外网可访问,今天教给大家

怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f; 文章目录 怎么在树莓派上搭建web网站&#xff0c;并发布到外网可访问&#xff1f;概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS测试 web 站点安装静态样例站点 将web站点发布到公网安装 Cpolarcpo…...

大文件传输软件| 生命科学中的关键因素

在2023年&#xff0c;生命科学领域以及其先进的科学技术吸引了人们的目光。这些研究背后&#xff0c;很少有人知道的是&#xff0c;其中涉及了大量的研究数据需要实时进行文件传输&#xff0c;以便于研究&#xff0c;合作&#xff0c;分享&#xff0c;分析&#xff0c;临床试验…...

varint编码实现原理

简言 1. varint即 variable int&#xff0c;也就是变长整型&#xff0c;在mysql&#xff0c;levelDB&#xff0c;protobuf中都有使用 2. varint编码的优点是对数值较小的数进行编码后占用字节较少&#xff0c;比如[0-127]只占用1个字节&#xff0c;[128~16383]只占用2个字节。…...