Artificial Intelligence Programming Lab(AIPLab) 討論區

Please login or register.

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

新聞:

[慶賀]恭喜張清貿醫師升任北榮傳醫科主治醫師-20170201

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

95441130

  • Newbie
  • *
  • 文章: 1
    • 檢視個人資料
[期末報告]-Embedded system -95441130
« 於: 一月 07, 2009, 02:43:35 am »
資工三B  95441130  陳啟瑋

說明Embedded system和Compiler之關係

編譯器的主要任務就是將開發人員比較熟悉使用的高階程式語言翻譯成嵌入式處理器可以解譯的低階語言。
例如:C語言的編譯器可以將C語言的程式編譯成低階的組合語言程式。Java語言的編譯器可以將Java語言的程式編譯成低階的Java byte code。
不同的嵌入式系統平台,其核心處理器架構不同,採用的作業系統也不同,因此需要不同的編譯器來進行嵌入式軟體的解譯。例如:最常使用的ARM-Linux-gcc編譯器就是GNU C Compiler針對ARM嵌入式處理器與Linux作業系統所組成的嵌入式平台的軟體程式編譯器。

C/C++程式設計語言仍然是嵌入式系統的軟體開發流程的主流工具,也促進了嵌入式系統產業的繁榮。不過,嵌入式系統所需的C/C++程式語言編譯器必須具備較高的編譯效率,以便進行一些程式效能或容量上的最佳化。
區別於一般電腦中的C語言編譯器,嵌入式系統中的C語言編譯器要專門進行優化,以提高編譯效率。優秀的嵌入式系統C編譯器代碼長度和執行時間僅比以組合語言編寫的同樣功能程度長5-20%。
編譯效率的不同,是區別嵌入式系統C編譯器之間性能差別的重要根據之一。而C編譯器殘餘的5-10效率差別,完全可以由現代微控制器的高速度、大記憶體空間以及產品提前進入市場來彌補。

編譯器與減少嵌入式設備功耗之關係

嵌入式系統被廣泛應用於可擕式和移動性較強的產品中,低功耗設計是必須面對的問題,因產品不是一直都有充足的電源供應,往往靠電池來供電,所以應考慮降低功率消耗,盡可能地延長電池的使用時間。

可藉由優化軟體來降低系統功耗。對軟體進行優化,必須瞭解每條指令所產生的功耗,並選擇正確的編譯方法,以降低程式執行的功耗。 
通過對編譯器的優化,生成效率更高的代碼,可以有效地降低嵌入式設備的功耗。在一個程式中,每一條指令都將啟動微處理器中的某些硬體部件,因此,正確選擇指令可降低處理器的功耗。通過建立特定處理器架構下指令集的功耗資訊,利用“減少跳轉的指令重排序”等方法,可以進行有效的軟體低功率優化。

大多數微控制器都可以進入某種睡眠或暫停狀態,以此降低晶片功耗。在這些狀態下,CPU將停止執行,晶片上的許多其它資源也會暫停或關閉。晶片所允許的睡眠狀態類型和應用的需要決定了應用中可以採用那些睡眠狀態。
軟體低功耗的設計目的就是充分利用應用所允許的最深睡眠狀態,並確保晶片盡可能長時間地保持在這一狀態下。編譯器對於微控制器可維持在睡眠模式下的時間長短有著微妙卻十分重要的影響。因為採用的編譯方法可能會在中斷程式上和在帶分區記憶體(banked memory)元件的記憶體地址定位上浪費很多CPU週期。

保持中斷程式短小快速能夠幫助將中斷開銷降至最低。編譯器可以影響一個中斷出現時相應需保存的暫存器個數。傳統的編譯器為了避免記憶體覆蓋,都會將一個中斷可能用到的所有暫存器都保存下來。而大多數編譯器都無法得知哪些暫存器可能會或不會被某個中斷使用,因此只有將所有暫存器全部保存。而用於保存和恢復中斷時各種暫存器參數的CPU週期越多,消耗的功率也就越多。

採用全面程式碼產生(omniscient code generation,OCG)技術的新型編譯器則能選擇性地只保存每個特定中斷所需的暫存器,也確切地知道哪些函數呼叫了其它函數,或被其它函數呼叫,哪些變量和暫存器是必須的。
與傳統編譯器相較,OCG編譯器將中斷相關的指令週期數減少了40%~60%。
根據應用的不同,透過編譯可節省的指令週期數可能非常大。

例如,一個滑鼠每秒鐘產生300次中斷,這些中斷會佔用處理器所有工作週期的不到1%。而一個靠中斷驅動且波特率為480,600bps的串列通訊埠每秒產生24,000個中斷。
傳統每個中斷需42條指令週期(即168個時脈週期)來保存和恢復中斷背景的編譯器,那麼每秒中斷會佔用超過403萬2千個CPU週期,或可說會佔用一個20MHz PIC16 20%的可用週期。
採用OCG編譯器,每個中斷平均只需21個指令週期(即84個時脈週期),那麼CPU週期的佔用量會降低至201萬6千,在保存和恢復中斷背景資訊上節省一半的時脈週期,因而讓CPU得以將其工作週期的10%用於睡眠模式。假設CPU在工作模式下電流為10mA,睡眠模式下為1uA,那麼OCG編譯器就能將MCU的功耗降低約1mA,也就是10%。
新型編譯器在節省指令週期和節省功耗方面能夠做出相當大的貢獻。

資料來源

[1] 嵌入式系統開發流程
http://cn.el.yuntech.edu.tw/course/95/OES/Chapter2%20EmbeddedSystemDesignFlow.pdf
[2] 嵌入式系統低功耗設計軟體策略
http://www.eettaiwan.com/ART_8800523811_628626_TA_b46cc545.HTM
[3] 挑戰緊緻化機構下的熱功耗設計由裡到外從降低處理晶片的功耗需求看起
http://tech.digitimes.com.tw/ShowNews.aspx?zCatId=A25&zNotesDocId=0000061175_A5P2WM076E8TYGD4THBHD
[4] 高階語言編譯器
http://wiki.ccw.com.cn/
[5] 嵌入式系統中軟體優化的低功耗研究
http://it.mie168.com/htmlcontent.asp


加分題-Python

Python是物件導向程式級高階程式語言,也是直譯式程式語言,Python以強調對程式語言的語句易讀、易懂、易學及移植性好加快程式開發的時效,且擁有強大豐富的函式庫的支持,並減少開發及維護成本的觀念進行發展,Python同時支援modules和packages,另外Python為跨平台程式語言也支援Unicode字元,此外,Python強大的可擴展性,讓開發人員既可以非常容易地利用C/C++編寫Python的擴展模塊,還能將Python嵌入到C/C++程序中,為自己的系統添加動態擴展和動態編程的能力,還提供了許多自行開發的library以提供其他Python程式設計者下載使用,使得Python非常有吸引力,現今Python發展迅速及使用廣泛。

雖然 Python 可能被粗略地分類為「script language」,但實際上一些大規模軟體開發例如 Zope、Mnet 及 BitTorrent,Google 也廣泛地使用它。 Python 的支持者較喜歡稱它為一種高階動態編程語言,原因是「script language」泛指僅作簡單編程任務的語言,如 shell script、JavaScript 等只能處理簡單任務的編程語言,並不能與 Python 相提並論。
此外,由於 Python 對於 C 和其他語言的良好支援,很多人還把 Python 作為一種「glue language」(註1)使用。
(註1)glue language是用來連接軟體元件的程式語言。Ex:PHP、Shell script、Perl、等……

Python 是一種物件導向、解釋性的程式語言,它具備了功能模組化 (Modules)、異常處理 (Exceptions)、動態資料格式 (Dynamic Typing)、以及內置高階資料型態 (如 Directory, Tuple)等特色。這種語言具有非常簡捷而清晰的語法特點,適合完成各種高層任務 (如建立網上應用程式、桌上應用程式、數據處理、3D遊戲等),這些程式幾乎可以在所有的作業系統中運行。目前,基於 Python 的相關技術正在飛速的發展,用戶數量急劇擴大,相關的資源也非常多。

Python 應用實例
教學環境: 美國 MIT 新生程式入門及 OLPC 計畫選用 Python 為預設語言。
入口網站服務: Google, YouTube, Yahoo! 網站的關鍵服務以 Python 語言開發。
動畫軟體: Maya, Blender 語言擴充介面支援 Python 語言。
圖形介面及動畫遊戲: wxPython, PyGame 是協助創作的好工具。
郵遞論壇: mailman 程式以 Python 語言寫成。
網頁應用伺服與開發框架: Google App Engine, launchpad, Zope, Django, TurboGears, Pylons 是主要的範例。
安裝程式: Red Hat Linux 開機安裝程式及 Gentoo 套件管理。
檔案點對點分享工具: BitTorrent 工具程式以 Python 語言開發。

Python可以寫出非常精練及可讀性高的程式。用Python寫出的程式通常比用C或C++寫的程式要短得多,其理由如下:
1.因為其高階的資料型態,使得你可以用很簡單的敘述(statement)就能夠表達複雜的運作過程
2.Python使用縮排來代替C/C++中常見的前後括號{}
3.Python不需要變數或是參數的宣告

Python的語法是非常優美的。其中一點就是,區塊語句的表示不是C語言常用的{},或其它符號對,而是採用縮近標記法。
使用縮近標記法減少了視覺上的混亂,並且使程式變短,這樣就減少了需要對基本代碼單元注意的範圍;其次,它減少了程式師的自由度,更有利於統一風格,使得閱讀別人的程式更容易。感覺還是不錯的,就C語言來說,在if語句後面大括弧的寫法就好幾種。
下面的一個比較:
C語言為:if (2<a && a<5)
Python可以表示為:if (2<a<5) :

以下為使用Python之九九乘法表程式範例
# 乘法的第一個數字
for i in range(1, 10):
    # 乘法的第二個數字
    for j in range(1, 10):
        print "%d * %d = %d" % (i, j, i*j)
    # 斷行
    print

資料來源

[1]Python Taiwan中文社群
http://python.tw/
[2]Python - 維基百科,自由的百科全書
http://zh.wikipedia.org/wiki/Python
[3]Python Handbook
http://www.iis.sinica.edu.tw/~marr/python/PythonHandbook.html
[4]Python 教學文件
http://www.freebsd.org.hk/html/python/tut_tw/tut.html
[5]opensourceinstall.org
http://tw.opensourceinstall.org/python
[6] Victor's 易記學 程式設計教學
http://ez2learn.com/python-tutorial/tutorial/for-loop
« 最後編輯時間: 一月 09, 2009, 12:53:14 am 由 95441130 »
已記錄

admin

  • 管理員
  • Hero Member
  • *****
  • 文章: 1839
    • 檢視個人資料
回覆: [期末報告]-Embedded system -95441130
« 回覆文章 #1 於: 一月 15, 2009, 02:22:02 pm »
Good, 20
已記錄
 

SimplePortal Classic 2.0.5