存储和传输/寻找大端字节序/有哪款MCU或MPU是真支持大端?

news2024/11/15 7:54:55

文章目录

  • 概述
  • ARM基础
    • ARM 不生产芯片
    • ARM分类和命名
    • ARM指令集和架构
    • ARM架构和内核
    • ARM内核和芯片
    • 其他处理器架构
  • 在手册中找寻字节序的踪迹
    • ST 32 MCU 没有大端?
    • Cortex-M 系列
    • Cortex-A 系列
    • Cortex-R 系列
    • 小结
  • 芯片外设支持大端字节序
    • DMAC 支持大端字节序的情况
    • CRC 支持大端字节序的情况
    • DMAC
  • 找到一个大端芯片哦
  • 大端字节序在消亡?
  • 相关文章

概述

我想找到一款支持内存大端字节序存储的MCU或MPU,并为此实践了好几个晚上,本文记录了该过程。除了梳理出些有用的论坛、官网地址外,结合个人理解,也梳理了关于ARM架构、ARM内核、ARM芯片产品等基础知识,了解了大端字节序兴亡史,粗略习得了部分芯片产品(MCU/MPU/SOC等)上局部外设支持大端字节序的情况。

@History
清楚地验证过 AT89C51+Keil 的组合,就是一个实打实的内存大端字节序环境。并在其基础上验证了大端字节序环境下的一些问题,参见 《语言基础/分析和实践 C&C++ 位域结构数据类型》和 《CAN总线/CAN应用层协议设计,理解并实践仲裁段位域定义》等,如,多字节数据在大端下的存储、结构内普通字段或位域字段定义顺序与bit位顺序的关系等。遗憾的是,该环境仅默认支持1字节对齐,不能识别 #pragma pack 宏来设置2或4字节对齐,因此我不能继探索一些问题,如,结构对象在大端环境下的对齐填充规则等。
为了满足心里那点好奇,找到一个可以自然多字节对齐的环境,成了一个目的。使用Qemu虚拟化一个PowerPC是一种方案,整理和实践相关步骤时,遇阻暂停;一般云服务器不支持二次虚拟,也办不了。有不少人提到基于ARM核的MCU或MPU是支持大小端字节序设置的,尤其是A9系列被多次提及,但我查阅了十几种处理器芯片的数据手册,并没有找到真正支持内存大端字节序的微控制器或微处理器。本文之前所查阅的ARM系列芯片中,虽有大小端字节序寄存器标识位,但都是只读,默认小端。
@History
再后来,直至结束这篇文章的编写,我也没有搞定一个符合自己上述理想的大端环境。但是我搞明白了,几乎所有的与大端有关的问题,都可以在 AT89C51+Keil 这个环境下测试,只要你手段和方法到位。实际上在上以段落中提到的两篇文章也是如此实践的。

转载请标明出处,
https://blog.csdn.net/quguanxin/category_10527523.html

ARM基础

ARM(Advanced RISC Machines) 是一家总部位于英国剑桥的半导体和软件设计公司,专注于开发基于精简指令集架构的处理器技术。2024年6月16日消息,根据最新市值计算,Arm股价约合人民币12001亿元。挑了一些我比较感兴趣的历史,
1990年,Acorn为了ARM更好地发展同时减少公司的财务压力,Acorn将子公司ARM独立出来,并接受了苹果和VLSI的投资,ARM正式成为一家独立的合资公司。同年,ARM决定改变他们的产品策略:他们不再生产芯片,转而以授权IP的方式,将芯片设计方案卖给其他公司,收取一次性技术授权费和版税提成。这是一种全新的商业模式,极大地降低了ARM自身的研发成本和研发风险。2016年,曾经投资阿里巴巴的孙正义和他的日本软银集团,以243亿英镑(约309亿美元)收购了ARM集团,ARM退市。软银集团表示,收购后将继续支持ARM的独立经营。2020年,NVIDIA宣布出价400亿美元从日本软银集团手中收购ARM,但此项收购遭到监管机构和大型企业(例:高通、微软、Google等)的一致反对,2022年,收购案正式宣告失败。
无风不起浪,既然不少人提到ARM是支持大小端字节序的,那么大概率,至少在ARM的某些层级上(如架构、内核、芯片)、或者是某些ARM芯片、或内存存储或其他外设传输,存在支持或部分支持的情况。本小节先来搞清楚ARM的 “版本” 或 “层级” 等概念。

ARM 不生产芯片

ARM不生产处理器芯片,而是通过许可授权处理器核心IP(Intellectual Property,知识产权),允许合作伙伴设计、制造和销售基于ARM架构的处理器。该模式使得ARM处理器在全球范围内被广泛应用,并且在移动计算、物联网、汽车、工业控制等领域发挥着重要作用。
在这里插入图片描述

ARM分类和命名

ARM设计的处理器以其低功耗、高性能和高度灵活性而闻名,被许多芯片制造商采用并集成到其产品中。为更好地适应不同市场的差异化需求,2004年以后,ARM公司放弃了之前ARM+数字的命名方式(如ARM7,ARM8、ARM11等),转而用cortex来命令处理器产品,并分为三大产品线,分别是Cortex-A、Cortex-R和Cortex-M。近年推出的cortex-X并不是单独的产品线,它可看做cortex-A的升级版。

ARM除了按照上述产品线分类,也可以按照v7、v8等架构版本进行分类。这使得帮助用户可根据应用场景、性能要求、功耗需求等因素,更快更好地理解和选择适合自己需求的ARM处理器,找到适合自己的解决方案。
按照A、R、M系列分类,主要是根据处理器的应用场景和功能特性来划分:
Cortex-A系列适用于应用处理器,具有强大的计算性能和多核处理能力,适合用于智能手机、平板电脑、服务器等高性能应用。Cortex-R系列适用于实时处理器,具有可靠的实时性能和较低的延迟,适合用于实时控制系统、通信基础设施等要求高可靠性的应用。Cortex-M系列适用于微控制器,具有低功耗、低成本、小尺寸等特点,适合用于嵌入式系统、物联网设备等低功耗应用。
按照v7、v8等架构版本分类,主要是根据ARM处理器的指令集架构版本来划分:
ARMv7架构是较早的版本,支持32位指令集,包括了较多的优化和扩展,被广泛应用于移动设备和嵌入式系统。ARMv8架构是较新的版本,支持64位指令集,提供了更高的性能和更大的内存寻址空间,适用于高性能计算、服务器等领域。

ARM指令集和架构

我们通常说的ARM架构,是指ARM指令集和架构。对于ARM的指令集和架构来说,两者是绑定在一起的,一般不分开说这两者,而统一说成ARM指令集架构。指令集是计算机架构设计的重要组成部分,它会影响到架构的性能、可编程性、复杂度等方面。指令集与架构的协同设计可以提高计算机系统的性能和可靠性,并且可以降低计算机系统的设计成本。此外,指令集和架构也可以相互影响,当计算机架构设计变化时,需要相应地更新指令集;而当新的指令集出现时,也会对计算机架构设计产生影响。

ARM直译为先进的精简指令集架构处理器,其中R代表的是 RISC,即 Reduced Instruction Set Computer 的缩写,意为精简指令集处理器架构,ARM是RISC最突出的代表,其它较有名的RISC指令集还有,MIPS、PowerPC、SPARC等。在实际应用中,RISC架构通常被用于高性能计算、嵌入式系统等领域,而CISC,Complex Instruction Set Computing,复杂指令集处理器架构则更多地用于个人电脑、服务器等通用计算场景,耳熟能详的X86指令集就是一种CISC指令集。RISC其设计理念是简化指令集,使得每条指令的执行时间相对较短,指令格式相对简单。CISC其设计理念是通过提供更复杂、功能更丰富的指令集来提高编程效率。此处不再进行深入讨论。

指令集(Instruction Set)是计算机硬件与软件之间的接口规范,是一种约定的机器语言,定义了计算机可以执行的操作,包括运算、存储、传输等,是计算机硬件设计和软件开发的基础。RISC架构倾向于由硬件来完成复杂的指令序列,鼓励编译器优化和减少对缓存和流水线的冲突,以提高整体性能。CISC架构通常具有变长的指令格式,指令集更为复杂,需要更多的硬件支持来解码和执行指令。架构(Architecture)是计算机系统的总体设计,包括计算机硬件的组成、互连方式、指令集、操作系统、编译器等。计算机架构决定了计算机系统的性能、可靠性、扩展性和兼容性等方面。

ARM架构和内核

我们先来整体的看一下ARM架构和内核的对应关系,
在这里插入图片描述
内核 ARM11 对应的是ARM架构 ARMv6,而内核 ARM6/ARM7 都对应 ARMv3 架构(图中省略了其绘制),我们较熟悉的Cotex-M3(如 STM32F103 的内核) 对应的是 ARMv7-M 架构,较熟悉的Cotex-M3(如 STM32F407 的内核) 对应的是 ARMv7E-M 架构,被传的像是一定会支持内存大小端字节序设置的Cotex-A9内核,是基于ARMv7-A架构的。不再赘述。

ARM内核和芯片

ARM芯片是指基于英国ARM(Advanced RISC Machines)架构设计的处理器芯片。内核是相对于完整的芯片来说的,ARM将核心处理器部分设计完成,然后授权给其它芯片设计厂商,其它厂家可根据授权方式进行更改或直接使用,然后发布自己的芯片,这些芯片就是基于ARM内核的。ARM内核有多种类型,比如,ARM6,ARM7,…,ARM11,cortex-M,cortex-R,cortex-A 等。ARM公司在授权合作伙伴IP时,既可授权通用的处理器架构,如,ARMv6-M、ARMv7-M、ARMv7-A,也可以直接授权具体的处理器内核设计,如ARM Cortex - M0、ARM Cortex - M3、ARM Cortex - A8、ARM Cortex - A9 等。这种灵活的授权模式使得合作伙伴可以选择适合自身产品需求的处理器设计方案,从而加快产品上市时间,提高性能和功耗效率。

简单来说,ARM内核是ARM架构的一个具体实现,内核是更具体、更实际的处理器设计。ARM架构是ARM处理器的整体设计和指令集架构,它定义了处理器的指令集、寄存器组织、内存管理单元等基本特性。ARM架构通常被分为不同的系列,如ARMv7、ARMv8等,每个系列都有不同的特性和功能。ARM架构提供了通用的设计框架,供不同的处理器内核实现。ARM内核则是基于ARM架构设计和实现的具体处理器核心。内核是处理器的核心部分,负责执行指令、处理数据、控制流程等任务。ARM内核根据不同的需求和应用场景,可以有不同的设计和配置,例如Cortex-A系列适用于应用处理器,Cortex-R系列适用于实时处理器,Cortex-M系列适用于微控制器等。
例如,
ARM Cortex-M3 处理器系采用 ARMv7-M 架构设定,Cortex-M0和Cortex-M0+则采用类似的ARMv6-M架构。以M型架构为例,在ARM官网上,它包括,
共计4种架构手册,Armv8.1-M Architecture Reference Manual、Armv8-M Architecture Reference Manual、Armv7-M Architecture Reference Manual、Armv6-M Architecture Reference Manual,每种大类架构都有自己的M类型。

其他处理器架构

除了ARM架构外,还有一些其他处理器架构在市场上也具有重要地位,例如:
x86架构:
x86架构是由英特尔(Intel)和AMD等公司推出的一种处理器架构,广泛应用于个人电脑、服务器和工作站等领域。x86架构以其强大的计算性能和广泛的软件支持而闻名,x86架构被归类为复杂指令集计算机(CISC)架构。尽管x86架构是CISC架构,但随着处理器技术的不断进步和优化,现代的x86处理器已经在硬件级别实现了许多优化,使得其在性能和能效方面与RISC架构逐渐拉近。
MIPS架构:
MIPS(Microprocessor without Interlocked Pipeline Stages,无互锁流水线微处理器)是一种精简指令集(RISC)架构,在1981年由斯坦福大学的研究小组开发,其设计初衷是为了克服传统复杂指令集计算机(CISC)架构中的性能瓶颈,提供一种更加高效、简洁的处理器架构。MIPS指令系统以其精简的指令集、通用的多个寄存器、高效的流水线架构等优势,成为了一种高效、可靠的处理器架构,被广泛应用于个人电脑、嵌入式系统、游戏控制台、网络设备和超级计算机等多个领域。
MIPS处理器是八十年代中期RISC CPU设计的一大热点。MIPS是卖的最好的RISC CPU,可以从任何地方,如Sony, Nintendo的游戏机,Cisco的路由器和SGI超级计算机,看见MIPS产品在销售。目前随着RISC体系结构遭到x86芯片的竞争,MIPS有可能是起初RISC CPU设计中唯一的一个在本世纪盈利的。和英特尔相比,MIPS的授权费用比较低,也就为除英特尔外的大多数芯片厂商所采用。MIPS无疑是优秀的,但是基于MIPS的处理器我完全不熟知,这里不再展开。

Power架构:
Power架构是由IBM开发的处理器架构,主要应用于服务器、超级计算机和嵌入式系统等领域。Power架构以其高性能和可靠性而著称。PowerPC(Power Personal Computing)是基于Power架构的一种处理器架构,最初由IBM、摩托罗拉(Motorola)和苹果(Apple)共同合作开发。PowerPC架构具有精简、高性能和低功耗的特点,被广泛应用于个人电脑、工作站、服务器和嵌入式系统等领域。虽然PowerPC架构在个人电脑领域的市场份额较小,但在工业控制、航空航天、军事等领域仍然有着重要的应用。Power架构和PowerPC处理器在高性能计算和企业级应用领域表现出色,为用户提供了可靠的计算解决方案。

AVR架构:
AVR架构是由Atmel(后来Microchip Technology收购了Atmel,Microchip)公司开发的一种低功耗、高性能的8位和32位(主要是8位)微控制器架构。AVR架构主要用于嵌入式系统领域,广泛应用于家用电器、智能设备、自动化控制、传感器接口等各种应用场景。相比于ARM,AVR可能并不适用于复杂的应用场景,AVR架构更注重低功耗设计,适合需要长时间运行的电池供电设备和低功耗应用。相比于ARM,AVR架构的微控制器也集成了一些常用的外设,但通常更适用于简单的嵌入式控制和传感器接口,但谈不上是丰富的。ARM架构适用于需要高性能、复杂功能和广泛应用的场景,而AVR架构适用于对低功耗、简单功能和成本敏感的场景。

在手册中找寻字节序的踪迹

包括在 ARM、ST、MicroChip 等官方论坛中,都可以见到 " many Cortex-A (perhaps all) offers big endian support " 诸如此类的说辞。如,点进 ARM 论坛 中,可搜索 Endian…
在这里插入图片描述

ST 32 MCU 没有大端?

不谈8位单片机,至少到现在,我没有发现ST的32位芯片中有支持大端字节序的MCU或MPU。而且我咨询过ST的 在线技术支持 ,也没有得到明确的结果。
在这里插入图片描述
ST的技术支持隔了一天就给了我回复,表示他们也不知道…
在这里插入图片描述

Cortex-M 系列

刚开始我从网络上随意浏览到到信息中,有人说,ARM-M系列是小端,也有人说,它是支持大端的。我先从 ST 意法半导体的 ARM 32位M系列微控制器,下载查看M3相关数据手册,如下,
在这里插入图片描述
连续的查看了M3、M4系列的几款MCU的数据手册,几乎如上,它们的AIRCR寄存器中的 Endian位,但都是只读的,并不可写,只能是默认的小端字节序模式。那,这算是支持还是不支持呢?哈哈,有字节序标识位,虽然是只读的,但也说明架构或内核或芯片的开发者是想法的,至少是保留了一种手段。

一份来自ARM论坛的参考,读到,
Cortex-M cpus can be little-endian or big-endian, but it can’t switch between endianess without at least a chip RESET (pick one during board-level design) or possibly a chip re-design (pick when creating the chip.) I’ve never seem anything by little-endian-only chips in the marketplace. See Section A3.3 “Control of endianness in ARMv7-M” in the ARMv7-M Architecture Reference Manual.
正是受到了上边这句话的启发,我去探究了ARM架构和内核的关联,已经整理在了本文的前述章节中。还是以ARM-M3为例,它对应的是ARMv7-M 指令集架构。于是我转移到ARM官网,并从中搜寻下载,M3对应架构的手册 ARMv7-M 架构手册,其中关于字节序的控制说明如下,
在这里插入图片描述
如上图,清楚说明了,Armv7-M 指令集架构是支持字节序模式选择的。在(芯片)复位时,通过一个控制输入确定字节序是大端(BE)还是小端(LE),即 AIRCR.ENDIANNESS 位指示字节序。但是这种字节序映射有以下限制:
1、字节序设置仅适用于数据访问。指令获取始终为小端。(划重点)
2、对SCS的所有访问都是小端。SCS 是 System Control Space 缩写,它是在Arm架构处理器中定义的一个特殊地址空间,用于存储系统控制寄存器和与系统控制相关的重要信息,其中包含了一些关键的系统控制寄存器,用于配置和管理处理器的各种功能和特性。

如果需要实现支持大端指令获取,可以在总线结构中实现此功能。具体描述如下,
在这里插入图片描述
如上所描述,
Armv7-R 支持以大端和小端格式进行指令获取,格式由系统控制寄存器中的IE位确定。Armv7-M 只支持以小端格式进行指令获取。在需要使用大端指令格式的 Armv7-M 实现中,总线结构必须在半字内提供字节交换。字节交换仅适用于指令获取,不得在数据访问时发生。
Armv7-M和Armv7-R都支持可配置的字节序模型用于数据访问。Armv7-R通过其xPSR和System Control寄存器中的EE位支持动态字节序控制,而 Armv7-M 在复位时是静态配置的。在手册的 A3.3 Endian support 章节中,还详细的描述了在大端和小端字节模式下,字、半字、字节的存储,这算是一种对字节序的权威定义吧,我在《网络通信/大小端字节序由来、决定因素、给编程带来的困扰》中详细讲述了这段,这里仅简单介绍。
在这里插入图片描述
至此,我只能说是,手眼所及之处,我没有找到可以真正支持大端字节序的基于ARM-M3内核的处理器芯片。但这并不能代表,不存在基于ARM-M3的支持内存大端字节序的芯片,毕竟我所看到的芯片产品,只是沧海几粟。更重要的原因是,毕竟ARM-M3的根基 Armv7-M 架构,是可以支持大端字节序的。因此,只能说基于 Cortex-M3 或 Cortex-M4 内核的芯片是有可能支持大端字节序的,我现在没找到,即使真的现在不存在,未来也可能有厂商去生产,只要有需求和市场。

Cortex-A 系列

看到网络上有人说,Cortex-A9 内核的处理器是支持大小端字节序设置的,我挺高兴的。因为公司恰好有款开发版,其中搭载了赛灵思(Xilinx)的Zynq 7000芯片。该系列芯片结合了ARM Cortex-A9处理器核心和赛灵思的可编程逻辑资源,提供了高度集成的处理和可编程能力。开始我将重点放在了对 Xilinx 数据手册和产品手册上,但是并没有找到内存字节序Endian的蛛丝马迹。结合前文,我们也可以知道 Cortex-A9 对应的是 Armv7-A 架构,于是我转移了战线,
如下,在ARM开发网站搜搜 Armv7-A 编程手册,
在这里插入图片描述
逐步进入 《ARM Cortex-A Series Programmer’s Guide for ARMv7-A 》 Ver4.0 ,下载并打开,查找Endian相关信息,可以发现一大堆,其中不乏关于大小端字节序的有效权威信息。在 Chapter 14 讲移植的章节中,甚至系统详细地讲述了大端和小端系统都有哪些典型案例、字节对齐的案例等,想当初我还是在网络上零散习得类似知识,哎,真有点后悔没早与之相识。谈回本小节的重点,Cortex-A 系列到底是否支持大端字节序,参考上述手册14.1小节的讲述,
在这里插入图片描述
如上,Cortex-A系列处理器支持两种端序配置的系统,由CPSR E位控制,该位允许软件动态切换数据的大小端字节序模式。但内存中的指令始终被视为小端序。REV指令可用于在ARM寄存器内部反转字节,提供大端和小端格式之间的简单转换。

我忍不住要再说一遍,《ARM Cortex-A Series Programmer’s Guide for ARMv7-A 》 Ver4.0 ,这个手册绝对是研究大小端字节序的超级优秀资料,干活太多了,如果哪位朋友时间宽裕,建议好好读读。

哈哈,实验室有块 Zynq 7000 的开发板,我却没有从其相关数据手册中找到任何关于大小端设置的寄存器或配置说明。会用这块Zynq板子的人也早就离职了,没有现成的环境,我看了下相关教学视频,太繁杂,要好几十个小时才能入门,我最终还是放弃了。

Cortex-R 系列

我们再倒回头去(后来在 Armv7-M 架构手册中读到的)
Armv7-M和Armv7-R都支持可配置的字节序模型用于数据访问。Armv7-R通过其xPSR和System Control寄存器中的EE位支持动态字节序控制,而 Armv7-M 在复位时是静态配置的。
上述这段话,重新这勾起了我的好奇心。可惜我时间太紧,暂时不能去研读了。这里只是附上 《ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition》 架构手册,以备后用。

小结

参考 《ARM Cortex-A Series Programmer’s Guide for ARMv7-A 》 Ver4.0 第14.1 章节,
在这里插入图片描述
如上所述。ARM核心支持两种模式,但最常用的,通常默认为小端模式。大多数用于ARM的Linux发行版倾向于仅支持小端序。x86架构是小端序的。另一方面,PowerPC或传统的68K通常是大端序,尽管Power架构也可以处理小端序。几种常见的文件格式和网络协议指定了不同的字节序。例如,.BMP和.GIF文件是小端序的,而.JPG是大端序的,TCP/IP是大端序的,但USB和PCI是小端序的。
在这里插入图片描述
如上描述,传输和存储,被归为一类,即数据共享。

芯片外设支持大端字节序

在前期查询ARM-M和ARM-A系列的芯片手册时,虽然没有找到可以直接设置内存字节序的寄存器标记位,但是却有了些其他的意外收获。如下列举了在芯片外设层级上支持大端字节序的情况。

DMAC 支持大端字节序的情况

ST 没有ARM-A9的具体产品,之前有,但似乎是停产了,相关文档都标注了废弃,不过我还是打开了其中的一份,找到了一丝丝 endian 的痕迹,如下,
在这里插入图片描述

CRC 支持大端字节序的情况

在阅读 microchip公司(2016年以36亿美元收购Atmel公司)的 PIC32MZ EC 是32位嵌入连接系列MCU数据手册时,发现,其采用MIPS microAptiv或 M4K内核,虽然不支持内存大小端字节序配置,如下,
在这里插入图片描述
但是在搜索的过程中我发现,这款芯片的 AXI Block RAM(BRAM) Controller 相关章节中,提及到:
在这里插入图片描述

DMAC

在查看一些数据手册的时候,我发现有不少产品的DMAC(直接内存访问控制器 )大多是可以配置大小端字节序模式的。后来,也发现SPI、IIS等控制器,很多情况下支持大小端设置。

找到一个大端芯片哦

我嘚瑟了,我终于找到了。哈哈,纯属巧合,最早参与Power微处理架构研制的三大巨头,Apple、IBM、Motorola,一定是最擅长大端字节序系统的吧。我记错了,我想着 Atmel 是其中之一来,哈哈,所以就在MicroChip的网站上,视图能找到一个支持大端字节序的,阴差阳错找到啦。具体的,在MicroChip 产品中按照下图顺序找到 AT32UC3xxxx,在这里插入图片描述
随便打开一个具体型号,如第一个 AT32UC3C0512C,在Doc部分下载并打开 Atmel AVR 32-bit Architecture Manual - Complete Datasheet 手册,搜索Endian,可得,
在这里插入图片描述
我还找到了上述产品的最小开发板,倒是不贵,哈哈,可是AVR的调试仿真器,真是逆天的贵,我买不起,于是到此结束。

大端字节序在消亡?

那就消亡呗,反正事实是这样的,哈哈。

相关文章

《CAN总线/CAN应用层协议设计,理解并实践仲裁段位域定义》
《语言基础/分析和实践 C&C++ 位域结构数据类型》
《网络通信/大小端字节序由来、决定因素、给编程带来的困扰》
《存储和传输/探究普通结构和位域结构体数据在内存中的字节对齐规则》
《网络通信/协议栈内网络字节序与主机字节序的转换实现》
《网络编程/在哪些场景中不必要进行网络字节序装换? Windows Sockets: Byte Ordering》

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

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

相关文章

SpringBoot接入高德地图猎鹰轨迹服务API

SpringBoot接入高德地图猎鹰轨迹服务API 一、AP文档 猎鹰轨迹服务API文档 二、页面图 1、需登录账号,申请对应的应用key值 三、代码部分: 1、控制层 RestController RequestMapping("/gdTrack") public class TrackController {private …

VS Code开发C#(.NET)之快速入门

本篇快速介绍在VS Code中开发C#的完整说明和示例: 环境准备 安装VS Code: 前往Visual Studio Code官网 下载并安装VS Code。 安装.NET SDK: C#是基于.NET框架的,因此需要安装 .NET SDK。 前往 .NET官网 下载并安装适用于操…

【微信小程序】自定义组件 - 插槽

1. 什么是插槽 2. 单个插槽 在小程序中,默认每个自定义组件中只允许使用一个 进行占位,这种个数上的限制叫做单个插槽。 3. 启用多个插槽 在小程序的自定义组件中,需要使用多 插槽时,可以在组件的 .js 文件中,通过…

数据库之间表的迁移

什么时候用? 相信大家在开发中,会先在本地和测试环境的数据库去建立表,没问题了再去正式环境建立相同的表。或者我们有旧系统和新系统,要把旧系统里面的数据库某个功能的相关的表给导出来,这时候就会发生表的数据迁移…

【网络安全】漏洞挖掘:IDOR实例

未经许可,不得转载。 文章目录 正文 正文 某提交系统,可以选择打印或下载passport。 点击Documents > Download后,应用程序将执行 HTTP GET 请求: /production/api/v1/attachment?id4550381&enamemId123888id为文件id&am…

Vue3 的 expose 介绍

在 Vue 3 中,expose 是一个用于控制组件内部方法和属性暴露给父组件的新功能。这使得父组件可以调用子组件内部的方法或访问其数据,尤其在使用组合式 API(Composition API)时,这种能力非常有用。 1. 基本用法 expose…

目标检测 | yolov9 原理和介绍

相关系列: 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…

【LeetCode每日一题】——301.删除无效的括号

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 广度优先搜索 二【题目难度】 困难 三【题目编号】 301.删除无效的括号 四【题目描述】 给…

C++ 内存布局 - Part4: 多继承与this指针调整

1. 多继承代码 #include <iostream> #include <cstdio> using namespace std;class Base1 { public:virtual void fooA() { cout << "Base1::fooA" << endl; }virtual void fooB() { cout << "Base1::fooB" << endl;…

叉车ai行人防撞预警系统,前后盲区防撞报警,让行车更安全!

标准配件&#xff1a;主机前/后/内置3个镜头喇叭电源线保险丝摄像头固定支架&#xff08;含螺丝&#xff09;天线主机固定胶条 九盾叉车ai行人防撞预警系统功能主要透过三颗独立摄像头&#xff0c;结合深度学习算法以完成机器视觉的识别工作。其中两颗具备补光设计的超广角摄像…

文本匹配任务(上)

文本匹配任务 1.文本匹配介绍1.1文本匹配定义1.1.1狭义定义1.1.2广义定义 1.2文本匹配应用1.2.1问答对话1.2.1信息检索 2.文本匹配--智能问答2.1基本思路2.2技术路线分类2.2.1按基础资源划分2.2.2 答案生成方式2.2.3 NLP技术 2.3智能问答-Faq知识库问答2.3.1运行逻辑2.3.2核心关…

DC-DC FB分压电阻计算 (MP1584 SY8205为例)

【本文发布于https://blog.csdn.net/Stack_/article/details/141371702&#xff0c;未经许可不得转载&#xff0c;转载须注明出处】 获取文件 【MP1584 MP2451 SY8205 SY8201 FB分压电阻计算】 一般DC-DC芯片对输出电压的调节&#xff0c;是以FB引脚达到0.6V或者0.8V为止的&…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第六篇 嵌入式GUI开发篇-第八十五章 Qt控制硬件

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【Java 数据结构】排序

排序 排序排序是什么排序相关概念稳定性比较排序非比较排序内部排序外部排序 常见比较排序冒泡排序基本思想代码实现 选择排序基本思想代码实现 插入排序基本思想代码实现 希尔排序基本思想代码实现 堆排序基本思想代码实现 快速排序基本思想代码实现优化其他实现寻找基准非递归…

如何使⽤组将⼀个文件拆分成多个文件 (LINQ)(C#)

文章目录 一、背景二、实现步骤三、完整示例四、总结 在日常开发过程中&#xff0c;我们可能会遇到需要将一个大型文件拆分成多个小文件的需求。例如&#xff0c;为了便于传输、处理或备份&#xff0c;我们可以将一个大的日志文件拆分成多个小文件。在C#中&#xff0c;我们可以…

Spring模块详解Ⅱ

目录 Spring Beans模块详解1. 什么是 Bean?2. Spring Bean的配置方式2.1 基于 XML 配置例子&#xff1a; 2.2 基于注解配置例子&#xff1a; 2.3 基于 Java 配置&#xff08;JavaConfig&#xff09;例子&#xff1a; 3. Bean 的生命周期生命周期回调的例子&#xff1a; 4. Bea…

数据采集-->kafka-->hdfs

数据采集到kafka flume: a1.sources r1 a1.channels c1a1.sources.r1.type TAILDIR a1.sources.r1.filegroups f1 a1.sources.r1.filegroups.f1 /opt/installs/flume1.9/job/a.log a1.sources.r1.positionFile /opt/installs/flume1.9/job/taildir-kafka.jsona1.channe…

react antd TreeSelect实现自定义标签

<ProFormTreeSelectlabel"接收对象"name"receiverObjects"colProps{{ span: 16 }}labelCol{{span: 6,}}wrapperCol{{span: 18,}}rules{[{ required: true }]}fieldProps{{showSearch: true,multiple: true,// autoClearSearchValue: true,filterTreeNod…

《通义千问AI落地—中》:前端实现

一、前言 本文源自微博客且已获授权,请尊重版权. 书接上文&#xff0c;上文中&#xff0c;我们介绍了通义千问AI落地的后端接口。那么&#xff0c;接下来我们将继续介绍前端如何调用接口以及最后的效果&#xff1b;首先看效果&#xff1a; 上述就是落地到本微博客以后的页面效果…

三角形最小路径和[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个三角形triangle&#xff0c;找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。也就是说&#xff0c;如果…