在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

簡單認識ARM處理器家族

sakobpqhz6 ? 來源:TrustZone ? 2024-01-02 10:55 ? 次閱讀

就把這當作ARM學習的開篇,雖然最近RiscV被各大媒體推崇,我也持續看好。

但是我還是覺得短期內很難在高利潤的行當對ARM和x86造成威脅,因為指令集的特點,以及各個廠家的各自為戰,期待早點出現RiscV的天降猛男。

有個朋友,說他們公司因為制裁,只有V8的授權。所以開源或者自研架構又是一條不可避免的道路,不過無論如何,對于我們來說,技術是具有遷移性和相關性的,所以某種程度上,不用過于的糾結,開始行動比較重要,當然選擇很重要。

突然發現我也是廢話大師!

PART ONE-實現

1.ARM處理器家族

(1)什么是多內核

Candidates should be familiar with the available processors from ARM and know which of these may be used in multiprocessor configurations.

需要熟悉ARM的處理器,并且了解其中哪些是用于多處理器配置的。

ARM處理器根據其設計和應用場景的不同,有多種不同的系列。其中,Cortex-A系列是用于高計算要求的領域,如智能手機、平板電腦、汽車娛樂系統、數字電視等,它可以運行豐富的操作系統和提供交互媒體和圖形體驗。

在Cortex-A系列中,Cortex-A9微體系結構既可用于可伸縮的多核處理器(Cortex-A9 MPCore多核處理器),也可用于更傳統的處理器(Cortex-A9單核處理器)。這兩種類型的處理器都支持16、32或64KB 4路關聯的L1高速緩存配置,對于可選的L2高速緩存控制器,最多支持8MB的L2高速緩存配置。這種高度的靈活性使它們能夠適用于特定的應用領域和市場。

Cortex-A系列中的Cortex-A9內核可以用于多處理器配置。它既可用于可伸縮的多核處理器(Cortex-A9 MPCore多核處理器),也可用于更傳統的處理器(Cortex-A9單核處理器)。

Cortex-A9 MPCore多核處理器包含兩個或更多同構或異構的內核,并支持運行一個輕量級的操作系統以進行系統管理。它適合用于高性能、高吞吐量的計算應用,如服務器、高端智能手機和平板電腦等。

另外,Cortex-A15和Cortex-A17內核也是高性能處理器,可以用于多種配置中。它們具有更強的性能和功效,并支持運行復雜的操作系統和交互媒體和圖形體驗。

總之,ARM的Cortex-A系列處理器中的Cortex-A9、Cortex-A15和Cortex-A17內核都可以用于多處理器配置,以滿足高性能和高計算要求的應用需求。

另外,Cortex-M系列是通用微處理器,一般不運行操作系統或只運行實時操作系統(RTOS)。

而Cortex-R系列是實時微處理器,它們在Cortex-M的基礎上增強了實時性能,主要用于高安全性和高實時性的場合。

(2)連接硬件

Candidates should be aware of the concept of coherency hardware, what it does, why it is required and what are the benefits of using it.

需要了解連接硬件的含義,它是做什么的,為什么需要它以及它的優勢是什么。

連接硬件是在多核系統中必須使用的。要理解它是如何工作的以及它是如何影響軟件開發的,需要具備對多核系統以及緩存知識的了解。

在多核系統中,硬件連接和通信是一個關鍵的考慮因素。為了實現多個處理器核心之間的有效通信和數據共享,通常需要使用高速緩存一致性協議,如MESI協議。這些協議確保當一個核心修改了共享數據時,其他核心能夠立即或最終獲得更新的數據。

在多核系統中,每個核心都有自己的高速緩存(L1或L2),但它們之間需要通過共享的內存區域進行通信。當一個核心訪問共享內存區域時,其他核心也需要更新它們的高速緩存以確保一致性。

為了實現這一目標,硬件需要維護一種狀態機制,如MESI協議中的狀態,來跟蹤每個高速緩存行的狀態(例如,修改、獨占、共享等)。當一個核心修改了共享數據時,它會發送一個消息給其他核心,通知它們更新它們的高速緩存行狀態。

這種通信機制對于確保多核系統中的數據一致性和正確性至關重要。它也影響軟件開發的方面,因為開發者需要考慮如何有效地利用多核處理器資源,并確保數據的一致性和共享。

為了更有效地開發多核系統軟件,開發者需要了解硬件的連接方式和通信機制,以便編寫高效、可靠的并行代碼。他們還需要了解多核處理器架構的特性和限制,以及如何利用硬件特性來優化軟件性能。

多核心系統中的硬件連接和通信對軟件開發的影響主要體現在以下幾個方面:

內存一致性:在多核心系統中,每個核心都有自己的高速緩存(L1或L2),但它們之間需要通過共享的內存區域進行通信。為了確保數據的一致性,需要使用高速緩存一致性協議,如MESI協議。這些協議確保當一個核心修改了共享數據時,其他核心能夠立即或最終獲得更新的數據。軟件開發需要考慮如何處理這種內存一致性的問題,以避免數據不一致或競態條件。

通信開銷:在多核心系統中,核心之間的通信存在一定的開銷。如果大量核心頻繁地進行通信,會影響系統的性能。因此,在軟件開發中,需要盡量避免不必要的核心間通信,或者采用高效的通信機制來降低通信開銷。

負載均衡:在多核心系統中,如果負載分布不均衡,會導致某些核心空閑而其他核心還在忙碌,從而影響系統性能。軟件開發中需要考慮負載均衡的問題,通過合理地分配任務和數據,使得每個核心都能得到充分利用。

并行算法編程模型:為了充分利用多核心系統的并行處理能力,需要采用適合并行處理的算法和編程模型。這包括使用線程、進程、數據并行等編程模式,以及選擇合適的同步原語和通信機制。

系統集成和測試:在多核心系統中,由于硬件連接和通信的復雜性,系統的集成和測試變得更加困難。軟件開發中需要考慮如何進行有效的集成和測試,以確保系統的正確性和可靠性。

綜上所述,多核心系統中的硬件連接和通信對軟件開發的影響是多方面的。

為了充分利用多核心系統的優勢,開發者需要深入了解硬件的特性和限制,并采用合適的并行處理技術和編程模型來優化軟件性能。

(3)通用中斷控制器GIC

GIC常用于Cortex-A5多內核、Cortex-A9多內核以及Cortex-R7多內核處理器中,它也可作為可選部件存在于Cortex-A7和Cortex-A15內核中。

它提供了一種可擴展的中斷處理機制,使開發者可以根據需要進行配置和使用。

GIC(Generic Interrupt Controller)是ARM Cortex-A系列處理器中使用的通用中斷控制器。它為多核處理器和單核處理器提供中斷管理功能,并支持可擴展的中斷處理機制。

在多核處理器中,GIC允許多個核心共享中斷信號,并協調各個核心對共享中斷的處理。通過GIC,每個核心可以獨立地響應和分發中斷,確保中斷處理的并行性和高效性。

此外,GIC還提供了一些可編程的中斷控制功能,如設置中斷優先級、子優先級、使能/禁用中斷等。這些功能使得開發者能夠靈活地配置和控制中斷處理的行為。

總之,GIC是Cortex-A系列處理器中用于中斷管理的關鍵組件,它為多核和單核處理器提供了通用和高效的中斷處理機制。

(4)架構版本歸屬

Candidates must be able to identify which ARM processors conform to which Architecture versions. Architectures from ARMv4T onwards are included, with the exception of ARMv7-M and ARMv6-M architectures.

需要能夠識別具體的ARM的處理器是屬于哪個處理器架構版本的。ARMv4T架構之后的都需要了解。

ARMv4T架構:

ARM7TDMI系列處理器(如ARM710T、ARM720T、ARM740T等)

ARM9TDMI系列處理器(如ARM920T、ARM940T等)

StrongARM系列處理器(Intel公司的產品

ARMv5TEJ架構:

ARM7EJ-S系列處理器(基于ARMv5TEJ架構)

ARMv6架構:

ARM11系列處理器(如ARM11MPCore、ARM1176、ARM1156、ARM1136等)

XScale系列處理器(Intel公司的產品)

ARMv7架構:

Cortex-A系列處理器(如Cortex-A5、Cortex-A7、Cortex-A9、Cortex-A15等)

Cortex-R系列處理器(如Cortex-R4、Cortex-R7等)

Cortex-M系列處理器(如Cortex-M3、Cortex-M4等)

ARMv8架構:

AArch64架構(64位指令集)

AArch32架構(32位指令集)

Cortex-A50系列處理器(基于ARMv8架構,支持64位指令集)

Cortex-A53系列處理器(基于ARMv8架構,支持64位指令集)

Cortex-A57系列處理器(基于ARMv8架構,支持64位指令集)

Cortex-A72系列處理器(基于ARMv8架構,支持64位指令集)

ARMv9架構:

Cortex-X2

Cortex-A710

Cortex-A510

這些是ARM的處理器架構版本中比較常見的系列。每個系列中的處理器型號可能會有所不同,但它們都遵循相同的架構規范。希望這些信息對您有所幫助!

(5)性能

Candidates must be able to distinguish between applications, real-time and microcontroller profiles, be aware of the distinguishing features between them and understand the typical target market/applications of each.

需要能夠區別ARM Cortex的應用、實時和微控制器三大系列的區別,理解它們之間的不同特性以及所針對的典型目標應用和市場。

《Cortex-A系列程序員指南》,顧名思義,它只介紹了Cortex-A系列,并沒有提供很多關于Cortex-R和Cortex-M系列的知識。Cortex-A系列處理器主要應用于需要MMU內存管理單元和緩存工作的操作系統的應用場合,要求擁有高性能的處理能力。

Cortex-R系列處理器主要面向實時應用,它面向需要硬實時反應能力的嵌入式系統。這說明它的特性要求有快速、確定的中斷響應,有緊密耦合的存儲器(TCM)位于處理器的局部快速總線上以提供快速響應的代碼和數據,有奇偶校驗或者ECC校驗機制來保證錯誤的檢測和修正。

Cortex-R系列處理器使用內存保護單元MPU代替Cortex-A系列中的內存管理單元MMU來進行內存的管理和保護。

Cortex-M系列處理器面向低成本和功耗敏感的微控制器和混合信號系統。例如一些終端設備,包括智能電表、人機交互設備、自動和工業控制系統、大型家用電器、消費類產品和醫療儀器等。這類領域應用的關鍵是要求微量代碼(更好的代碼密度),易于使用以及節能。例如,Cortex-M0+內核是ARM處理器中能耗最低的內核,可達到mW/MHz。Cortex-M系列處理器僅支持16位和32位的Thumb指令集,通常不含緩存。

之前做過一段時間Zigbee的智慧農業項目,買的開發板就是M內核。

不過已經三年前了,時間好快??!

2.指令周期時序

Candidates should be aware of the effects of pipeline and memory system on instruction execution timing.

需要了解流水線和內存系統對指令執行時間的影響。

了解一些流水線架構相關的基本知識。

了解ARM7TDMI的三級流水線(取指、譯碼、執行)的含義可以幫助理解流水線對執行周期時序的影響。

ARM7TDMI技術參考手冊給出了這個流水線,這讓理解流水線的概念變得更容易。

例如,在ARM7TDMI上分支跳轉會導致2個周期的損失,因為分支跳轉發生在流水線的執行階段,此時位于取指和譯碼階段的指令將被沖刷掉,流水線被重新按新的指令流填滿,因此在跳轉后的第一條指令執行前將產生3個周期的延遲。

同理,一旦理解了簡單的流水線,“加載-使用損耗”的概念就很明了了,它用于描述當寄存器加載一個存儲空間的值時的狀況。

如果接下來的指令需要使用這個寄存器的值,那么它需要等待該寄存器完成數據的加載(并到達處理器流水線的相關級,可能通過專用通道到達)。

編譯器(或者匯編器)會避免這種情況發生,它一般會試圖把使用加載數據的指令從加載指令處分離開。

同理,一旦理解了簡單的流水線,“加載-使用損耗”的概念就很明了了,它用于描述當寄存器加載一個存儲空間的值時的狀況。

如果接下來的指令需要使用這個寄存器的值,那么它需要等待該寄存器完成數據的加載(并到達處理器流水線的相關級,可能通過專用通道到達)。

編譯器(或者匯編器)會避免這種情況發生,它一般會試圖把使用加載數據的指令從加載指令處分離開。

PART TWO-軟件調試

1.標準調試手段

(1)軟件斷點和硬件斷點的區別

Candidates should be aware of the differences and limitations between Hardware and Software breakpoints. They should understand the usage of watchpoint units in configuring these two types of breakpoint.

需要清楚硬件和軟件斷點的區別以及各自的限制,需要了解在配置這兩種類型的斷點時觀察點單元的使用。

在較早的處理器(如ARM7TDMI)中,并沒有配備專用的斷點指令BKPT,而是使用設置觀察點單元來查看特定的位模式的,調試器可以在RAM的代碼空間中設置無限量的軟件斷點。

調試器會讀取需要放置斷點指令的操作碼,并保存到主機上。這條指令然后被一個特定的數據位替代(通常對應的是一個無效指令)。

通常,這需要處理器的數據緩存被清空并且使指令緩存無效,以確保從處理器數據端寫入的特定數據可以被取指邏輯正確訪問。

在較新的處理器上,包括所有的Cortex系列處理器,則采用了BKPT指令來代替原來的需要放置斷點的操作碼。

當斷點被移除時,原本存儲在主機上的原操作碼會被寫回。與此對應的是,硬件斷點可以被設置在任何類型的存儲器上(包括RAM和ROM),但它的數量則由硬件限制。

在學習這部分內容時,建議使用真實的調試器來理解它的使用和限制,獲得一些實際的應用經驗,這可以比書本上的解釋提供更多的有益背景知識。

軟件斷點和硬件斷點是兩種不同的斷點類型,它們在實現方式和適用場景上存在顯著的差異。

硬件斷點:

需要目標CPU的硬件支持。

斷點的數目受特定硬件設計的限制。例如,ARM7/9內核最多支持兩個硬件斷點,而ARM11可以支持到8個硬件斷點。

硬件斷點可以設置在任何位置的代碼上,包括ROM和RAM。

由于硬件斷點設置的靈活性,它是最優先選用的斷點資源。

軟件斷點:

通過在代碼中設置特征值的方式實現。

當需要在某地址代碼處設置軟件斷點時,仿真器會先將此處代碼進行備份保護,然后將預先設定好的斷點特征值(一般為0x0000等不易與代碼混淆的值)寫入此地址,覆蓋原來的代碼數據。

當程序運行到此特征值所在的地址時,仿真器識別出此處是一個軟斷點,便會產生中斷。當取消斷點時,之前受保護的代碼信息會被自動恢復。

由于軟件斷點需要修改相應地址的值,所以一般只能設在RAM上,但是數量可以不受限制。總的來說,軟件斷點和硬件斷點各有其特點和使用場景。硬件斷點由于其設置的靈活性,通常是最優先選用的斷點資源,但當需要大量設置斷點時,軟件斷點可以作為有效的補充資源。

硬件斷點在實際應用中更為常用。原因主要有以下幾點:

硬件斷點通常更快,因為它們直接由硬件控制,不需要軟件進行干預。

硬件斷點通常更可靠,因為它們不受軟件運行的影響,比如內存管理、進程切換等。

硬件斷點通??梢栽O置更多的斷點,因為它們直接由硬件支持,不像軟件斷點可能會受到軟件資源的限制。

當然,在某些情況下,軟件斷點也可能是更好的選擇。例如,對于一些沒有硬件調試支持的低端設備,或者在需要精細控制斷點的位置和數量時,可能需要使用軟件斷點。

硬件斷點在實際應用中更為常用,但具體選擇哪種斷點類型取決于具體的應用場景和需求。

(2)監控模式與停止模式調試

Candidates should be aware of the differences between debugging in each of the two modes and when one would be chosen over the other e.g. choosing monitor mode if interrupts must continue to be serviced while debugging.

需要了解調試的兩種模式之間的區別以及何時選用哪種模式。

例如,需要在調試過程中仍舊響應中斷時,則應選擇監測模式來調試。

監控模式和停止模式調試之間的主要區別在于它們的目的和行為。

監控模式調試主要用于實時監測程序的運行狀態和行為。在這種模式下,程序繼續正常運行,同時允許開發者實時觀察變量值、執行流程和函數調用等信息。監控模式調試適用于需要了解程序實時行為的情況,以便及時發現潛在問題或異常。它也適用于需要實時響應用戶輸入或外部事件的情況。

停止模式調試主要用于暫停程序的執行,以便進行深入檢查和診斷問題。在這種模式下,程序停止執行,開發者可以對程序進行單步執行、檢查變量值、查看堆棧跟蹤等操作,以便更好地理解程序的狀態和行為。停止模式調試適用于需要深入了解程序內部狀態和行為的情況,例如處理復雜錯誤或調試性能問題。

在需要調試過程中仍舊響應用戶中斷時,監控模式調試可能更為合適。在這種模式下,程序繼續正常運行,同時允許開發者實時觀察和監控程序的運行狀態。這樣可以及時發現和修復與中斷相關的問題,并確保程序的正常運行。

然而,在某些情況下,可能需要使用停止模式調試來更好地診斷問題。例如,當遇到復雜的錯誤或性能問題時,可能需要暫停程序的執行,以便進行更深入的檢查和分析。在這種情況下,停止模式調試可以幫助開發者更好地理解程序的狀態和行為,并找到問題的根本原因。

綜上所述,選擇監控模式還是停止模式調試取決于具體的需求和場景。監控模式更適合實時監測和響應用戶輸入或外部事件的情況,而停止模式更適合深入檢查和診斷復雜問題的情況。根據實際情況選擇合適的調試模式將有助于提高開發效率和程序的穩定性。

(3)矢量捕捉

Candidates should be aware of the function of this feature, why and when it is typically used.

需要了解矢量捕捉的功能,為什么以及何時需要使用它。

矢量捕捉是調試器捕獲處理器異常中斷的方法,早期開發時在異常中斷服務句柄被取指之前捕獲到處理器的異常中斷。

許多ARM的處理器都由矢量捕獲硬件來完成這一任務。而在另外一些處理器,如ARM7TDMI,調試器可以采用在異常矢量表的適當位置設置斷點的方法來進行中斷矢量捕獲。

矢量捕捉是一種調試技術,用于在處理器異常中斷發生時捕獲異常信息。它通常用于嵌入式系統開發中,尤其是在調試和排除異常問題時。

矢量捕捉的主要目的是獲取異常發生時的處理器狀態信息,包括程序計數器(PC)、堆棧指針(SP)、寄存器內容等。這些信息可以幫助開發人員快速定位異常發生的具體位置,并理解異常發生時處理器的行為。

為什么需要使用矢量捕捉?主要有以下幾個原因:

快速定位異常:通過矢量捕捉,開發人員可以獲得異常發生時的詳細信息,從而快速定位異常發生的具體位置。這有助于縮短調試時間,提高開發效率。

深入理解異常行為:矢量捕捉不僅提供了異常發生時的處理器狀態,還可以幫助開發人員理解異常的具體行為。這有助于確定異常的根本原因,并為修復異常提供重要線索。

優化異常處理:通過矢量捕捉,開發人員可以評估異常處理程序的性能,并對其進行優化。例如,通過分析捕捉到的異常信息,開發人員可以檢查異常處理程序是否正確處理了異常,并對其進行必要的調整。

何時需要使用矢量捕捉?以下是一些可能需要使用矢量捕捉的情況:

當無法正常啟動程序時:如果程序無法正常啟動,可能存在硬件或軟件故障。在這種情況下,使用矢量捕捉可以幫助開發人員快速定位問題所在。

當程序出現未處理的異常時:在程序運行過程中,如果出現未處理的異常,可能會導致程序崩潰或數據丟失。通過矢量捕捉,可以捕獲這些異常并進行調試,以修復問題。

當需要深入了解程序行為時:有時,開發人員可能需要對程序的運行行為進行深入了解。例如,在性能優化或調試復雜問題時,矢量捕捉可以幫助開發人員更好地理解程序的行為。

總之,矢量捕捉是一種非常有用的調試技術,可以幫助開發人員快速定位異常問題、深入理解異常行為并進行優化處理。在嵌入式系統開發中,特別是在調試復雜異常問題時,使用矢量捕捉可以提高開發效率和程序的穩定性。

(4)判別異常觸發原因(如DFSR、SPSR、Link鏈接寄存器)

Candidates should understand how to determine the actual cause of an exception by using additional resources, which might include special registers that contain fault status. For example, using the DFSR, DFAR to determine cause of a Data Abort or using the SPSR and LR to locate and retrieve SVC comment field.

DFSR (Data Fault Status Register):當數據訪問發生異常時,相關的異常類型和向量會寫入到DFSR寄存器中。例如,當發生數據訪問權限違規、地址無效或數據讀取錯誤等情況時,會觸發數據異常,相關的信息會被寫入到DFSR中。

SPSR (Saved Program Status Register):在進入異常處理時,當前程序狀態寄存器(PSR)會被保存到SPSR中,以便在異常處理完成后恢復執行。通過檢查SPSR的狀態,可以了解異常發生時的程序狀態。

Link鏈接寄存器:在某些架構中,如ARM,鏈接寄存器用于保存子程序返回地址。當一個子程序開始執行時,返回地址會被推入堆棧并存放在鏈接寄存器中。如果發生異常,這個地址可以用于從堆棧中恢復并跳轉到正確的返回地址。

為了判斷具體的異常觸發原因,需要根據實際場景和異常的具體表現來分析。這可能包括檢查程序狀態寄存器(PSR)、程序計數器(PC)、堆棧指針(SP)和其他相關的系統寄存器的狀態,以及檢查相關的內存和I/O操作等。此外,異常處理程序中的上下文信息和調用堆棧信息也是重要的線索。

應當理解如何使用額外的資源來判別觸發一個異常中斷的原因,這些資源通常包括含有錯誤狀態的特殊寄存器,如使用DFSR、DFAR來判別數據中止的原因,采用SPSR以及Link寄存器來定位并獲取SVC系統調用的參數位。

當調試一段軟件時,通常有必要了解為何特定的處理器異常會發生。為此ARM處理器提供了一系列的寄存器來提供有用的信息。

在異常中斷中,當前異常模式的鏈接寄存器(LR)會給出主程序中最靠近觸發異常的指令的位置。通常觸發異常的指令的位置是LR寄存器的值減去4或者8。類似地,SPSR寄存器的mode位可以給出在進入異常模式之前處理器所處的模式。

對于特定的模式,還有一些額外的信息。在取指異常或數據中止異常后,CP15寄存器的錯誤狀態寄存器(FSR)和故障地址寄存器(FAR)是值得注意的,它們可以給出異常中止發生的原因(如一個外部存儲器錯誤或者該地址的轉換表項無效)以及產生異常中止的內存訪問操作的地址。

注意:ARMv6-M和ARMv7-M架構在異常處理模型上與其他的ARM內核有所不同。

(5)跟蹤

Candidates should be aware of what Trace is,what on-chip and off-chip components are required to make it work, what it is used for.Also that it is non-intrusive.

需要了解什么是跟蹤,它正常工作需要哪些片上和片外模塊,它是用來做什么的,以及它是屬于非侵入式的。

通過跟蹤,開發人員可以了解處理器在運行時執行的操作和執行的指令。為了實現跟蹤功能,需要一些片上和片外模塊的支持。

片上模塊包括跟蹤硬件單元和相關控制邏輯。這些模塊負責生成跟蹤數據,并將數據存儲在內部緩沖區或外部存儲器中,以便后續分析。片上模塊是非侵入式的,即它們不會影響處理器的正常功能。

片外模塊包括跟蹤數據捕獲單元和外部存儲器。跟蹤數據捕獲單元負責從片上跟蹤硬件單元獲取跟蹤數據,并將其轉換為可分析的格式。外部存儲器用于存儲跟蹤數據,以便后續分析和調試。

(6)交叉觸發

ARM交叉觸發技術是一種調試技術,用于在特定事件發生時觸發并記錄處理器的行為。通過交叉觸發,開發人員可以在調試過程中觀察處理器在特定事件發生時的行為,例如異常、中斷或特定指令執行等。

交叉觸發機制通常由硬件和軟件協同實現。硬件部分負責監測事件的發生,并在事件發生時觸發跟蹤機制。跟蹤機制記錄處理器執行的相關指令和操作,并將數據存儲在內部緩沖區或外部存儲器中。軟件部分負責讀取跟蹤數據,并將其轉換為可分析的格式,以便開發人員能夠深入了解處理器的行為。

在ARM調試中,交叉觸發技術對于診斷和解決問題非常重要。開發人員可以通過交叉觸發機制觀察處理器在特定事件發生時的行為,從而定位問題或錯誤的根源。這種技術還可以用于性能分析、代碼覆蓋率分析等場景,幫助開發人員優化代碼和改進系統性能。

ARM交叉觸發技術可以應用于多種應用場景,以下是其中一些常見的應用場景:

異常和中斷調試:通過交叉觸發技術,開發人員可以在異?;蛑袛喟l生時觀察處理器的行為。這有助于確定異常或中斷發生的原因,以及處理器在異?;蛑袛嗵幚磉^程中的表現。性能優化:交叉觸發技術可以幫助開發人員分析處理器在不同工作負載下的性能表現。通過觀察處理器在執行關鍵任務或高負載情況下的行為,開發人員可以發現性能瓶頸并優化代碼。

代碼覆蓋率分析:交叉觸發技術可以用于分析處理器在執行不同代碼路徑時的行為。通過記錄處理器在特定事件發生時的行為,開發人員可以確定代碼覆蓋率,并確定哪些代碼路徑被執行和哪些未被執行。

系統穩定性分析:交叉觸發技術可以幫助開發人員分析系統在不同條件下的穩定性表現。例如,在系統崩潰或掛起的情況下,開發人員可以通過交叉觸發技術觀察處理器在崩潰或掛起前的行為,以確定問題的根源。

安全漏洞分析:交叉觸發技術可以用于安全漏洞分析中,幫助開發人員定位和處理安全問題。例如,開發人員可以通過交叉觸發技術觀察處理器在執行惡意代碼時的行為,以便發現和處理安全漏洞。

總的來說,ARM交叉觸發技術是一種強大的調試工具,可以幫助開發人員深入了解處理器的行為和性能,并解決潛在的問題或錯誤。它可以應用于多種應用場景,包括異常和中斷調試、性能優化、代碼覆蓋率分析、系統穩定性分析和安全漏洞分析等。

(7)物理調試接口

Candidates should be aware of available options for making physical connections to the target for the purpose of run-control debug (e.g. JTAG, SWD)

需要理解在線調試所需要的連接到物理目標系統的物理連接選項(如JTAG、SWD)。

JTAG是一個廣泛使用的工業標準,它在物理上通常需要至少5個信號引腳來連接主機計算機和ARM目標系統板。串行調試口SWD是一個擁有類似調試功能的2腳調試口,并且它通常只在較新的處理器上才有。

而從處理器抓取跟蹤信息,則需要比控制代碼執行大得多的帶寬,因為每個周期都會有很多的32位地址和數據信息產生,因此專用的跟蹤端口需要更多的引腳。

此外,跟蹤信息也可以存儲在片上的緩沖區中,采用較少物理引腳的慢速調試口來讀取這些跟蹤信息。

(8)調試訪問內存

Candidates should be aware of how a debugger uses the processor to access memory and be aware of how memory translation affects this. They should also understand the potential impact of cache maintenance caused by debug operations on the state of the memory system.

需要了解調試器是如何使用處理器來訪問內存的,并且理解內存轉換如何影響這種訪問,還需要理解對內存系統狀態的調試操作可能帶來對緩存內容維系的潛在影響。

調試器通常需要顯示調試目標內存(或者外設)的內容并進行修改,它通常是通過處理器執行加載或者存儲指令來實現的,然而有些系統則可以通過內建的調試系統單元來直接對內存進行寫(或讀)操作,不需要處理器本身參與內存操作。

一個良好的調試器會減少調試動作對系統的影響。例如,它通常會盡量減小調試時對緩存的修改。

如果調試器在調試窗口上顯示一塊內存區域的內容但調試器必須使用處理器來讀取內存時,它會盡量采用非緩存方式來操作,從而確保之前緩存中的內容不會被沖刷掉。

程序員必須了解(當內存管理單元MMU被使能時)調試顯示使用的是虛擬地址而非物理地址,而且緩存中的內容可能與外部存儲器的內容不一致。

如果內存訪問是直接通過片上系統的調試單元(而非處理器)來進行的,那么訪問使用的就是物理地址而非處理器的虛擬地址轉換,而且它是直接訪問內存的(繞過處理器的緩存)。

(9)半主機

Candidates should be aware of semi-hosting,understand what its function is and how it can be used during development. They should also be aware of the invasive nature of using this feature and how it may affect timing etc. They should also be aware of the danger of using semi-hosting when no debugger is connected and how to retarget the standard C library.

需要理解半主機的功能是什么,在開發過程中應如何使用;

需要了解這種機制的侵入式特性以及它對時序等方面的影響;

還需要了解當目標板沒有連接調試器時使用這一機制的風險,以及它如何重定向到標準C庫。

半主機是一種讓ARM目標板上的代碼可以使用主機計算機上調試器提供的部分資源的機制。

這些資源可以包含鍵盤輸入、顯示輸出、硬盤I/O。例如,程序員可以使用這種機制提供的標準C庫函數,如printf()和Scanf()來使用主機上的終端屏幕和鍵盤。

開發的硬件通常不包含全功能的輸入/輸出設備,而半主機則可以讓主機提供這些資源。

半主機是通過一系列專用的軟件指令產生異常來實現的。

應用程序使用適當的半主機異常調用——調試中介來響應異常處理。調試中介會提供到主機所需的通信。

半主機的接口一般是通過ARM提供的調試單元作為中介來實現的。ARM的工具使用SVC 0x123456(ARM狀態)或者SVC 0xAB(Thumb狀態)來表示半主機調試函數。

當然,如果脫離了開發環境,運行著調試器的主機并不會連接到目標系統上。此時開發人員有必要將任何使用到半主機的庫函數重定向,如fputc()函數。

之前調試一個小的IoT芯片就是,輕量級的設備沒有系統,而是跑的一個協議棧。里面的打印都是fput。

這意味著需要使用能夠輸出字符到指定設備的代碼來替代使用SVC調用半主機的庫函數代碼。

2.標準調試技術

(1)調用棧

Candidates must understand what a call stack is and how it may be used in debugging.

需要理解什么是調用棧以及它在調試時應如何使用。

應用程序代碼主要使用堆棧來進行參數傳遞、保存局部變量和保存返回地址。

每個函數壓入堆棧的數據都被組織為一個“堆棧幀”,當調試器停止處理器時,它可以分析堆棧中的數據,為程序員提供“調用棧”,

這是從最頂層函數調用到當前子函數之間每一層級的調用關系,它可以在調試時讓用戶非常方便地了解整個調用路徑,了解為何程序會運行到當前的位置。

為了能夠重建調用棧,調試器必須能夠確定堆棧的哪些項包含了返回地址的信息。如果編譯的時候包含的話,這些信息一般會存在于“調試器信息”(DWARF調試表)中,或者從一個由程序壓入堆棧的“幀指針”鏈表獲得。

當然,代碼必須使用幀指針。如果這兩種類型的信息都沒有,那么這個調用棧無法被重建。

在多線程任務應用中,每個線程都有自己的堆棧,因此調用棧的信息也只和它對應的線程相關。

堆棧幀信息是指在函數調用過程中,由編譯器自動在堆棧上分配的數據結構,用于保存函數調用的狀態和局部變量等信息。在調用棧中,每個函數調用對應一個堆棧幀,包含了該函數執行所需的所有信息。

堆棧幀的主要作用是保存局部變量和函數參數。當函數被調用時,其局部變量和參數被壓入堆棧中,以便在函數執行期間訪問。此外,堆棧幀還包含了函數調用的返回地址、環境信息(如寄存器值)等。

在調試過程中,通過分析堆棧幀信息,可以了解函數調用的層次結構、當前執行位置、變量的值等。這有助于理解程序執行流程和定位問題。

為了能夠重建調用棧并獲取堆棧幀信息,編譯器需要在編譯時生成調試信息(如DWARF調試表)。這些調試信息包含了程序結構和變量的元數據,以及堆棧幀的布局信息。調試器可以利用這些信息來解析堆棧幀并重建調用棧,從而提供給開發人員一個完整的程序執行視圖。

總之,堆棧幀信息是函數調用過程中的重要組成部分,通過它我們可以深入了解程序執行的狀態和歷史,并利用這些信息進行調試和優化。

(2)單步執行

Candidates must understand what single stepping is and how it may be used in debugging. They should understand the difference between Step-In and Step-Over when single-stepping.

需要理解什么是單步執行以及如何在調試中應用,它需要理解在單步執行時Step-In和Step-Over的區別。

單步執行指的是調試時調試器可以控制執行部分代碼,每一次執行一條指令。Step-In和Step-Over的區別可以從函數調用中理解。

當采用Step-Over來調試函數時,整個函數會作為一步來執行,讓程序員可以直接執行整個函數而不需要進入函數里面去單步執行。Step-In表示進入函數里面去單步執行函數體。

(3)開始/停止

Candidates must understand what start/stop debugging is and how it may be used.

需要理解什么是開始/停止調試以及如何使用它。

開始的含義就是按下調試器的“開始”按鈕,處理器退出調試狀態并重新進入正常執行狀態(從當前的程序指針處開始執行),直到程序遇到某個讓它停止的因素為止,這些因素通常是一個斷點、觀察點或者捕捉向量事件或者是從外部調試器及其他系統阻塞所產生的調試請求。

開始/停止的調試模式與不能停止代碼執行的調試的系統形成鮮明的對照。在一些嵌入式系統中(如汽車引擎控制系統),在進行系統調試時是不能簡單地讓處理器停止執行的。

(4)打印printf

Candidates must understand how printf may be used in code instrumentation (they may also be expected to understand what other kinds of instrumentation might typically be used).

需要理解如何在代碼儀器化中使用printf(還需要理解其他可用的儀器化函數)。

這是一個最基本的調試技術,通常在所有的處理器架構中使用,用于在代碼中插入指令來輸出一些數據,例如來顯示程序的指令流或者某一時刻一些關鍵變量的值。

在代碼儀器化中,printf函數是一種常用的調試工具,用于輸出數據和信息,幫助開發人員了解程序的執行狀態和變量的值。printf函數類似于其他編程語言中的輸出函數,如C語言中的printf()函數或Python中的print()函數。

在代碼中使用printf函數,需要在程序中插入printf語句,并在其中指定要輸出的內容。這些內容包括各種類型的變量、宏、表達式等。通過輸出這些內容,可以在調試過程中了解程序的執行狀態、變量的值以及其他關鍵信息。

(5)裸機代碼和應用代碼

Candidates should be aware of the difference in debug options between applications running on OS-based or bare metal system (e.g. Ethernet, GDB server, ICE).

Example: Candidates should know that it is necessary to run a server program on the target system in order to debug an OS-based application.

需要了解基于操作系統的應用層軟件調試和基于裸機代碼的系統調試方法的差別(如以太網、GDBServer、ICE)。

例如,需要知道在目標板上調試一個基于操作系統的應用程序必須運行一個調試服務程序。

(6)RAM/ROM調試

Candidates should be aware of the limitations of debugging code running in different types of memory (e.g. breakpoints and image load).

Example: Candidates should know that it is not possible to set an unlimited number of breakpoints when executing code in ROM.More advanced candidates would understand why this is the case.

需要了解在不同類型的存儲空間中進行代碼調試的限制。

例如,應該知道調試在ROM中執行的代碼時是不能設置無限量的斷點的,更深入的了解應該知道為什么如此。

軟件斷點只能設置在RAM中,因為RAM是可寫的空間。調試ROM中的代碼的另一個通常的限制是很難修改代碼來修改錯誤的部分。

在存儲空間中進行代碼調試時,確實存在一些限制,主要與存儲空間的類型和特性有關。以下是對您提到的幾種情況的詳細解釋:

ROM(只讀存儲器)中的代碼調試:

限制:由于ROM是只讀的,因此在ROM中執行的代碼無法直接修改。這限制了調試過程中對代碼的修改能力,例如設置斷點。

為什么如此:由于ROM的設計目的就是為了保存固定數據,例如程序代碼,而不是為了在運行時修改。因此,它不具備RAM的寫能力,這使得在ROM中執行的代碼無法直接設置斷點。

軟件斷點與RAM:

限制:軟件斷點只能設置在RAM中。這是因為在RAM中,數據是可以寫入的,而ROM或其他類型的存儲器通常是只讀的。

原因:由于RAM是可寫的,所以可以在其上設置斷點。當程序執行到特定的地址時,斷點會被觸發,然后程序執行會被暫停,允許開發人員進行調試。如果嘗試在ROM或其他只讀存儲器上設置斷點,硬件或操作系統通常會拒絕這種操作,因為這違反了只讀存儲器的設計目的。

修改ROM中的代碼:

限制:由于ROM的只讀特性,很難直接修改其中的代碼來修復錯誤。通常需要重新編譯和燒寫新的ROM映像。

原因:ROM的設計初衷是為了存儲固定、不可更改的數據。這意味著一旦ROM被編程(即寫入數據),其內容就不能輕易更改。如果需要更改存儲在ROM中的代碼,通常需要重新編譯應用程序,生成新的ROM映像,然后將其燒寫到ROM中。這比直接在RAM中調試和修改代碼要復雜得多。

總之,了解不同存儲空間中代碼調試的限制非常重要,因為它們影響了調試過程的效率和靈活性。在ROM中調試代碼通常更加困難,因為它們的只讀特性限制了對代碼的修改能力。而在RAM中調試則更加靈活,因為它是可寫的,允許開發人員設置斷點、修改變量和執行其他調試任務。

(7)調試時序相關問題

Candidates should be aware that certain debug approaches may affect the timing of the code (e.g. halt mode) and be aware of non-invasive alternatives (e.g. trace).

需要了解某些調試方法可能會影響代碼的時序(如暫停模式)并了解其他非侵入式的調試方法(如跟蹤)。

在調試過程中,一些傳統的調試方法可能會對代碼的時序產生影響,例如在暫停模式下進行調試。這些方法可能會改變程序的執行流程和時間,從而影響程序的性能和結果。

為了解決這個問題,一些非侵入式的調試方法被引入。其中一種常用的方法是跟蹤(Tracing)。

跟蹤是一種監視程序執行過程的技術,通過記錄程序執行過程中的關鍵事件和數據,幫助開發人員了解程序的執行狀態和行為。與傳統的調試方法不同,跟蹤不會干擾程序的執行流程,因此對代碼的時序影響較小。

跟蹤可以通過在程序中插入跟蹤語句或使用專門的跟蹤工具來實現。

跟蹤語句可以在程序的特定位置輸出一些關鍵信息,例如變量的值、函數調用堆棧等。這些信息被記錄下來,并在程序執行結束后進行分析。通過分析這些信息,開發人員可以了解程序的執行路徑、變量的值以及其他關鍵信息。

除了跟蹤之外,還有一些其他的非侵入式調試方法,例如使用監視點(Watchpoints)和斷點(Breakpoints)。

監視點可以在程序的特定地址處設置一個觸發條件,當變量的值發生變化時觸發。通過使用監視點,開發人員可以觀察變量的值變化,并了解程序的行為。斷點可以在程序的特定位置設置一個暫停點,當程序執行到該位置時暫停。通過使用斷點,開發人員可以逐步執行程序并觀察變量的值和執行流程。

總之,了解某些調試方法可能會影響代碼的時序是重要的。

為了減小影響,開發人員可以選擇使用非侵入式的調試方法,如跟蹤、監視點和斷點等。這些方法可以幫助開發人員了解程序的執行狀態和行為,并發現潛在的問題和優化方向。

(8)使用調試器調試軟件的影響(系統可能會被更改狀態)

Candidates should be aware of the implications/impact of debugging (e.g.reading memory locations).

需要了解調試的含義和影響(如讀取內存位置)。

調試是軟件開發過程中必不可少的一部分,它有助于發現和修復代碼中的錯誤和問題。然而,使用調試器進行調試時,確實可能會對軟件的系統狀態產生影響。以下是一些可能的影響和需要注意的事項:

1、系統狀態更改:在調試過程中,開發人員可能會暫停程序的執行、單步執行代碼、修改變量的值等。這些操作都可能直接或間接地更改系統的狀態。例如,修改變量的值可能會導致程序的行為與正常情況下不同。

2、內存讀取和寫入:使用調試器時,開發人員經常需要讀取和修改變量的值。這些操作可能涉及到內存的讀寫。如果操作不當,可能會導致內存損壞、數據丟失或其他未定義的行為。

3、性能影響:在調試過程中,程序的執行可能會被暫停、中斷或減速,這可能會影響程序的性能。如果頻繁地進行調試,可能會導致程序的性能下降。

4、依賴性問題:在調試過程中,開發人員可能需要模擬某些外部事件或條件。這些模擬可能會導致程序的行為與實際運行時不同,從而引入依賴性問題。

5、安全性考慮:在某些情況下,調試可能會暴露敏感信息或允許惡意用戶利用調試器來操縱程序的行為。因此,在調試時需要注意安全性問題,并采取適當的措施來保護系統的安全。

為了減小調試對軟件系統狀態的影響,開發人員應該采取一些最佳實踐:

1、備份重要數據:在開始調試之前,建議備份重要的系統數據和配置,以防止意外更改導致數據丟失或損壞。

2、限制調試器的權限:確保調試器沒有不必要的權限,以減少潛在的安全風險。

3、使用斷言和日志記錄:在代碼中添加斷言和日志記錄可以幫助開發人員在調試過程中更好地理解程序的狀態和行為。

4、謹慎使用內存操作:盡量避免直接讀寫內存,特別是當程序處于不穩定狀態時。

5、限制調試的范圍:盡量只在需要調試的部分代碼上使用調試器,而不是在整個程序上運行調試器。

6、定期測試和驗證:在調試過程中,定期測試和驗證程序的正確性和性能可以幫助開發人員及時發現潛在的問題。

7、遵循良好的編碼實踐:編寫高質量的代碼可以減少潛在的錯誤和問題,從而減少調試的需要。

總之,雖然調試是軟件開發中必不可少的部分,但開發人員應該意識到使用調試器可能對系統狀態產生的影響,并采取適當的措施來減小這些影響。

PART THREE-架構

1.指令集

(1)LDREX/STREXCLEX

Candidates should be aware of how these instructions work and how they might be used to implement software synchronization (e.g. mutex). At this level candidates should be able to recognize a simple mutex implementation (in assembler) and be able to explain its operation. They will not be expected to write one.

Example: Candidates should be aware of what a mutex is. More advanced candidates will be aware of the exclusive access instructions which are used to implement mutexes and similar constructs.

需要了解這些指令如何工作,如何用于軟件的同步(如互斥);

應該能夠識別一個互斥的應用(在匯編代碼中)并能解釋它們的作用,但不需要自己編寫一個此類代碼應用。

LDREX和STREX是ARM架構中的兩條指令,它們被用來實現原子操作。原子操作是一種在執行過程中不會被其他線程或進程中斷的操作。

LDREX指令用于讀取內存中的值,并標記對該段內存的獨占訪問。它會在讀取寄存器Ry指向的4字節內存值后,將其保存到Rx寄存器中,同時標記對Ry指向內存區域的獨占訪問。如果執行LDREX指令的時候發現已經被標記為獨占訪問了,并不會對指令的執行產生影響。

STREX指令在更新內存數值時,會檢查該段內存是否已經被標記為獨占訪問,并以此來決定是否更新內存中的值。如果執行這條指令的時候發現已經被標記為獨占訪問了,則將寄存器Ry中的值更新到寄存器Rz指向的內存,并將寄存器Rx設置成0。指令執行成功后,會將獨占訪問標記位清除。一旦某條STREX指令執行成功后,以后再對同一段內存嘗試使用STREX指令更新的時候,會發現獨占標記已經被清空了,就不能再更新了,從而實現獨占訪問的機制。

這兩條指令常被用來在并發編程中實現線程間的同步,以避免數據競爭和其他并發問題。

在軟件開發中,同步是一種重要的技術,用于確保多個線程或進程在共享資源時的正確行為。互斥(mutex)是實現軟件同步的一種常見方法,它允許多個線程安全地訪問共享資源。為了理解互斥的實現,開發人員需要了解底層指令的工作原理。

在匯編語言中,有一些特定的指令可以用來實現互斥和軟件同步。這些指令通常涉及對內存的讀寫操作,以及對進程或線程狀態的更改。

例如,一個簡單的互斥實現可能使用以下類型的指令:

原子操作指令:這些指令在執行過程中不會被其他線程或進程中斷,因此可以在沒有鎖的情況下安全地修改共享變量的值。例如,一些CPU提供了CMPXCHG(比較并交換)指令,它可以原子地比較和交換內存中的值。

自旋鎖指令:這些指令允許一個線程持續檢查一個條件,直到該條件變為真。這通常用于實現循環鎖,其中線程在等待獲取鎖時會“自旋”。例如,CMP(比較)和JXX(條件跳轉)指令可以組合使用來實現自旋鎖。

阻塞和喚醒指令:這些指令允許線程阻塞自己(例如,通過WAIT或PAUSE指令),直到另一個線程喚醒它(例如,通過SIGNAL或WAKE指令)。

了解這些底層指令如何工作對于理解互斥等同步機制的實現至關重要。開發人員需要能夠識別和理解這些指令在匯編代碼中的應用,以便更好地理解軟件的同步行為。

值得注意的是,雖然了解這些底層細節對于深入理解同步機制是有幫助的,但在實際開發中通常會使用更高級的抽象和工具(如操作系統提供的線程同步原語或高級語言中的并發庫),而不是直接編寫匯編代碼來實現這些機制。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19286

    瀏覽量

    229852
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9097

    瀏覽量

    367581
  • 控制器
    +關注

    關注

    112

    文章

    16361

    瀏覽量

    178071
  • 指令集
    +關注

    關注

    0

    文章

    224

    瀏覽量

    23384

原文標題:1.指令集

文章出處:【微信號:IC學習,微信公眾號:IC學習】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ARM處理器簡介及RISC設計要點

    ARM是一個32位RISC(精簡指令集)處理器架構,ARM處理器則是ARM架構下的微處理器
    的頭像 發表于 04-01 08:17 ?9275次閱讀
    <b class='flag-5'>ARM</b><b class='flag-5'>處理器</b>簡介及RISC設計要點

    ARM處理器ARM處理器工作模式

    ARM處理器狀態ARM處理器的工作狀態一般有兩種,并可在兩種狀態之間切換:第一種為ARM狀態,此時處理
    發表于 01-27 11:13

    ARM處理器ARM處理器工作模式

    ARM處理器狀態ARM處理器的工作狀態一般有兩種,并可在兩種狀態之間切換:第一種為ARM狀態,此時處理
    發表于 01-27 14:19

    怎么區分ARM Cortex系列的處理器

    頻率可以達到400Mhz。當然,性能不是選擇處理器的唯一指標。在許多應用中,低功耗和成本是關鍵的選擇指標。因此,Cortex-M處理器家族包含各種產品來滿足不同的需求:不同于老的經典ARM
    發表于 09-13 10:01

    ARM處理器簡單介紹

    ARM公司開發了很多系列的ARM處理器核,目前最新的系列已經是ARM11了,而ARM6核及更早的系列已經很罕見了,
    發表于 07-23 07:08

    什么是ARM處理器 ARM處理器有哪些系列

    包括 幾種內存管理單元的變種,包括簡單的內存保護到復雜的頁面層次。ARM處理器系列包括 ARM7 系列、ARM9 系列、
    發表于 09-24 17:47

    淺談ARM處理器架構

    `讓我們先從ARM處理器家族說起。一、ARM 處理器家族多年來,
    發表于 08-18 12:04

    ARM Cortex-M處理器詳解 精選資料分享

    ARM Cortex-M處理器家族現在有8款處理器成員。在本文中,我們會比較Cortex-M系列處理器之間的產品特性,重點講述如何根據產品應
    發表于 07-16 07:57

    ARM,ARM處理器是什么意思

    ARM,ARM處理器是什么意思 ARM處理器簡介 ARM(Advanced RISC Mach
    發表于 03-26 10:53 ?5275次閱讀

    arm是什么處理器arm處理器匯總

    ARM處理器是Acorn計算機有限公司面向低預算市場設計的第一款RISC微處理器。更早稱作Acorn RISC Machine。ARM處理器
    發表于 11-10 16:32 ?3163次閱讀

    從Cortex-M到 Cortex-A認識ARM處理器

    從Cortex-M到Cortex-A認識ARM處理器
    的頭像 發表于 03-08 11:34 ?3465次閱讀

    Cortex-M3是一款ARM處理器內核

    Cortex-M3:是一款ARM處理器內核,也可以理解為ARM處理器家族之中的一個成員。ARM
    的頭像 發表于 06-24 14:44 ?1.2w次閱讀

    arm處理器有哪些中斷源?arm處理器對異常中斷的響應過程

    arm處理器有哪些中斷源?arm處理器對異常中斷的響應過程? ARM處理器是一種廣泛使用的嵌入式
    的頭像 發表于 10-19 16:35 ?1457次閱讀

    簡單認識安全加密處理器

    安全加密處理器 (Secure Cryptoprocessor) 是一種本身不產生加密數據或程序指令,但產生密鑰(Key)的處理器,其應用產品有智能卡、ATM、電視機機頂盒、軍事系統等。而加密型
    的頭像 發表于 12-06 09:19 ?1254次閱讀

    簡單認識高級處理器

    除了傳統的處理器 (CPU、MPU/MCU、DSP 和 GPU),面向當代各種應用的高級處理器(Advanced Processors)層出不窮,例如加速處理單元 (Accelerated
    的頭像 發表于 12-07 11:31 ?926次閱讀
    <b class='flag-5'>簡單</b><b class='flag-5'>認識</b>高級<b class='flag-5'>處理器</b>
    主站蜘蛛池模板: 狠狠狠狠狠狠狠狠| 中文天堂资源在线www| 天天澡天天摸天天添视频| 在线看免费视频| 一区二区视频在线| 毛片官网| 久久狠狠躁免费观看| 中文字幕在线播放不卡| 久久婷婷丁香七月色综合| 欧美天天| 亚洲色图综合图区| 国产精品视频第一区二区三区| 国模吧双双大尺度炮交gogo| 中国xxxxx高清免费看视频| 久久久精品久久久久久久久久久 | 2018国产精品| 天堂网www最新版在线资源| 福利社91| 69pao强力打造在线| 欧美在线视频二区| 色惰网站| 亚洲电影在线| 夜夜想夜夜爽天天爱天天摸| 亚洲二区在线| 久久综合一| 国产成人福利夜色影视| 四虎影院黄色片| 天天弄| 在线三级网| avtt天堂网永久资源| 亚洲免费一| 国内精品免费视频精选在线观看| 春宵福利网站| 日本www色视频| 国产香蕉一区二区精品视频| 特黄特色三级在线播放| 天天射天天射天天干| 中文字幕卡二和卡三的视频| www.色亚洲| 狠狠gao| 99色播|