99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式開發(fā)的特點進行簡單的科普與回顧

HOkf_real_farme ? 來源:未知 ? 作者:李倩 ? 2018-06-11 09:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文為RISC-V嵌入式開發(fā)準備篇2:嵌入式開發(fā)的特點介紹。

本文的目的是對嵌入式開發(fā)的特點進行簡單的科普與回顧,為后續(xù)詳細介紹“RISC-V GCC工具鏈”和“RISC-V匯編語言程序設(shè)計”打下基礎(chǔ)。注:本文力求通俗易懂,主要面向初學者,對嵌入式開發(fā)有所了解的讀者可以忽略此文。

在本號上次發(fā)表的文章《編譯過程簡介》中介紹過,嵌入式系統(tǒng)的程序編譯過程和開發(fā)有其特殊性,譬如:

嵌入式系統(tǒng)需要使用交叉編譯與遠程調(diào)試的方法進行開發(fā)。

需要自己定義引導程序。

需要注意減少代碼體積(Code Size)。

需要移植printf從而使得嵌入式系統(tǒng)也能夠打印輸入。

使用Newlib作為C運行庫。

每個特定的嵌入式系統(tǒng)都需要配套的板級支持包。

下文將分別予以介紹。

1 交叉編譯和遠程調(diào)試

在本號上次發(fā)表的文章《編譯過程簡介》中介紹了如何在Linux系統(tǒng)的PC電腦上開發(fā)一個Hello World程序,對其進行編譯,然后運行在此電腦上。在這種方式下,我們使用PC電腦上的編譯器編譯出該PC電腦本身可執(zhí)行的程序,這種編譯方式稱之為本地編譯。

嵌入式平臺上往往資源有限,嵌入式系統(tǒng)(譬如常見ARM MCU或8051單片機)的存儲器容量通常只在幾KB到幾MB之間,且只有閃存而沒有硬盤這種大容量存儲設(shè)備,在這種資源有限的環(huán)境中,不可能將編譯器等開發(fā)工具安裝在嵌入式設(shè)備中,所以無法直接在嵌入式設(shè)備中進行軟件開發(fā)。因此,嵌入式平臺的軟件一般在主機PC上進行開發(fā)和編譯,然后將編譯好的二進制代碼下載至目標嵌入式系統(tǒng)平臺上運行,這種編譯方式屬于交叉編譯。

交叉編譯可以簡單理解為,在當前編譯平臺下,編譯出來的程序能運行在體系結(jié)構(gòu)不同的另一種目標平臺上,但是編譯平臺本身卻不能運行該程序,譬如,在x86平臺的PC電腦上編寫程序并編譯成能運行在ARM平臺的程序,編譯得到的程序在x86平臺上不能運行,必須放到ARM平臺上才能運行。

與交叉編譯同理,在嵌入式平臺上往往也無法運行完整的調(diào)試器,因此當運行于嵌入式平臺上的程序出現(xiàn)問題時,需要借助主機PC平臺上的調(diào)試器來對嵌入式平臺進行調(diào)試。這種調(diào)試方式屬于遠程調(diào)試。

常見的交叉編譯和遠程調(diào)試工具是GCC和GDB。在本號上次發(fā)表的文章《編譯過程簡介》中介紹了如何使用Linux自帶的GCC本地編譯一個Hello World程序并運行。但是,GCC不僅能作為本地編譯器,還能作為交叉編譯器;同理GDB不僅可以作為本地調(diào)試器,還可以作為遠程調(diào)試器。

當作為交叉編譯器之時,GCC通常有不同的命名,譬如:

arm-none-eabi-gcc和arm-none-eabi-gdb是面向裸機(Bare-Metal)ARM平臺的交叉編譯器和遠程調(diào)試器。

所謂裸機(Bare-Metal)是嵌入式領(lǐng)域的一個常見形態(tài),表示不運行操作系統(tǒng)的系統(tǒng)

而riscv-none-embed-gcc和riscv-none-embed-gdb是面向裸機RISC-V平臺的交叉編譯器和遠程調(diào)試器。

本號后續(xù)發(fā)文《RISC-V GCC工具鏈的介紹》將介紹RISC-V GCC工具鏈的更多信息。

2 移植newlib或newlib-nano作為C運行庫

newlib是一個面向嵌入式系統(tǒng)的C運行庫。相對于本號上次發(fā)表的文章《編譯過程簡介》中介紹的glibc,newlib實現(xiàn)了大部分的功能函數(shù),但體積卻小很多。newlib獨特的體系結(jié)構(gòu)將功能實現(xiàn)與具體的操作系統(tǒng)分層,使之能夠很好地進行配置以滿足嵌入式系統(tǒng)的要求。由于專為嵌入式系統(tǒng)設(shè)計,newlib具有可移植性強、輕量級、速度快、功能完備等特點,已廣泛應(yīng)用于各種嵌入式系統(tǒng)中。

由于嵌入式操作系統(tǒng)和底層硬件的多樣性,為了能夠?qū)/C++語言所需要的庫函數(shù)實現(xiàn)與具體的操作系統(tǒng)和底層硬件進行分層,newlib的所有庫函數(shù)都建立在20個樁函數(shù)的基礎(chǔ)上,這20個樁函數(shù)完成具體操作系統(tǒng)和底層硬件相關(guān)的功能:

I/O和文件系統(tǒng)訪問(open、close、read、write、lseek、stat、fstat、fcntl、link、unlink、rename);

擴大內(nèi)存堆的需求(sbrk);

獲得當前系統(tǒng)的日期和時間(gettimeofday、times);

各種類型的任務(wù)管理函數(shù)(execve、fork、getpid、kill、wait、_exit);

這20個樁函數(shù)在語義、語法上與POSIX(Portable Operating System Interface of UNIX)標準下對應(yīng)的20個同名系統(tǒng)調(diào)用完全兼容。

所以,如果需要移植newlib至某個目標嵌入式平臺,成功移植的關(guān)鍵是在目標平臺下找到能夠與newlib樁函數(shù)銜接的功能函數(shù)或者實現(xiàn)這些樁函數(shù)。本號后續(xù)發(fā)文《基于HBird-E-SDK平臺的軟件開發(fā)與運行》將介紹蜂鳥E200的HBird-E-SDK平臺如何實現(xiàn)移植實現(xiàn)newlib的樁函數(shù)。

注意:newlib的一個特殊版本newlib-nano版本進一步為嵌入式平臺減少了代碼體積(Code Size),因為newlib-nano提供了更加精簡版本的malloc和printf函數(shù)的實現(xiàn),并且對庫函數(shù)使用GCC的-Os(側(cè)重代碼體積的優(yōu)化)選項進行編譯優(yōu)化。

3 嵌入式引導程序和中斷異常處理

在本號上次發(fā)表的文章《編譯過程簡介》中介紹了如何在Linux系統(tǒng)的PC電腦上開發(fā)一個Hello World程序,對其進行編譯,然后運行在此電腦上。在這種方式下,程序員僅僅只需要關(guān)注Hello World程序本身,程序的主體由main函數(shù)組織而成,程序員可以無需關(guān)注Linux操作系統(tǒng)在運行該程序的main函數(shù)之前和之后需要做什么。事實上,在Linux操作系統(tǒng)中運行應(yīng)用程序(譬如簡單的Hello World)時,操作系統(tǒng)需要動態(tài)地創(chuàng)建一個進程、為其分配內(nèi)存空間、創(chuàng)建并運行該進程的引導程序,然后才會開始執(zhí)行該程序的main函數(shù),待其運行結(jié)束之后,操作系統(tǒng)還要清除并釋放其內(nèi)存空間、注銷該進程等。

從上述過程中可以看出,程序的引導和清除這些“臟活累活”都是由Linux這樣的操作系統(tǒng)來負責進行。但是在嵌入式系統(tǒng)中,程序員除了開發(fā)以main函數(shù)為主體的功能程序之外,還需要關(guān)注如下兩個方面:

引導程序:

嵌入式系統(tǒng)上電后需要對系統(tǒng)硬件和軟件運行環(huán)境進行初始化,這些工作往往由用匯編語言編寫的引導程序完成。

引導程序是嵌入式系統(tǒng)上電后運行的第一段軟件代碼。引導程序?qū)τ谇度胧较到y(tǒng)非常關(guān)鍵,引導程序所執(zhí)行的操作依賴于所開發(fā)的嵌入式系統(tǒng)的軟硬件特性,一般流程包括:初始化硬件、設(shè)置異常和中斷向量表、把程序拷貝到片上SRAM中、完成代碼的重映射等,最后跳轉(zhuǎn)到main函數(shù)入口。

本號后續(xù)發(fā)文《基于HBird-E-SDK平臺的軟件開發(fā)與運行》將結(jié)合HBird-E-SDK平臺的引導程序?qū)嵗私庖龑С绦虻母嗉毠?jié)。

中斷異常處理

中斷和異常是嵌入式系統(tǒng)非常重要的一個環(huán)節(jié),因此,嵌入式系統(tǒng)軟件還必須正確地配置中斷和異常處理函數(shù)。有關(guān)RISC-V架構(gòu)的中斷和異常的詳細信息,請參見RISC-V中文書籍《手把手教你設(shè)計CPU——RISC-V處理器篇》 中第13章內(nèi)容《不得不說的故事——中斷和異?!贰?/p>

本號后續(xù)發(fā)文《基于HBird-E-SDK平臺的軟件開發(fā)與運行》將結(jié)合HBird-E-SDK程序?qū)嵗私馊绾闻渲弥袛嗪彤惓L幚砗瘮?shù)。

4 嵌入式系統(tǒng)鏈接腳本

在本號上次發(fā)表的文章《編譯過程簡介》中介紹了如何在Linux系統(tǒng)的PC電腦上開發(fā)一個Hello World程序,對其進行編譯,然后運行在此電腦上。在這種方式下,程序員也無需關(guān)心編譯過程中的“鏈接”這一步驟所使用的鏈接腳本,無需為程序分配具體的內(nèi)存空間。

但是在嵌入式系統(tǒng)中,程序員除了開發(fā)以main函數(shù)為主體的功能程序之外,還需要關(guān)注“鏈接腳本”為程序分配合適的存儲器空間,譬如程序段放在什么區(qū)間、數(shù)據(jù)段放在什么區(qū)間等等。

本號后續(xù)發(fā)文《基于HBird-E-SDK平臺的軟件開發(fā)與運行》將結(jié)合HBird-E-SDK的“鏈接腳本”實例了解更多細節(jié)。

5 減少代碼體積

嵌入式平臺上往往存儲器資源有限,嵌入式系統(tǒng)(譬如常見的ARM MCU或8051單片機)的存儲器容量通常只在幾KB到幾MB之間,且只有閃存而沒有硬盤這種大容量存儲設(shè)備,在這種資源有限的環(huán)境中,程序的代碼體積(Code Size)顯得尤其重要,因此,有效地降低降低代碼體積(Code Size)是嵌入式軟件開發(fā)必須要考慮的問題,常見的方法如:

使用newlib-nano作為C運行庫以取得較小代碼體積(Code Size)的C庫函數(shù)。

盡量少使用C語言的大型庫函數(shù),譬如在正式發(fā)行版本的程序中避免使用printf和scanf等函數(shù)。

如果在開發(fā)的過程中一定需要使用printf函數(shù),可以使用某些自己實現(xiàn)的閹割版printf函數(shù)(而不是C運行庫中提供的printf函數(shù))以生成較小的代碼體積。

除此之外,在C/C++語言的語法和程序開發(fā)方面也有眾多技巧以取得更小的代碼體積(Code Size)。

本號后續(xù)發(fā)文《基于HBird-E-SDK平臺的軟件開發(fā)與運行》將結(jié)合HBird-E-SDK平臺實例了解更多“減少代碼體積”的實現(xiàn)細節(jié)。減小代碼體積(Code Size)的方法很多,本文在此不做一一贅述,請初學的讀者自行查閱相關(guān)資料進行學習。

6 支持printf函數(shù)

在本號上次發(fā)表的文章《編譯過程簡介 》中介紹了如何在Linux系統(tǒng)的PC電腦上開發(fā)一個Hello World程序,程序中使用C語言的標準庫函數(shù)printf打印了一個“Hello World”字符串。該程序在Linux系統(tǒng)里面運行的時候字符串被成功的輸出到了Linux的終端界面上。在這個過程中,程序員無需關(guān)心Linux系統(tǒng)到底是如何將printf函數(shù)的字符串輸出到Linux終端上的。事實上,如《編譯過程簡介》中所述,在Linux本地編譯的程序會鏈接使用Linux系統(tǒng)的C運行庫glibc,而glibc充當了應(yīng)用程序和Linux操作系統(tǒng)之間的接口,glibc提供的 printf 函數(shù)就會調(diào)用如sys_write等操作系統(tǒng)的底層系統(tǒng)調(diào)用函數(shù),從而能夠?qū)ⅰ白址陛敵龅絃inux終端上。

從上述過程中可以看出,由于有g(shù)libc的支持,所以printf函數(shù)能夠在Linux系統(tǒng)中正確的進行輸出。但是在嵌入式系統(tǒng)中,printf的輸出卻不那么容易了,基于如下幾個原因:

嵌入式系統(tǒng)使用newlib作為C運行庫,而newlib的C運行庫所提供的printf函數(shù)最終依賴于如本文中所介紹的newlib樁函數(shù)write,因此必須實現(xiàn)此write函數(shù)才能夠正確的執(zhí)行printf函數(shù)。

嵌入式系統(tǒng)往往沒有“顯示終端”存在,譬如常見的單片機其作為一個黑盒子一般的芯片,根本沒有顯示終端。因此,為了能夠支持顯示輸出,通常需要借助單片機芯片的UART接口將printf函數(shù)的輸出重新定向到主機PC的COM口上,然后借助主機PC的串口調(diào)試助手顯示出輸出信息。同理,對于scanf輸入函數(shù),也需要通過主機PC的串口調(diào)試助手獲取輸入然后通過主機PC的COM口發(fā)送給單片機芯片的UART接口。

從以上兩點可以看出,嵌入式平臺的UART接口非常重要,往往扮演了輸出管道的角色,為了能夠?qū)rintf函數(shù)的輸出定向到UART接口,需要實現(xiàn)newlib的樁函數(shù)write,使其通過編程UART的相關(guān)寄存器將字符通過UART接口輸出。本號后續(xù)發(fā)文《基于HBird-E-SDK平臺的軟件開發(fā)與運行》將結(jié)合HBird-E-SDK平臺移植printf函數(shù)的實例了解更多細節(jié)。

7 提供板級支持包

對于特定的嵌入式硬件平臺,為了方便用戶在硬件平臺上開發(fā)嵌入式程序,硬件平臺一般會提供板級支持包(Board Support Package,BSP)。板級支持包所包含的內(nèi)容沒有絕對的標準,通常說來,其必須包含如下內(nèi)容:

底層硬件設(shè)備的地址分配信息

底層硬件設(shè)備的驅(qū)動函數(shù)

系統(tǒng)的引導程序

中斷和異常處理服務(wù)程序

系統(tǒng)的鏈接腳本

如果使用newlib作為C運行庫,一般還提供newlib樁函數(shù)的實現(xiàn)。

由于板級支持包往往會將很多底層的基礎(chǔ)設(shè)施和移植工作搭建好,因此應(yīng)用程序開發(fā)人員通常都無需關(guān)心本文第1.2節(jié)至第1.6節(jié)中描述的內(nèi)容,能夠從底層細節(jié)中被解放出來避免重復建設(shè)而出錯。本號后續(xù)發(fā)文《基于HBird-E-SDK平臺的軟件開發(fā)與運行》將結(jié)合HBird-E-SDK平臺的BSP實例了解更多細節(jié)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3683

    瀏覽量

    131404
  • RISC-V
    +關(guān)注

    關(guān)注

    46

    文章

    2573

    瀏覽量

    48839

原文標題:RISC-V嵌入式開發(fā)準備篇2:嵌入式開發(fā)的特點介紹

文章出處:【微信號:real_farmer,微信公眾號:硅農(nóng)亞歷山大】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    嵌入式開發(fā)就業(yè)還有前景嗎?

    和醫(yī)療器械使用經(jīng)驗。 3)工業(yè)控制 工業(yè)控制是指通過各種控制設(shè)備和系統(tǒng),對工業(yè)生產(chǎn)過程進行監(jiān)測、控制和優(yōu)化。隨著工業(yè)自動化和智能化的發(fā)展,工業(yè)控制領(lǐng)域?qū)?b class='flag-5'>嵌入式開發(fā)的需求也在不斷增加。在工業(yè)控制領(lǐng)域
    發(fā)表于 07-16 10:47

    嵌入式開發(fā)入門指南:從零開始學習嵌入式

    隨著物聯(lián)網(wǎng)、智能硬件的發(fā)展,嵌入式開發(fā)成為熱門技能之一。以下將為初學者提供一份詳細的嵌入式開發(fā)入門指南,涵蓋學習路徑、必備工具、推薦資源等內(nèi)容。 1. 嵌入式系統(tǒng)的定義與應(yīng)用嵌入式系統(tǒng)
    發(fā)表于 05-15 09:29

    嵌入式開發(fā):高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    嵌入式開發(fā)的門檻,往往被培訓機構(gòu)和表象所掩蓋。許多人誤以為 “用 C 語言寫個跑在 ARM 上的程序” 就是嵌入式,實則連皮毛都未觸及。真正的嵌入式開發(fā)是硬件與軟件深度融合的系統(tǒng)性工程,需跨越三重壁壘
    的頭像 發(fā)表于 04-09 11:06 ?345次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>:高門檻的系統(tǒng)性工程與 996 的行業(yè)困局

    BlackBerry QNX推出通用嵌入式開發(fā)平臺

    BlackBerry有限公司(紐交所代碼:BB;多倫多證券交易所代碼:BB)旗下部門QNX今日宣布推出QNX 通用嵌入式開發(fā)平臺(General Embedded Development
    的頭像 發(fā)表于 03-11 16:04 ?638次閱讀

    嵌入式教育科普|GPIO接口全面解析

    在現(xiàn)代科技領(lǐng)域,嵌入式系統(tǒng)接口作為信息交互的核心載體,發(fā)揮著至關(guān)重要的作用,各類接口通過預定義的通信協(xié)議與標準化規(guī)范,可以實現(xiàn)設(shè)備間的精準數(shù)據(jù)傳輸與智能控制。 作為嵌入式開發(fā)的技術(shù)基礎(chǔ),接口
    的頭像 發(fā)表于 03-05 11:11 ?1830次閱讀
    <b class='flag-5'>嵌入式</b>教育<b class='flag-5'>科普</b>|GPIO接口全面解析

    AI來襲!嵌入式開發(fā)者該如何應(yīng)對轉(zhuǎn)型?

    AI正在改變世界!從自動駕駛到智能家居,從工業(yè)自動化到語音助手,各行各業(yè)都在朝著智能化方向邁進。對于嵌入式開發(fā)者來說,AI的到來既是一次前所未有的挑戰(zhàn),也是一個充滿機遇的時代。過去,我們專注于硬件
    的頭像 發(fā)表于 03-04 14:41 ?823次閱讀
    AI來襲!<b class='flag-5'>嵌入式開發(fā)</b>者該如何應(yīng)對轉(zhuǎn)型?

    代碼+案例+生態(tài):武漢芯源半導體CW32嵌入式開發(fā)實戰(zhàn)正式出版

    尊敬的各位電子工程師、嵌入式開發(fā)愛好者們:大家好!今天,我們懷著無比激動與自豪的心情,向大家宣布一個重大喜訊——武漢芯源半導體的單片機CW32正式出書啦!《基于ARMCortex-M0+的CW32
    的頭像 發(fā)表于 03-03 15:15 ?695次閱讀
    代碼+案例+生態(tài):武漢芯源半導體CW32<b class='flag-5'>嵌入式開發(fā)</b>實戰(zhàn)正式出版

    如何成為嵌入式開發(fā)工程師?

    如何成為嵌入式開發(fā)工程師? 成為嵌入式開發(fā)工程師通常需要掌握一系列技能和知識,并且在實踐中不斷積累經(jīng)驗。以下是一些基本步驟和建議: 1. 基礎(chǔ)教育:- 獲取電子工程、計算機科學或相關(guān)領(lǐng)域的學位
    發(fā)表于 02-19 10:39

    嵌入式開發(fā)必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺智能出品

    實用干貨!嵌入式開發(fā)學習必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)關(guān)注觸覺智能持續(xù)為大家?guī)砀?b class='flag-5'>嵌入式開發(fā)內(nèi)容
    的頭像 發(fā)表于 12-31 10:51 ?117次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>必備-RK3562演示Linux常用系統(tǒng)查詢命令(上)觸覺智能出品

    如何使用 RISC-V 進行嵌入式開發(fā)

    RISC-V是一種開源的指令集架構(gòu)(ISA),它允許任何人設(shè)計、制造和銷售基于RISC-V的處理器,這為嵌入式開發(fā)提供了極大的靈活性和創(chuàng)新空間。以下是使用RISC-V進行嵌入式開發(fā)的基本步驟: 一
    的頭像 發(fā)表于 12-11 17:32 ?1955次閱讀

    基于Xilinx ZYNQ7000 FPGA嵌入式開發(fā)實戰(zhàn)指南

    電子發(fā)燒友網(wǎng)站提供《基于Xilinx ZYNQ7000 FPGA嵌入式開發(fā)實戰(zhàn)指南.pdf》資料免費下載
    發(fā)表于 12-10 15:31 ?37次下載

    零基礎(chǔ)嵌入式開發(fā)學習路線

    嵌入式開發(fā)”沒有接觸過的同學可能會不明覺厲,但是只要你了解了,感興趣并且有一個正確的學習路線的話,零基礎(chǔ)也能入門。給大家介紹一個簡單易懂的學習路線,讓你能夠從零開始學習嵌入式開發(fā)。 第一步:掌握
    發(fā)表于 10-25 15:55

    嵌入式開發(fā)常見問題排查

    歸結(jié)為相對簡單的小問題。接下來,我們將討論一些嵌入式開發(fā)中常見的問題及其解決方法。一、問題復現(xiàn)要有效解決問題,首先需要能夠穩(wěn)定地復現(xiàn)它。一般來說,容易復現(xiàn)的問題也相對
    的頭像 發(fā)表于 09-22 08:04 ?834次閱讀
    <b class='flag-5'>嵌入式開發(fā)</b>常見問題排查

    嵌入式常用總線有哪些

    嵌入式系統(tǒng)中常用的總線種類繁多,它們各自具有不同的特點和應(yīng)用場景。以下將詳細介紹幾種嵌入式開發(fā)中常用的總線,包括UART、I2C、SPI、RS-232、RS-485、CAN以及USB等,每種總線將從其定義、
    的頭像 發(fā)表于 09-10 11:34 ?1429次閱讀

    聚焦嵌入式開發(fā)中的合規(guī)性工具、項目管理工具、版本迭代工具應(yīng)用

    日前,龍智攜嵌入式開發(fā)及管理解決方案亮相2024上海國際嵌入式展(embedded world China 2024)。展會期間,我們對話了多位龍智資深DevSecOps顧問及技術(shù)支持專家
    的頭像 發(fā)表于 07-29 15:15 ?1084次閱讀