Artificial Intelligence Programming Lab(AIPLab) 討論區

Please login or register.

請輸入帳號, 密碼以及預計登入時間

新聞:

[開學]106學年第1學期的課程看版開張了 歡迎同學問問題-20170917

作者 主題: [期末報告]-Embedded system-95441114  (閱讀 28638 次)

waynechen

  • Newbie
  • *
  • 文章: 2
    • 檢視個人資料
[期末報告]-Embedded system-95441114
« 於: 一月 07, 2009, 06:24:24 am »
資工三B  95441114  陳培瑋

*Compiler在嵌入式系統(Embedded system)
軟體低功耗的設計、中斷程式、減少應用所需的總指令周期數都有舉足輕重的地位。

低功耗設計的目的
充分利用應用所允許的最深睡眠狀態,並確保晶片盡可能長時間地保持在此一狀態下。編譯器對於微控制器可維持在睡眠模式下的時間長短有著微妙卻十分重要的影響。因為採用的編譯方法可能會在中斷程式上和在帶分區記憶體(banked memory)元件的記憶體地址定位上浪費很多CPU週期。

中斷程式
編譯器對於中斷程式的貢獻在於它可以影響一個中斷出現時相應需保存的暫存器個數。為避免記憶體覆蓋,傳統的編譯器都會將一個中斷可能用到的所有暫存器都保存下來。而大多數編譯器都無法得知哪些暫存器可能會或不會被某個中斷使用,因此只有將所有暫存器全部保存。
例如:Microchip的PIC16所用的一款編譯器並不考慮哪些數據是必須的,自然會為每個中斷均保存8位元組數據。保存8位元組數據總共需要42個指令週期(其中23個用於背景保存,19個用於恢復)。看起來好像並不多,但在一個大量包含中斷的應用中,CPU‘甦醒’時可能就需要多用幾千個指令週期,因而不必要地增大了功耗。

減少應用所需的總指令周期數
傳統編譯器無法識別哪些函數呼叫的是哪些變量,因此也就無法最佳化這些函數的記憶體分配。
同時,這些編譯器也無法得知某個特定的記憶體區塊是否會被程式碼在任何地方選中。因此,不論一個記憶體區塊是否已被選中,這些編譯器都會自動為每一次記憶體存取產生區塊選擇指令。
有些編譯器廠商已透過提供記憶體區塊限定子(bank qualifier)作為C程式碼的擴展以識別變量地址,解決了這一問題。
程式設計師可以透過使用這些非標準也不可移植的程式碼,手動將變量分配給記憶體區塊。採用區塊限定子允許編譯器將某個確切的記憶體區塊看作其內部的一個對象,因而減少編譯後產生區塊選擇指令的數量。然而,該方法卻並不能保證因變量(dependent variable)會被分配到同一個記憶體區塊中。因此,每當需要將一個記憶體區塊中的變量寫入另一個記憶體區塊時,仍需執行區塊選擇指令。此外,要想在多個程式碼模組間追蹤所有的記憶體地址並確保所有指針都擁有正確的地址,這是一個冗長耗時的過程,它本身可能引發編程錯誤。
例如:具有全面程式碼產生(omniscient code generation,OCG)技術之編譯器對所有程式模組中的每個暫存器、堆疊、指針、對象和變量聲明都很清楚,所以它能最佳化所有變量和暫存器的分配,以及編譯後的堆疊中所保存的每個指針和對象的大小和範圍。OCG編譯器無需程式設計師的任何干涉,就能最佳化地分配記憶體,因而最小化甚至消除應用所需的區塊選擇指令。

※參考資料
電子工程專輯:嵌入式系統低功耗設計軟體策略 http://www.eettaiwan.com/ART_8800523811_628626_TA_b46cc545.HTM

加分題
Ada
Ada,是一種程式語言。源於美國軍方的一個計劃,旨在整合美軍系統中運行著上百種不同的程式語言編寫的程序,命名是為了紀念愛達•勒芙蕾絲而使用Ada。

Ada語言最早是針對嵌入式和實時系統設計的,並且在今天依然在這方面使用廣泛. Ada95版, 是由INTERMETRICS公司的塔克.塔夫特於92到95年間設計的,當時主要是希望改進對於 系統,數字,財務軟體編程的支持.

Ada語言的重要特徵就是其鍵入式風格, 模組化設計, 編譯檢查,平行處理,異常處理及泛型編程. Ada在95年加入了對物件導向設計的支持, 包括動態分配等.

Ada的編譯檢查主要是針對沒有分配的內存讀寫的保護, 堆疊溢出錯誤, 單個錯誤空閒, 隊列讀寫錯誤以及其他可以避免的小問題. 這些檢查可以在為增加效率的情況下被取消, 但是在編譯的時候他們卻能帶來很高的效率. 同樣它也包括對程序的嚴正的設置.因為這些原因,它被廣泛應用於一些非常重要的系統中,例如航空電子學,武器及太空飛行器的作業系統中.

同樣它支持很多的編譯時間檢查,這些檢查被用來避免一些錯誤的發生.這種錯誤往往是在其他語言中在運行以前都不能被察覺到的,需要在源碼中加入特殊的檢查設置才能被發現.

Ada的動態內存管理非常安全和高規格, 它類似於JAVA語言卻不同於C語言的.這種特殊功能並不需要特殊的運行設置. 儘管這種語言的語意結構允許對於不能讀寫的目標進行自動的碎片搜集,但是大多數運行都不支持它. Ada卻支持有限形式基於區域的存儲管理. 無效的讀寫常在運行時候被檢查出來(除非這種檢測被人為關閉) 並且有時候在編譯時候就被發現.

Ada語言的定義同國際標準化組織(ISO)的標準有很大不同,因為他是一個自由內容形式的. 這種做法的後果是被廣大程式設計師只能從它的標準化文檔(普遍認為是Ada的參考使用手冊(ARM))尋找細節性的技術問題,但是普遍情況是一本標準教科書卻可以在其他不同語言上使用.

資料來源:維基百科 http://en.wikipedia.org/wiki/Ada_(programming_language)
« 最後編輯時間: 一月 08, 2009, 04:21:58 pm 由 waynechen »
已記錄

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1897
    • 檢視個人資料
回覆: [期末報告]-Embedded system-95441114
« 回覆文章 #1 於: 一月 15, 2009, 02:21:18 pm »
OK! 18
已記錄
 

SimplePortal Classic 2.0.5