探究 Arm Compiler for Embedded 6 的 Clang 版本

原创标题:Arm Compiler for Embedded 6 的 Clang 版本
原创作者:庄晓立(LIIGO)
原创日期:20250218(首发日期20250326)
原创连接:https://blog.csdn.net/liigo/article/details/146536353
关键字:Arm Compiler Embedded Clang C++

关于 Arm Compiler for Embedded 6

这是ARM官方网站对Arm Compiler for Embedded 6的基本介绍:

Arm® Compiler for Embedded 6 is the most advanced C and C++ compilation toolchain from Arm for Arm® Cortex® and Arm® Neoverse® processors. Arm Compiler for Embedded 6 is developed alongside the Arm architecture. Therefore, Arm Compiler for Embedded 6 is tuned to generate highly efficient code for embedded bare-metal applications ranging from small sensors to 64-bit devices.

Arm Compiler for Embedded 6 is a component of Arm Development Studio and Arm Keil MDK. The features and processors that Arm Compiler for Embedded 6 supports depend on the product edition. See Compare Editions for Arm Development Studio.

You can use Arm Compiler for Embedded 6 from Arm Development Studio, Arm Keil MDK, or as a standalone product.

以上信息来源:https://developer.arm.com/documentation/100748/0623/Getting-Started?lang=en

根据官方信息,Arm® Compiler for Embedded 6 (下文将简称AC6) 是基于LLVM和Clang定制开发的:

Arm® Compiler for Embedded 6 combines the optimized tools and libraries from Arm with a modern LLVM-based compiler framework.

The compiler is based on LLVM and Clang technology. Clang is a compiler front end for LLVM that supports the C and C++ programming languages.

以上信息来源:https://developer.arm.com/documentation/100748/0623/Getting-Started/Tools-and-libraries-provided-with-Arm-Compiler-for-Embedded-6

AC6最早的正式版本6.00发布于2014年4月10日,是对上一代产品AC5的替代:

Arm Compiler 6.00 (build 18) was released on 10 Apr 2014.

armclang is the successor to armcc and is based on LLVM technology.

ARM Compiler 6 adopts the LLVM integrated assembler as default because it aligns more closely with GNU assembler syntax, improving portability between GNU and ARM Compiler toolchains.

以上信息来源:https://developer.arm.com/documentation/107857/6-00/?lang=en

AC6当前最新版本是6.23(发布于2024年10月16日),下一个版本6.24尚未发布:

The 6.24 release of Arm Compiler for Embedded (scheduled for April 2025) …

官方明确说明AC6已经处于生命周期的尾声,新的替代品尚未发布:

10 years after the launch of Arm Compiler for Embedded, development is being brought to a close. In order to meet the needs of future developers working with high-power, complex Arm-based embedded projects, changes are needed to the compiler architecture. These architectural changes will appear in the next-generation Arm embedded compiler, Arm Toolchain for Embedded, expected to launch April 2025.

以上信息来源:https://developer.arm.com/Tools%20and%20Software/Arm%20Compiler%20for%20Embedded

为何要问Arm Compiler for Embedded 6的Clang版本

因为它产品首页突出位置介绍armclang编译器实现了标准C/C++规范:

  • Compiler and integrated assembler based on modern LLVM and Clang technology.
  • Supports GNU syntax assembly.
  • Is highly compatible with source code originally written for GCC.
  • Implements specifications including ANSI/ISO C and C++, ABI for the Arm architecture, ABI for the 64-bit Arm architecture, and Arm C Language Extensions (ACLE).

我顺着链接自然就来到网页 https://developer.arm.com/documentation/101754/latest/armclang-Reference/armclang-Command-line-Options/-std

For C++ code, the default is gnu++17. For more information about C++ support, see C++ Status at https://clang.llvm.org.

For C code, the default is gnu11. For more information about C support, see Language Compatibility at https://clang.llvm.org.

它告诉我,想知道AC6对C/C++标准规范的支持情况,要去Clang官网。好吧,我去。去Clang官网一看,C Status / C++ Status,人家说明的很详细,哪个版本开始支持哪些特性,不同历史时期的支持情况都体现出来了。

只有先知道AC6的Clang版本,才能知道它对C/C++标准规范的支持情况。所以问题来了,AC6是基于哪个Clang版本呢?结果全网找不到这个信息,不知为何AC6要刻意隐瞒。

AI也不知道AC6是基于哪个Clang版本

我问了DeepSeek和Kimi,他们都说不知道。

DeepSeek

LIIGO:Arm Compiler for Embedded 6 对应的 clang 版本是什么?

DeepSeek:(已搜索到29个网页) (已深度思考,用时30秒)

DeepSeek思考过程:

好的,我需要回答用户关于Arm Compiler for Embedded 6对应的Clang版本的问题。首先,我得仔细看看用户提供的搜索结果,看看有没有直接提到Clang版本的信息。在网页2中,提到ARM Compiler 6是基于Clang和LLVM技术构建的,特别是从2016年开始使用armclang替代了之前的armcc。这里可能暗示了Clang的版本,但具体版本号没有明确给出。网页4和网页5同样提到armclang基于Clang和LLVM,但同样没有版本号。网页7的安装指南里提到了Arm Compiler for Embedded 6.22,但这里只是版本号,并没有Clang的具体版本。网页10讨论的是AC6和AC5的区别,提到AC6使用armclang基于LLVM,但同样没版本信息。可能需要从其他线索推断。例如,Clang作为LLVM的前端,通常每个编译器版本会对应特定的Clang版本。比如,ARM Compiler 6可能集成某个LLVM版本,而Clang版本通常与之同步。例如,网页2提到Clang是LLVM的前端,而ARM Compiler 6使用现代LLVM框架,可能对应Clang的某个版本。但用户的问题可能更直接。有没有哪个网页明确提到Clang版本?在网页4中提到Arm Compiler 6基于Clang和LLVM,但未具体说明。可能需要参考ARM官方文档,但用户提供的搜索结果中没有直接说明。或许可以结合其他信息。例如,网页10提到AC6支持C++14标准,而Clang在某个版本开始支持C++14。比如Clang 3.4开始支持C++14,但ARM可能使用的是更新的版本。不过这只是推测。或者,查看ARM Compiler的发布说明,但用户提供的搜索结果里没有。例如,网页7提到6.22版本,但未提Clang版本。可能无法准确确定,但根据常见的ARM Compiler版本,如ARM Compiler 6基于LLVM,而每个ARM Compiler版本可能对应特定的LLVM/Clang版本。例如,ARM Compiler 6.6可能对应Clang 6.0,但不确定。可能需要综合多个信息。例如,网页5提到Arm Compiler 6基于LLVM和Clang技术,但具体版本未说明。可能用户提供的资料中没有明确答案,需要指出无法确定,但可能提供相关背景信息。或者,在网页10中提到Arm Compiler 6.14,但不确定对应的Clang版本。所以可能需要回答:Arm Compiler for Embedded 6基于Clang和LLVM,但具体Clang版本可能随ARM Compiler版本不同而变化,建议查看ARM官方文档或编译器版本说明。综上,由于搜索结果中没有明确给出Clang的版本号,可能需要说明无法直接确定,但提供相关背景,例如基于Clang和LLVM框架,但具体版本需参考ARM的发布说明。

DeepSeek正式解答

Arm Compiler for Embedded 6(以下简称AC6)是基于LLVM和Clang技术构建的嵌入式编译工具链,其对应的Clang版本并未在提供的搜索结果中直接明确标注。但根据相关信息可总结以下几点:

  1. 技术架构与Clang的关系
    AC6的核心编译器armclang是Clang的定制版本,整合了LLVM框架和Arm优化的库。Clang作为LLVM的前端,负责代码解析和中间表示生成,而Arm在此基础上扩展了对嵌入式架构(如Cortex-M、Cortex-A等)的优化支持2 7 8。

  2. Clang版本的可能范围

    • 根据AC6的发布时间线(如搜索结果中提到的2016年首次发布),结合Clang的发展历史,推测其可能基于Clang 3.x或更高版本。例如,Clang 3.8(2016年)开始支持C++14标准,而AC6也明确支持C++14,这可能与Clang版本有一定关联1 3。
    • 较新的AC6版本(如6.20.1、6.22)可能对应更新的Clang版本。例如,Clang 10.0(2020年)开始支持Armv8.5-A架构,而AC6支持Armv9-A和Armv8系列架构,暗示其Clang后端可能与此兼容7 9。
  3. 官方文档与版本适配建议
    Arm官方未在搜索结果中公开具体Clang版本,但建议开发者通过以下方式获取准确信息:

    • 使用armclang --version命令查看编译器的详细版本信息(包含Clang和LLVM的版本号)9。
    • 参考Arm官方文档(如《Arm Compiler for Embedded Reference Guide》),其中可能标注了Clang的版本适配关系7。
  4. 实际开发中的注意事项

    • AC6的Clang实现包含了Arm特有的扩展功能(如对TrustZone、SVE2指令集的支持),这些功能可能与标准Clang版本存在差异8 12。
    • 迁移旧项目时需注意,AC6的Clang前端与ARM Compiler 5(基于armcc)不完全兼容,需调整代码和编译选项13 10。

总结:AC6的Clang版本是Arm基于开源Clang/LLVM定制的闭源实现,具体版本号需通过编译器命令或官方文档确认。开发者应关注Arm对Clang的功能扩展和架构优化,而非单纯依赖开源Clang的版本号2 7 9。

Kimi

LIIGO: Arm Compiler for Embedded 6 对应的 clang 版本是什么?

KIMI: (已完成推理) (已阅读 38 个网页) (分析Arm编译器与clang版本关系)

KIMI思考过程:

我先仔细看了用户的问题,他想知道 Arm Compiler for Embedded 6 对应的 clang 版本。我感觉这个问题应该不难,因为 Arm Compiler for Embedded 6 是基于 clang 和 LLVM 技术构建的,应该能找到对应关系。
我先在搜索结果里找找有没有直接提到版本号的。我看到有提到 Arm Compiler for Embedded 6 是基于 clang 和 LLVM 技术构建的,但没有直接说对应的 clang 版本是多少。我有点失望,但也没放弃,继续找找看。
我又看到一些关于 Arm Compiler for Embedded 6 的功能和组件的介绍,比如它包括 armclang、armasm 等工具,还有它支持的架构和编译选项等。这些信息虽然有用,但还是没找到具体的 clang 版本号。
我开始有点焦虑了,因为用户的问题还没解决。我决定换个思路,从 Arm Compiler for Embedded 6 的官方文档入手。我找到了一些官方文档的链接,但文档内容太多,我得仔细筛选。
我先看了文档里关于 armclang 的部分,了解到 armclang 是基于 LLVM 和 Clang 技术的编译器和集成汇编器。这让我确定了 Arm Compiler for Embedded 6 和 clang 的关系,但还是没找到具体的版本号。
我有点沮丧,但突然想到,也许官方文档里有提到 clang 版本的更新日志或者兼容性说明。我赶紧去文档里找找看,结果还真找到了一些线索。文档里提到 Arm Compiler for Embedded 6 会随着 LLVM 和 Clang 的更新而更新,但没有明确说具体的版本号。
我有点无奈,但又不想就这样放弃。我决定再仔细看看文档里有没有其他有用的信息。我看到文档里提到 Arm Compiler for Embedded 6 的一些特性,比如支持 C++14 标准、使用 TrustZone for Armv8-M 为设备创建安全和非安全代码等。这些特性可能和 clang 的版本有关,但还是没找到具体的版本号。
我有点烦躁了,但突然想到,也许可以通过比较 Arm Compiler for Embedded 6 和 clang 的功能来推测对应的版本。我赶紧去查查 clang 的功能更新日志,看看哪些功能和 Arm Compiler for Embedded 6 的特性匹配。
我查到 clang 的一些版本更新日志,发现 clang 3.9 开始支持 C++14 标准,而 Arm Compiler for Embedded 6 也支持 C++14 标准。这让我猜测 Arm Compiler for Embedded 6 可能对应 clang 3.9 或更高版本。
我有点兴奋,但又不敢确定。我决定再查查其他资料,看看有没有更确切的信息。我找到了一些关于 Arm Compiler for Embedded 6 和 clang 兼容性的讨论,但还是没找到具体的版本号。
我有点失望,但又不想就这样放弃。我决定再仔细看看文档里有没有其他有用的信息。我看到文档里提到 Arm Compiler for Embedded 6 的一些编译选项,比如 --target、-mcpu 等。这些选项可能和 clang 的版本有关,但还是没找到具体的版本号。
我有点无奈,但突然想到,也许可以通过查看 Arm Compiler for Embedded 6 的编译器版本信息来推测对应的 clang 版本。我赶紧去文档里找找看,结果还真找到了一些线索。文档里提到可以通过 armclang --version 命令查看编译器版本信息,但没有明确说具体的 clang 版本号。
我有点沮丧,但又不想就这样放弃。我决定再仔细看看文档里有没有其他有用的信息。我看到文档里提到 Arm Compiler for Embedded 6 的一些预定义宏,比如 __ARMCOMPILER_VERSION、GNUC 等。这些宏可能和 clang 的版本有关,但还是没找到具体的版本号。
我有点烦躁了,但突然想到,也许可以通过查看 Arm Compiler for Embedded 6 的编译器版本信息和 clang 的版本信息来推测对应的版本。我赶紧去文档里找找看,结果还真找到了一些线索。文档里提到可以通过 armclang --version 命令查看编译器版本信息,而 clang 的版本信息可以通过 clang --version 命令查看。这让我确定了可以通过比较两个版本信息来推测对应的版本。
我有点兴奋,但又不敢确定。我决定再查查其他资料,看看有没有更确切的信息。我找到了一些关于 Arm Compiler for Embedded 6 和 clang 版本对应关系的讨论,但还是没找到具体的版本号。
我有点失望,但又不想就这样放弃。我决定再仔细看看文档里有没有其他有用的信息。我看到文档里提到 Arm Compiler for Embedded 6 的一些编译器特性,比如支持 TrustZone for Armv8-M、兼容基于 GCC 创建的源代码等。这些特性可能和 clang 的版本有关,但还是没找到具体的版本号。
我有点无奈,但突然想到,也许可以通过查看 Arm Compiler for Embedded 6 的编译器版本信息和 clang 的版本信息来推测对应的版本。我赶紧去文档里找找看,结果还真找到了一些线索。文档里提到可以通过 armclang --version 命令查看编译器版本信息,而 clang 的版本信息可以通过 clang --version 命令查看。这让我确定了可以通过比较两个版本信息来推测对应的版本。
我有点兴奋,但又不敢确定。我决定再查查其他资料,看看有没有更确切的信息。我找到了一些关于 Arm Compiler for Embedded 6 和 clang 版本对应关系的讨论,但还是没找到具体的版本号。
我有点沮丧,但又不想就这样放弃。我决定再仔细看看文档里有没有其他有用的信息。我看到文档里提到 Arm Compiler for Embedded 6 的一些编译器特性,比如支持 TrustZone for Armv8-M、兼容基于 GCC 创建的源代码等。这些特性可能和 clang 的版本有关,但还是没找到具体的版本号。
我有点无奈,但突然想到,也许可以通过查看 Arm Compiler for Embedded 6 的编译器版本信息和 clang 的版本信息来推测对应的版本。我赶紧去文档里找找看,结果还真找到了一些线索。文档里提到可以通过 armclang --version 命令查看编译器版本信息,而 clang 的版本信息可以通过 clang --version 命令查看。这让我确定了可以通过比较两个版本信息来推测对应的版本。
经过这么多努力,我虽然没找到确切的 clang 版本号,但我觉得已经尽力了。我决定把我的推测和找到的线索告诉用户,希望能对他有所帮助。

KIMI正式解答

Arm Compiler for Embedded 6 是基于 Clang 和 LLVM 技术构建的,但具体的 Clang 版本并未在官方文档中明确说明。这意味着 Arm Compiler for Embedded 6 并不直接对应某个特定的 Clang 版本,而是基于 Clang 和 LLVM 技术进行了一些定制和优化。

如果需要更详细的信息,建议查阅 Arm Compiler for Embedded 6 的官方文档或联系 Arm 官方技术支持。

LIIGO出马一个顶俩

我决定自己着手解答“AC6是基于哪个Clang版本”这个问题。

-std=c++17

经过一番摸索和思考,我决定从armclang编译器的-std参数入手寻找线索。

在下面这个网页,armclang Reference 官方文档里,列出了AC6最新版本6.23的编译器支持的-std参数列表:

https://developer.arm.com/documentation/101754/0623/armclang-Reference/armclang-Command-line-Options/-std

Syntax
-std=<name>

Parameters

<name>: Specifies the language mode. Valid values include:

  • c90 C as defined by the 1990 C standard.
  • gnu90 C as defined by the 1990 C standard, with extra GNU extensions.
  • c99 C as defined by the 1999 C standard.
  • gnu99 C as defined by the 1999 C standard, with extra GNU extensions.
  • c11 [COMMUNITY] C as defined by the 2011 C standard.
  • gnu11 [COMMUNITY] C as defined by the 2011 C standard, with extra GNU extensions.
  • c++98 C++ as defined by the 1998 C++ standard.
  • gnu++98 C++ as defined by the 1998 C++ standard, with extra GNU extensions.
  • c++03 C++ as defined by the 2003 C++ standard.
  • gnu++03 C++ as defined by the 2003 C++ standard, with extra GNU extensions.
  • c++11 C++ as defined by the 2011 C++ standard.
  • gnu++11 C++ as defined by the 2011 C++ standard, with extra GNU extensions.
  • c++14 C++ as defined by the 2014 C++ standard.
  • gnu++14 C++ as defined by the 2014 C++ standard, with extra GNU extensions.
  • c++17 C++ as defined by the 2017 C++ standard.
  • gnu++17 C++ as defined by the 2017 C++ standard, with extra GNU extensions.

For C and C++ language support and libc++ library support in Arm Compiler for Embedded 6, see:

  • C language
  • C++ language
  • libc++ C++14
  • libc++ C++17

上述列表中,armclang的-std参数值最新支持到c++17。文档未提及比c++17更新的c++20等,显然是因为尚不支持。

再去查clang何时开始支持-std=c++17?又是何时开始支持-std=c++20?两厢对照,应该能把armclang对应的clang版本限定在某个范围内。

https://godbolt.org/

是时候请出大神Compiler Explorer啦,在线编译集大成者,https://godbolt.org/

Run compilers interactively from your web browser and interact with the assembly

它支持在线调用30多种编程语言的编译器,支持C/C++的gcc, clang, msvc等多种编译器(及其多平台版本和许多历史版本)。但是其中没有AC6和armlang。

godbolt12345.png

进入网站后如上图所示,在1处选择语言C++,在2处选择编译器x86-64 clang 19.1.0,在3处输入Compiler options-std=c++17,点击4处图标按钮打开5处Output输出窗口。

补充说明选择x86-64平台clang的理由:Keil配备了AC6编译器armlong,Keil仅支持Windows平台。

逐步递减2处编译器版本,直到版本4.0时编译报错(错误信息如下),说明4.0还不支持-std=c++17,5.0是首发支持-std=c++17的版本(经查clang 5发布于2017年9月)。

clang 4.0报错信息如下:error: invalid value 'c++17' in '-std=c++17'

在3处输入-std=c++20,2处编译器还是从高版本到低版本递减,前面顺利编译,递减到9.0时编译报错,证明10.0是首发支持-std=c++20的版本(经查clang 10发布于2020年3月)。

clang 9.0报错信息如下:

Output of x86-64 clang 9.0.0 (Compiler #1)
error: invalid value 'c++20' in '-std=c++20'
note: use 'c++98' or 'c++03' for 'ISO C++ 1998 with amendments' standard
note: use 'gnu++98' or 'gnu++03' for 'ISO C++ 1998 with amendments and GNU extensions' standard
note: use 'c++11' for 'ISO C++ 2011 with amendments' standard
note: use 'gnu++11' for 'ISO C++ 2011 with amendments and GNU extensions' standard
note: use 'c++14' for 'ISO C++ 2014 with amendments' standard
note: use 'gnu++14' for 'ISO C++ 2014 with amendments and GNU extensions' standard
note: use 'c++17' for 'ISO C++ 2017 with amendments' standard
note: use 'gnu++17' for 'ISO C++ 2017 with amendments and GNU extensions' standard
note: use 'c++2a' for 'Working draft for ISO C++ 2020' standard
note: use 'gnu++2a' for 'Working draft for ISO C++ 2020 with GNU extensions' standard
Compiler returned: 1

如上已证实clang 5开始支持-std=c++17,clang 10开始支持-std=c++20。而armclang支持前者不支持后者,说明其clang版本大于等于5且小于10,即5, 6, 7, 8, 9其中之一。

-std=c2x-std=c17

-std=c++17-std=c++20跨越的版本区间太多了,会不会有中间某个值比如c++18,c++19什么的?

前文clang 9.0报错时它输出了当前支持的所有-std参数值,这个给了我启发,故意输入错误的-std=liigo参数,让各版本编译器分别报错,就能统计出近年历史上曾经出现过的所有受-std支持的参数值。

终于在切换到C语言后,我找到了-std=c2x-std=c17,二者出现时机都晚于-std=c++17且早于-std=c++20

参照上文采用的方法,发现clang 9.0是首发支持-std=c2x的版本(8.0还不支持),clang 6.0是首发支持-std=c17的版本(5.0还不支持)。

结论

最终起关键作用的是-std=c++17-std=c17。clang从5.0开始支持前者,从6.0开始支持后者。而armclang仅支持前者还不支持后者,证明armclang对应的clang版本一定是5.0。

Clang 5.0发布于2017年9月,到2024年9月已经升级版本到19.1.0。今年是2025年,armclang还停留在clang 5.0,有七年之久没有任何跟进升级,可以说是非常陈旧的版本。不要再对AC6升级内核报任何希望,它即将寿终正寝(参见上文)。

考虑到AC6最早的正式版本6.00发布于2014年4月10日,那时候还没有clang5.0,用的必然是较低版本的clang(大概率是3.x),说明它历史上还是曾经升级过至少一次clang版本。

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

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

相关文章

RedHat7.6_x86_x64服务器(最小化安装)搭建使用记录(二)

PostgreSQL数据库部署管理 1.rpm方式安装 挂载系统安装镜像&#xff1a; [rootlocalhost ~]# mount /dev/cdrom /mnt 进入安装包路径&#xff1a; [rootlocalhost ~]# cd /mnt/Packages 依次安装如下程序包&#xff1a; [rootlocalhost Packages]# rpm -ihv postgresql-libs-9…

浏览器存储 IndexedDB

IndexedDB 1. 什么是 IndexedDB&#xff1f; IndexedDB 是一种 基于浏览器的 NoSQL 数据库&#xff0c;用于存储大量的结构化数据&#xff0c;包括文件和二进制数据。它比 localStorage 和 sessionStorage 更强大&#xff0c;支持索引查询、事务等特性。 IndexedDB 主要特点…

panda3d 渲染

目录 安装 设置渲染宽高&#xff1a; 渲染3d 安装 pip install Panda3D 设置渲染宽高&#xff1a; import panda3d.core as pdmargin 100 screen Tk().winfo_screenwidth() - margin, Tk().winfo_screenheight() - margin width, height (screen[0], int(screen[0] / 1…

Node.js 包管理工具 - NPM 与 PNPM 清理缓存

NPM 清理缓存 1、基本介绍 npm 缓存是 npm 用来存储已下载包的地方&#xff0c;以加快后续安装速度 但是&#xff0c;有时缓存可能会损坏或占用过多磁盘空间&#xff0c;这时可以清理 npm 缓存 2、清理操作 执行如下指令&#xff0c;清理 npm 缓存 npm cache clean --for…

STM32F103_LL库+寄存器学习笔记05 - GPIO输入模式,捕获上升沿进入中断回调

导言 GPIO设置输入模式后&#xff0c;一般会用轮询的方式去查看GPIO的电平状态。比如&#xff0c;最常用的案例是用于检测按钮的当前状态&#xff08;是按下还是没按下&#xff09;。中断的使用一般用于计算脉冲的频率与计算脉冲的数量。 项目地址&#xff1a;https://github.…

【C++进阶二】string的模拟实现

【C进阶二】string的模拟实现 1.构造函数和C_strC_str: 2.operator[]3.拷贝构造3.1浅拷贝3.2深拷贝 4.赋值5.迭代器6.比较ascll码值的大小7.reverse扩容8.push_back尾插和append尾插9.10.insert10.1在pos位置前插入字符ch10.2在pos位置前插入字符串str 11.resize12.erase12.1从…

wokwi arduino mega 2560 - 点亮LED案例

截图&#xff1a; 点亮LED案例仿真截图 代码&#xff1a; unsigned long t[20]; // 定义一个数组t&#xff0c;用于存储20个LED的上次状态切换时间&#xff08;单位&#xff1a;毫秒&#xff09;void setup() {pinMode(13, OUTPUT); // 将引脚13设置为输出模式&#xff08;此…

vue3项目使用 python +flask 打包成桌面应用

server.py import os import sys from flask import Flask, send_from_directory# 获取静态文件路径 if getattr(sys, "frozen", False):# 如果是打包后的可执行文件base_dir sys._MEIPASS else:# 如果是开发环境base_dir os.path.dirname(os.path.abspath(__file…

后端学习day1-Spring(八股)--还剩9个没看

一、Spring 1.请你说说Spring的核心是什么 参考答案 Spring框架包含众多模块&#xff0c;如Core、Testing、Data Access、Web Servlet等&#xff0c;其中Core是整个Spring框架的核心模块。Core模块提供了IoC容器、AOP功能、数据绑定、类型转换等一系列的基础功能&#xff0c;…

LeetCode 第34、35题

LeetCode 第34题&#xff1a;在排序数组中查找元素的第一个和最后一个位置 题目描述 给你一个按照非递减顺序排列的整数数组nums&#xff0c;和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target&#xff0c;返回[-1,1]。你必须…

告别分库分表,时序数据库 TDengine 解锁燃气监控新可能

达成效果&#xff1a; 从 MySQL 迁移至 TDengine 后&#xff0c;设备数据自动分片&#xff0c;运维更简单。 列式存储可减少 50% 的存储占用&#xff0c;单服务器即可支撑全量业务。 毫秒级漏气报警响应时间控制在 500ms 以内&#xff0c;提升应急管理效率。 新架构支持未来…

第十四届蓝桥杯真题

一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹,code中添加fun.c、fun.h、headfile.h文件,去资源包中把lc…

《基于机器学习发电数据电量预测》开题报告

个人主页&#xff1a;大数据蟒行探索者 目录 一、选题背景、研究意义及文献综述 &#xff08;一&#xff09;选题背景 &#xff08;二&#xff09;选题意义 &#xff08;三&#xff09;文献综述 1. 国内外研究现状 2. 未来方向展望 二、研究的基本内容&#xff0c;拟解…

UWP程序用多页面实现应用实例多开

Windows 10 IoT ARM64平台下&#xff0c;UWP应用和MFC程序不一样&#xff0c;同时只能打开一个应用实例。以串口程序为例&#xff0c;如果用户希望同时打开多个应用实例&#xff0c;一个应用实例打开串口1&#xff0c;一个应用实例打开串口2&#xff0c;那么我们可以加载多个页…

Springboot整合Netty简单实现1对1聊天(vx小程序服务端)

本文功能实现较为简陋&#xff0c;demo内容仅供参考&#xff0c;有不足之处还请指正。 背景 一个小项目&#xff0c;用于微信小程序的服务端&#xff0c;需要实现小程序端可以和他人1对1聊天 实现功能 Websocket、心跳检测、消息持久化、离线消息存储 Netty配置类 /*** au…

GitLab 中文版17.10正式发布,27项重点功能解读【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

好消息!软航文档控件(NTKO WebOffice)在Chrome 133版本上提示扩展已停用的解决方案

软航文档控件现有版本依赖Manifest V2扩展技术支持才能正常运行&#xff0c;然而这个扩展技术到2025年6月在Chrome高版本上就彻底不支持了&#xff0c;现在Chrome 133开始的版本已经开始弹出警告&#xff0c;必须手工开启扩展支持才能正常运行。那么如何解决这个技术难题呢&…

字典树与01trie

字典树简介 当我们通过字典查一个字或单词的时候&#xff0c;我们会通过前缀或关键字的来快速定位一个字的位置&#xff0c;进行快速查找。 字典树就是类似字典中索引表的一种数据结构&#xff0c;能够帮助我们快速定位一个字符串的位置。 字典树是一种存储字符串的数据结构…

二十五、实战开发 uni-app x 项目(仿京东)- 前后端轮播图

定义了一个名为 Swiper 的Java类,用于表示一个轮播图实体。它使用了 Jakarta Persistence API (JPA) 来映射数据库表,并使用了 Lombok 库来简化代码。以下是对代码的详细讲解: 1. 包声明 package com.jd.jdmall.model; 这行代码声明了该类所在的包路径为 com.jd.jdmall.mode…

游戏摇杆开发:利用 Windows API 实现摇杆输入捕获

在现代游戏开发中&#xff0c;游戏摇杆&#xff08;Joystick&#xff09;作为一种重要的输入设备&#xff0c;能够为玩家提供更加沉浸式的游戏体验。Windows 操作系统提供了一系列 API 函数&#xff0c;允许开发者轻松地捕获和处理游戏摇杆的输入。本文将介绍如何使用 Windows …