ARM嵌入式系統開發 第一章之Dhrystone

2021-05-21 22:41:30 字數 2401 閱讀 9344

在書的第一章開頭部分,作者提到了「最成功的arm核心之一arm7tdmi,具有最高120 dhrystone mips的效能、高的**密度和低功耗等特性,使它成為移動嵌入式裝置的最佳選擇」。這裡的dhrystone mips,作者給了乙個注釋,dhrystone mips version 2.1是乙個小的基準測試程式。當然僅僅知道這些還是不夠的。

dhrystone benchmark是由reinhold p. weicker在2023年提出來的乙個基準測試程式,其主要目的是測試處理器的整數運算和邏輯運算的效能。dhrystone首先用ada語言發布,後來rick richardson為unix開發了用c語言編寫的version 1.1,這個版本也成功的推動了dhrystone的廣泛應用。但是後來dhrystone在2023年更新version 2.1後,停止了後續版本的開發。雖然至今仍然有很多公司,在發布處理器效能引數的時候,經常提及這個基準,但顯然,dhrystone已經是乙個不合時宜的基準。不過arm既然提及了,我們就仔細的看看這個基準到底能夠反映什麼問題。

為了詳細的描述dhrystone在arm上的測試方法和過程,arm提供了文件dai0093a和基準程式。文件可以在www.arm.com上獲取,基準程式在arm的各種編譯環境下都可以找到。筆者使用的是ads,原始碼的路徑在/arm/adsv1_2/examples下,其中有原始的使用kernighan and ritchie style c編寫的程式,也有arm更改的使用ansi c編寫的程式,分別包含在dhry和dhryansi資料夾中。因為無需關注style的問題,所以我們把重點放在dhryansi的分析上。

dhrystone程式其實比較簡單,當然作者花費了很多時間,才精心設計出這些程式。最初的時候,作者蒐集了一系列語言的程式後,統計出程式中常用的操作以及這些操作所佔的比例。按照這些特性,作者人為的構建了這個評估環境,並經過n多次的修改完善,才形成了現在我們看到的dhrystone程式。程式由dhry.h,dhry_1.c和dhry_2.c三個檔案構成,下面從dhry.h開始逐個的分析這些程式。

首先從頭檔案說起,標頭檔案主要是一些彌補系統差異化的選擇和一些作者自定義的型別,逐步拆分如下:

#ifdef  nostructassign

#define structassign(d, s)      memcpy(&(d), &(s), sizeof(d))

#else

#define structassign(d, s)      d = s

#endif

這部分主要是通過巨集來區分不同的c標準對結構體賦值的規定,如果不支援直接賦值的寫法,則需要開啟nostructassign,轉換成對memcpy的呼叫。否則,直接用賦值表示式完成。早期的c應該不支援直接的賦值表示式寫法。不過在這裡說明下,這只是一種寫法,主要看c編譯器的支援程式,因為最終還是要轉換成機器碼執行,比如arm就將這種寫法編譯成幾行彙編**,實際上還是通過呼叫arm庫里的memcpy函式__rt_memcpy_w來完成。

#ifdef  noenum

#define ident_1 0

#define ident_2 1

#define ident_3 2

#define ident_4 3

#define ident_5 4

typedef int   enumeration;

#else

typedef       enum   

enumeration;

#endif

這部分主要是對enumeration的定義。考慮到c的有些版本不支援enum型別,所以設定了巨集noenum來選擇。因為對c的發展不是特別清楚,所以這部分雖然這麼說,當時筆者仍然不是很確定。

typedef int     one_thirty;

typedef int     one_fifty;

typedef char    capital_letter;

typedef int     boolean;

typedef char    str_30 [31];

typedef int     arr_1_dim [50];

typedef int     arr_2_dim [50] [50];

這部分主要是一些自定義型別的定義。通過英文含義結合程式,我們可以得出:one_thirty指的是從1到30的整數;one_fifty指的是從1到50的整數;capital_letter指大寫字母;boolean指布林型變數;str_30指30個字元組成的字串,之所以是31個,因為多了乙個'/0';arr_1_dim是一維陣列,而arr_2_dim是二維陣列。

typedef struct record

var_1;

struct var_2;

struct var_3;

} variant;

} rec_type, *rec_pointer;

這部分定義的結構體主要用於對結構體訪問的評估。

ARM嵌入式系統開發 第一章之嵌入式系統的軟硬體

本章的最後,通過描述arm為核心的嵌入式系統,來介紹了嵌入式系統的軟體和硬體構成和結構。這裡根據這部分的介紹以及其他的文章,描述下通用的嵌入式系統的軟體和硬體。首先來說下硬體,書中說,包含有處理器,控制器,外設和匯流排四個部分。這是一種比較籠統的說法,如果要更籠統點來說,應該是包含處理器,匯流排,外...

第一章 嵌入式系統概述

嵌入式系統概述 1 什麼是嵌入式系統 ieee 國際電氣和電子工程師協會 的定義 嵌入式系統是 用於控制 監視或者輔助操作機器和裝置的裝置 2 嵌入式系統的含義 嵌入系統就是將計算機的硬體或軟體嵌入其它機電裝置或應用系統中去,所構成了一種新的系統,即嵌入式系統。嵌入式系統是以應用為中心,以計算機技術...

第一章 嵌入式系統概論

1.1嵌入式系統的應用 1.1.1 測試 結構 1 上位機.2 下位機.3 被測控制板 1.1.2普適計算 pervasive computing 1.1.3汽車電子產品 設計方面 1 車況資訊系統.2 車在動態資訊系統.3 車載自動控制系統.1.1.4實時訊號處理系統 例如 雷達訊號處理系統 1....