探究 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.pswp.cn/diannao/75622.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75622.shtml
英文地址,請注明出處:http://en.pswp.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 …