在嵌入式Linux系統上的新一代網路協定轉換軟體開發
7
0
0
全文
(2) 模組的執行效能。進一步統計 ARM 指令集的 記憶體存取指令數,來分析記憶體存取的功率 消耗。. 以符合實際情形。 增加了新的優先順序 (Priority)和訊流標記(Flow Label)欄位,來支援 即時服務。. 二、相關研究. (二) 網路協定轉換機制. (一)IPv6 標頭. 建置新的 IPv6 網路應該在對既有 IPv4 網 路、系統業者、及終端使用者干擾最小的狀況 下完成。 IETF 目前提供了三種機制可協助 IPv4 順利轉移至 IPv6,它們分別是雙堆疊機 制(Dual stack)、通道機制(Tunneling),以及轉 換機制(Translator)。. IPv6 的標頭很類似 IPv4,由基本 IPv6 標 頭和選擇性的延伸標頭所組成。IPv6 標頭共使 用 40 個位元組的長度,包括 8 個欄位與兩個 位址。圖 1 為 IPv6 標頭格式。. 使用雙堆疊機制的前提是每一主機的作 業系統本身必須同時支援 IPv4 及 IPv6,而通 道機制祇適用於兩個 IPv6 網域的連線。相對 的,轉換機制則無上述限制,且它的架構簡 單,因此本文選定了屬於轉換機制中適合在閘 道器上建置的 NAT-PT〔11〕〔14-15〕作為居 家用閘道器上的轉換機制。 居家用閘道器上的封包轉換機制簡述於 下,當閘道器上的 NAT-PT 模組收到來自 eth0 由居家側 IPv6 電腦傳來的封包後,NAT-PT 模 組會先搜尋 IP 位址對映表中是否已有相符的 v6-v4 對映位址,如果沒有就在可用位址列中 取得一個新的 IPv4 的位址,再將封包轉成 IPv4 的位址後,經 eth1 傳入網際網路。同樣的, 當閘道器收到來自 IPv4 端的封包後,經由 IP 位址對映表轉換成 IPv6 封包後,透過 eth0 傳 進 IPv6 家用網路中的對映主機。. 圖 1 IPv6 標頭格式. 表 1 IPv4 與 IPv6 的欄位差異 IPv4 欄位. IPv6 欄位. Header Length. 欄位取消 (固定長度 40Bytes). TOS. Traffic Class + Flow Label. Length. Payload Length. TTL. Hop Limit. Header Checksum. 欄位取消. 32 bits Address. 128 bits Address. 表 1 簡列出 IPv4 與 IPv6 的欄位差異。由 於 IPv6 採固定表頭長度,因此取消 IPv4 表頭 長度(Header Length)。服務型式(TOS)欄位由其 它機制取代。由於 IPv6 只支援端點對端點 (end-to-end) 分 割 , 故 不 再 需 要 識 別 (Identification) 、 旗 號 (Flags) 和 區 段 移 補 (Fragment offset)欄 位 。 靠 媒 介 存 取 (media access)控制程序中的檢查和,因此取消表頭檢 查和(Header Checksum),減少表頭處理的負 擔。有些欄位重新命名並重新定義。IPv4 的整 體 長 度 (Length) 由 IPv6 的 封 包 承 載 長 度 (Payload Length)取代。協定型式(Protocol Type) 欄位重新命名成下一表頭(Next Header)。還可 增加延伸表頭(Extension Header)。存活時間 (Time to live)欄位變更成跳躍點限制(hop limit) -2-. NAT-PT 主要為位址的對映轉換,屬於資 料為主(Data Dominate)的應用,當在搜尋對映 表時,必須對記憶體中的資料做大量的比對, 因此記憶體存取是影響效能的因素之一。同時 其它研究指出〔9〕 ,在嵌入式系統上記憶體存 取為主要的功率消耗,因此如何有效規劃 NAT-PT 記憶體存取,對系統整體效能及減少 功率耗損是很重要的課題。 (三) 嵌入式系統 嵌入式系統和 PC 主要的不同在於,嵌入 式系統大多針對特定用途設計,因此可用資源 相較一般多用途的 PC 要少,同時嵌入式系統 的可攜式特性和體積輕小的需求使它對電源 消耗量非常敏感。在日常生活中常見的嵌入式 系統產品有手機、全球衛星定位系統 (GPS)、 個人數位助理(PDA)、Set-Top-Box等。 嵌入式系統功率消耗多寡不僅影響機器 的待機時間,同時相應產生的熱效應也影響了 系統的穩定性、效能和價格。而省電功能的嵌 入式系統研究近年來相當盛行〔7〕 〔12-13〕。 同時其它研究也指出記憶體資料存取佔系統.
(3) 電源消耗量大部份〔 3〕〔10〕 ,因此本文所探 討的部份重點將在的 NAT-PT 在嵌入式系統上 記憶體資料存取部份的功率消耗分析評估。. 入 Linux 核心。我們使用 route 程式來設定路 由表。在居家 IPv6 網域的電腦 A、B 上我們 使用 Windows XP 作業系統。相關網路設定我 們使用 Windows XP 的 IPv6 設定程式 ipv6, 來設定 IPv6 位址和路由表。. (四) 搜尋演算法 當我們要讀取、更新或刪除一筆資料,就 必須對資料進行搜尋。演算法的好壞對效能的 影響很大,在此我們探討循序搜尋、二分搜尋 與雜湊搜尋演算法。並對各種演算法在 ARM 上的記憶體存取指令進行研究,尋找出哪種搜 尋演算法的電源消耗比較低。. (二) 測試與分析步驟說明 首先本文利用 GNU(Free Software Foundation) 開 發 的 程 式 開 發 工 具 gprof 針 對 NAT-PT〔 20〕在 PC 上 的 實 作 做 動 態 側 描 (Profiling)以取得 NAT-PT 程式執行中的各函 數呼叫次數及函數呼叫圖(Call Graph)。這部份 的工作主要是找出 NAT-PT 中最常執行的程序 供後續最佳化處理。. 三、系統架構 (一) 測試與分析系統架構說明 我們使用 PC 建置居家用閘道器,透過對 NAT-PT 的動態側描,統計 NAT-PT 模組的函 數呼叫情形,佐以統計 ARM 指令集的記憶體 存取指令數,來分析功率消耗。圖 2 中電腦 A、 B 構成一 IPv6 子網路,用來模擬家用網路中 的家用主機,這些家用主機執行 IPv6 協定。 以上居家子網路通訊閘設定為電腦 C,執行 NAT-PT 轉換機制用來模擬設計中的居家用閘 道器。在閘道器電腦 C 上設置兩個乙太網路介 面卡,分別是負責下傳(downstream) 用來連接 IPv6 的家用網路的 eth0,及上傳(upstream) 用 來連接 IPv4 的網際網路的 eth1。. Computer A. Ether Switch eth0. Computer B. Computer C Home Gateway ADSL Router. Computer D. (三) Profiling 及測試封包 進行 Profiling 前,首先我們使用 gcc 編譯 器版本 2.96 搭配 glibc 版本 2.2,並設定-pg 編 譯選項重新編譯及連結產生新的 NAT-PT 執行 檔〔2〕 。經由編譯器 -pg 選項,編譯時程式中 會加入系統指令來追蹤呼叫函數的次數及時 間。而在程式連結時,在程式中會加入統計的 程序,藉以產生所需的資訊。因為 NAT-PT 主 要的功能為提供 IPv4/IPv6 協定的轉換,因此 針對 NAT-PT 測試時只要是能夠產生 IPv6 的 封包就可以用來測試,而本文此處使用的是系 統提供的 ping6 來產生測試封包。 整個測試過程中我們反覆的在電腦 A、B 上產生數千個 ping6 封包,對網路上事先選定 的十台電腦發出,封包透過居家用閘道器中的 NAT-PT 轉換成 IPv4 封包送出,然後封包穿過 ADSL 路由器傳送到 Internet 上,接著被 ping 的主機分別回傳 ICMP 的封包回居家用閘道 器,閘道器收到回應的訊息後再將 IPv4 轉成 IPv6 封包,分別傳給對映的電腦 A、B。. eth1. WAN. 其 次 是 利 用 GNU Cross-compiler 產生 NAT-PT 的 ARM 組合語言程式碼,最後利用 先前動態側描及編譯得到的 NAT-PT 組合語言 程式碼來計算執行 NAT-PT 中各模組所需存取 記憶體的次數。詳細測試與分析內容如下。. Computer E. 圖 2 系統架構圖 架構中所需軟體及相關設定簡述如下。在 居家用閘道器上的軟體需求主要包括 Linux 作業系統及 NAT-PT 模組。此處我們安裝的是 RedHat 7.3 系統核心為 2.4.18 的版本,另外我 們自 Electronic Telecommunications Research Institute 〔20〕取得 NAT-PT 模組的原始碼。 將取得的 NAT-PT 模組的原始碼自行編譯。. 經由編譯程式時開啟側描的選項的設 定,此時程式執行後會產生一個統計資料檔, 這個統計資料檔可以使用 gprof 來觀看數據。 另外我們使用 AT&T 的 DOT〔1〕程式根據上 述統計資料檔產生函數呼叫圖。側描 NAT-PT 結果如圖 3 所示。我們統計了 NAT-PT 各模組 的呼叫次數,發現了幾個模組花費較多的執行 時間。因此要提昇效能,就必須對這些模組進 行最佳化。 (四) Cross-Compiler 安裝及 ARM 程式碼產生. 使用 modprobe ipv6 指令將 IPv6 摸組載. Profiling 結 果 提 供 NAT-PT 函 式 層 -3-.
(4) (Functional Level)各函式執行的次數及彼此呼 叫關係的資訊,這些資訊有助於 NAT-PT 最佳 資料結構及演算法的開發。但是如果我們要做 系統架構最佳化設計的話,我們還需要指令層 (Instruction Level)的統計資料。特別是需要計 憶體存取指令數目及存取計憶體位址等資 訊 。 這 部 份 的 工 作 我 們 透 過 GNU Cross-compiler 達成,相關內容及方法分述於 下。 相關在 PC 上安裝 Cross-Compiler 部份, 我們可以從網路上下載適合自己平台的 ARM-Linux Cross-Compiler〔16〕 ,也可以自己 編譯產生。如果要自己編譯原始檔,必須下載 下列幾個檔案並安裝: (1)Bin Utilities (Binutils) 版 本 2.x , (2)GCC Compiler 版 本 2.9x , (3)GLIBC Library 版本 2.x〔17 - 18〕 。詳細編 譯 Cross-compiler 的步驟可參考〔19〕 。 為了得到 ARM 的組合語言程式碼,我們 必須在使用 Cross-compiler 編譯的過程中使用 -S 選項,同時為了將迴圈的展開讓我們可以得 到較詳盡的 ARM 程式碼,我們也在編譯過程 中加入了–funroll-loops 選項。一個參考編譯 指令如下: arm-linux-gcc –S –funroll-loops nat-pt.c 編譯結果會產生以.s 的延伸檔名的 ARM 的組合語言程式碼檔案。此處礙於篇幅限制, 本文僅列出各模組相關統計資料如表 2 ARM 程式碼統計表所示。 我們統計了記憶體存取數,發現了幾個模 組花費較多的記憶體存取指令在資料的存取 或搬移上。因此要降低功率的消耗,就必須針 對這些模組進行最佳化。我們知道高階程式語 言的語法會影響到編譯後的組合語言程式 碼,而搜尋的快或慢影響很大,因此我們針對 資料搜尋比對這部分的程式語法來最佳化。 (五) 搜尋方式研究 目前 NAT-PT 模組所使用的資料搜尋演算 法為循序搜尋法(Sequential Search),最差情形 下比較次數為 N,平均比較次數為 1 N + 1 。時間複雜度為 (1 + 2 + 3 + ... + N ) = N 2 O n 。 如 果 使 用 二 分 搜 尋 法 (Binary Search) , 則 最 差 情 形 下 比 較 次 數 為. (). log 2 n + 1 ,平均比較次數為 log 2 n + 時間複雜度為 O. (log 2 n ) 。. 1, 2. 假設 IP 位址數為 20,使用循序搜尋法最 差情況下須比較 20 次,而使用二分搜尋法最 差情況下也只需比較 5 次。另外,如果使用雜 -4-. 湊( Hash )搜尋法,時間複雜度只需 O (1) ,但 需要較多的記憶體空間,因當雜湊表太滿時, 碰撞率會因空間擁擠而急遽升高,因此使用雜 湊搜尋法會比較浪費記憶體空間。 針對記憶體的電源消耗我們實際分析了 循序搜尋、二分搜尋和雜湊法。因為速度快的 演算法不一定記憶體的存取指令數就一定會 比較低,所以我們使用 Cross-compiler 編譯各 搜尋法程式碼,得到 ARM 的組合語言程式 碼,來比較哪種搜尋演算法的記憶體存取數比 較少,電源消耗也會比較少。. 四、結果分析 (一) 結果分析 實際測試 Pin6 結果,封包傳遞的預估值 和實際測試結果會有些許差異。這些差異發生 的原因是在實際測試中,有外來的 Internet 封 包進入閘道器,也有些 Ping6 封包會因各種網 路原因而產生遺失,例如頻寬限制、封包碰撞 或路由器忙碌,導致傳送和接收封包數有些許 不同,但就本文的主旨而言,這些細微差異並 不影響資料的參考性。 表 2 中 ARM 指令總數代表 ARM 的記憶 體存取 LDR/ STR 指令總數。記憶體存取數為 模組呼叫次數乘以 ARM 指令總數然後均值後 得到的比率。雖然我們編譯時已展開所有迴 圈,但動態的迴圈數並無法預先知道,因此此 處我們得到記憶體存取數近似值,詳細的記憶 體存取數須靠指令層的模擬取得。 我們統計了模組的呼叫次數和記憶體存 取數,發現以下幾個模組花費較多的時間在資 料 的 存 取 或 搬 移 上 , write_packet 、 PT_Translate_IPv6_Packet、PT_Translate_IPv4_ Packet 、 translate_ICMPv4_dgram 、 translate_ ICMPv6_dgram、Get_IPv6_hardware_address、 get_IPv4_hardware_address 、 NAT_Translate_ IPv6_To_IPv4、NAT_Translate_IPv4_ To_IPv6。 要降低功率的消耗,我們就必須針對這些 函 數 模 組 進 行 最 佳 化 。 其 中 translate_ ICMPv6_dgram 及 translate_ICMPv4_dgram 部分是 Application Dependent ,也就是說它們 是 執 行 ping6 的 結 果 。 get_IPv6_hardware_ address、get_IPv4_hardware_ address,因為涉 及傳送 ARP 封包獲得 MAC 位址動作,所以 執行時間較長。write_ packet 主要功能為送出 封包,將指標變數傳給網路卡驅動程式。以上 這幾個函式因為和 NAT-PT 轉換機制並無絕對 關聯,所以我們將不去討論它們,我們討論的 重 點 放 在 PT_Translate_IPv6_Packet 、 PT_Translate_IPv4_Packet 、 NAT_Translate_.
(5) 和. IPv6_To_IPv4 IPv6 模組。. NAT_Translate_IPv4_To_. 另 外 我 們 觀 察 read_packet_IPv4 與 read_packet_IPv6 的執行時間,很明顯的 read_ packet_IPv6的時間是 read_packet_IPv4的兩倍 以上,因為 IPv6 的標頭佔用 40 個位元組,比 IPv4 的 20 位元組多出一倍,所以延長了封包 處理的時間。. 另外我們特別統計了資料 Insert 和 Search 副 程 式 的 記 憶 體 存 取 數 , 因 為 在 Insert 和 Search 過程中,需要大量的存取到記憶體,且 會包含大量的迴圈,迴圈的次數影響整體演算 法的效率,更與電源的消耗有密切的關係。. 圖 3 顯示由 Functional Level側描得到的 函數呼叫圖 (Call graph)。圖中顯示了模組名 稱、模組執行的關係。從圖 3 函數呼叫圖可 觀 察 到 , PT_Translate_IPv6_Packet 呼 叫 NAT_Translate_IPv6_To_IPv4 來轉換位址,而 NAT_Translate_IPv6_To_IPv4主要轉換 IPv6 的 位址為 IPv4 位址。同樣的 NAT_Translate_ IPv4_To_IPv6主要轉換 IPv4 的位址為 IPv6 位 址。 值 得 注 意 的 是 NAT_Translate_IPv6_ To_IPv4 和 NAT_Translate_IPv4_To_IPv6 存取 相同一位址對映表,位址對映表的資料結構如 下所示。. IPv4_Address;. unsigned short. IPv4_Port;. struct in6_addr. IPv6_Address;. unsigned short. IPv6_Port;. unsigned int. Number_of_Sessions;. unsigned int. TCP_Timer_Value;. unsigned int. UDP_Timer_Value;. struct Mapping_List. 在 NAT-PT 模組中,位址資料數預設值為 20 筆。在區域網路中因為主機數量遠少於封 包數量,因此討論重點將在資料的搜尋部分。 如果搜尋次數可以降低,效能就會提昇,記憶 體存取數也會降低,電源消耗也會降低,因此 好的搜尋演算法是很重要的。在實際的測試當 中,發現到不同的程式語法也會影響到記憶體 存取的指令數量,因此使用好的程式語法也有 助於減少記憶體存取數並增加程式執行的效 能。由表 3 我們得知,在雜湊法中又以 Linear Probing 的記憶體存取指令數較少。 我們知道閘道器在一秒鐘內收到的封包 數量可能極為龐大,因此我們必須選擇好的演 算法來縮短處理封包的時間,縮短封包延遲。. struct Mapping_List { struct in_addr. 問題需要產生新的鏈結串列,所以記憶體存取 數比線性預測多。相關於各不同搜尋演算法的 詳細討論請參考〔1〕 〔8〕 。. 五、結論 以上測試結果顯示實作的 Linux居家用閘 道器能透過 NAT-PT 能夠進行 IPv6 和 IPv4 間 的封包轉換使得 IPv6 和 IPv4 的主機可以互相 連線。經由動態側描的結果,和 ARM 指令集 的分析,我們知道該針對那些模組最佳化,並 減少記憶體存取數,來減少電源的消耗。經由 實際測試,我們知道雜湊法(Linear Probing)的 時間複雜度最低,效能最好。可縮短資料搜尋 及比對的時間和次數來提昇系統效能。以效能 和記憶體存取數來看,雜湊法(Linear Probing) 也 是 好 的 選 擇 , 因 此 選 用 雜 湊 法 (Linear Probing)在電源消耗和執行效能上都是最好的 選擇。. *pNext;. }; IPv6 位址每次必須比對 16 位元組,長度 是 IPv4 的 4 倍,如果同時有 20 個位址對映關 係表,在最壞情況下必須比對 20 x 16=320 位 元組的資料,因此採用最佳化的搜尋方式有助 於減少資料比對的次數及時間。所以我們探討 的重點在位址對映表的搜尋演算法上,希望減 少資料比對的次數及時間。. 未來發展部分,在嵌入式系統方面,我們 可根據上述測試方法、結果,來設計、規劃嵌 入式系統,減少記憶體存取次數來降低電源消 耗〔9〕 ,並針對記憶體有限的嵌入式系統,規 劃記憶體的資料結構和管理記憶體的配置。在 NAT-PT 模組方面,希望在未來可支援讓一 IPv4 Address 利用 Port Number 對應到多個 IPv6 主機。. (二) 演算法分析 如表 3,我們統計了幾種搜尋演算法的 ARM 記憶體存取指令數。知道二分搜尋和雜 湊法(Linear Probing)的記憶體存取是最少的, 而循序搜尋演算法則是存取次數最多的。另外 對雜湊法我們分別測試了兩種碰撞(hash collision)的處理方式,結果顯示分別鏈結(separate chaining)比線性預測(Linear Probing)記憶體存 取數多。因為分別鏈結在處理雜湊函數的碰撞. 六、參考文獻 [1] 張邵勳, 蔡志敏, “演算法入門與進階:使. 用 C 語言”, 台北市:松崗,民 80. -5-.
(6) [2] David. B.Stewart, “Measuring Execution Time and Read-Time Performance,” Embedded Systems Conference San Francisco, CA, April 2001.. [10]. Wen-Tsong Shiue and Chaitali Chakrabarti, “Memory Exploration for Low Power Embedded Systems,” Journal of VLSI Signal Processing, pp.167-178, Nov 2001.. [3] F. Catthoor, S. Wuytack, L. Nachtergaele, A.. [11]. E. Nordmark., “Stateless IP/ICMP Translation Algorithm (SIIT) ,” RFC 2765, 2000.. [12]. Wen-Tsong Shiue and Chaitali Chakrabarti , “Memory exploration for low power embedded systems,” ISCAS '99, Volume: 1 ,pp. 250-253, 1999.. [13]. Hiroyuki Tomiyama, Tohru Ishihara, Akihiko Inoue, and Hiroto Yasuura, “Instruction scheduling for power reduction in processorbased system design,” Design, Automation and Test in Europe, 1998., Proceedings , pp. 855- 860, 1998.. [14]. Xiaoyu Zhao and Yan Ma, “Linux Based NAT-PT Gateway Implementation,”. [15]. G. Tsirtsis and P. Srisuresh, “Network Address Translation- Protocol Translation (NAT-PT) ,” RFC 2766 , 2000.SDF. Vandecappelle, F. Balasa, and E.D. Greef, “Custom Memory Management Methodology-Exploration of Memory Organization for Embedded Multimedia System Design,” Kluwer Academic Publishers, 1998. [4] S. Deering and R. Hinden, “Internet Protocol,. Version 6 (IPv6) Specification,” RFC 2460, 1998. [5] R. Gilligan and E. Nordmark, “Transition. Mechanisms for IPv6 Hosts and Routers,” RFC 1933, 1996. [6] R. Gilligan and E. Nord mark, “Transition. Mechanisms for IPv6 Hosts and Routers,” RFC 2893, 2000. [7] Patrick. Hicks, Matthew Walnock, and Robert Michael Owens, “Analysis of power consumption in memory hierarchies,” Low Power Electronics and Design, 1997. Proceedings., 1997 International Symposium on , pp. 239-242, 1997.. [16] http://www.lart.tudelft.nl/lartware/compile-t. ools [17] http://gcc.gnu.org/onlinedocs/gcc-3.0/gcc_4.. html#SEC54. [8] Ellis Horowitz, Sanguthevar Rajasekaran,. and Sartaj Sahni, “Computer Algorithms,” New York: Computer Science Press, 1998.. [18] http://gcc.gnu.org/onlinedocs/gcc/ARM-Opt. [9] J.C.B. Mattos, M. Kreutz, and L. Carro,. [19] http://www.ailis.de/~k/knowledge/crosscom. ions.html. “Low-power control architecture for embedded processors ,” Integrated Circuits and Systems Design, 2002. Proceedings. 15th Symposium on, pp. 221- 226, 2002.. piling [20] http://www.ipv6.or.kr [21] http://www.research.att.com/sw/tools/graph. viz. 模組名稱. 表 2 ARM 程式碼統計表 ARM 指 模組呼 令總數 叫次數. 記憶體 存取. 模組執 行時間. write_packet. 70. 23924. 12.05%. 1.80%. PT_Translate_IPv6_Packet PT_Translate_IPv4_Packet translate_ICMPv4_dgram Get_Ipv6_hardware_address Get_Ipv4_hardware_address translate_ICMPv6_dgram NAT_Translate_IPv6_To_IPv4 NAT_Translate_IPv4_To_IPv6 create_IPv4_header read_packet_IPv6 Util_compute_checksum_pseudo read_packet_IPv4 Create_IPv6_header. 205 203 196 180 169 153 92 66 48 46 23 46 46. 8030 7989 7890 7989 7973 8000 8030 7974 8083 8030 16008 7989 7989. 11.85% 11.67% 11.13% 10.35% 9.70% 8.81% 5.32% 3.79% 2.79% 2.66% 2.65% 2.64% 2.64%. 10.74% 3.60% 18.22% 12.60% 12.62% 3.59% 5.37% 16.23% 3.56% 5.37% 0.90% 1.80% 1.80%. -6-.
(7) ARM 函數 整體總指令數. 表 3 搜尋演算法記憶體存取指令數 循序搜尋 二分搜尋 雜湊法 (Linear Probing) 81 49 51. 雜湊法 (separate chaining) 73. Insert 指令. 28. 25. 16. 25. Search 指令. 6. 10. 17. 18. 演算法. 圖 3 函數呼叫圖. -7-.
(8)
相關文件
序號 職類名稱及代號 技能範圍 版面編排方面:Adobe InDesign 影像編輯方面:Adobe PhotoShop 向量軟體:Adobe Illustrator. 其他軟體:Adobe
選手須熟悉 Mac 與 PC 二種作業平台。 (國際賽 指定機種為 Apple Macintosh)並須熟悉運用 以下軟體:. 版面編排方面:Adobe InDesign
阿吉老師將簡介 micro:bit 開發程式環境,並分享 micro:bit 內建感測器程式編寫、數位/類比信號讀取及寫入,並了解 如何用 micro:bit 連接電子模組編寫程式進行機電整合。.
固定資本形成總額 指固定資產(包括新、舊及企業自產自用之固定資產 ) 之購置減固定資產銷售後之數值 。 固定資產包括樓 宇 、 傢具 、 電腦軟件 、 機器及設備 、 交通工具
以下 Java 程式執行完後,輸出結果為何?(A)無法編譯,因為 Rectangle 類別不能同時 extends 一個類別且 implemets 一個介面(B)無法編譯,因為 Shapes 類別沒有
GBytes 1024 MBytes P9-編號 2 資料磁區在 Linux 之作業系統
使用 BibTEX 的 L A TEX 文件, 編譯過程有時有點讓人困惑。我們這裡假設以 foo.tex 為我們的 L A TEX 檔 (BibTEX 檔叫什麼無妨, 只要我們在文中引用
考試科目(編號):日文閱讀與翻譯