關於讀者 Mr.K 的第一封來信

問題:讀者 Mr.K 的第一封來信

陳老師您好:
我想要了解並學習整個系統內部程式從src編譯連結到執行到底是怎麼做的
軟體到底如何載入到硬體執行 滿有興趣
所以買了您的系統程式書來學
恰好連結到您的網站
覺得您網站提供不少不錯的學習資源

想請問
http://sp1.wikidot.com/
左頁框選11.嵌入式系統後 補充教材的
投影片:EmbeddedBasics.ppt - 嵌入式系統基礎
投影片:EmbeddedAdvance.ppt - 嵌入式系統進階
已經無法連結下載
是否可以再提供下載做為參考?
以及能推薦做為練習不錯用的ARM開發版嗎?

系統程式一書第12章
看起來只能在電腦上OS裡寫個app模擬CPU去讀指令跟解析該做什麼事
後來在網站上看到如何設計一顆簡易的 CPU (使用 VHDL)
有在想 自己有空的話設計一個CPU0的HDL 以及直接使用像Xilinx或Altera開發板上的SRAM當程式儲存的地方 並結合系統程式書內所做的編譯器寫程式編譯燒進去執行
這樣就能更實際的從頭到尾都摸透
這樣可行嗎?可以給點建議嗎?我想只要加Bus的設計 再來就是 軟體怎麼放到SRAM上 還有要怎麼把執行畫面顯示在Console 因為不是用FPGA廠商提供的軟體IDE 可能要使用UART輸出來看結果

另外看了一些書 一直搞不太懂高階語言的宣告是用來指明變數的特性,那編譯後就會以型別配置資料所需要的記憶體位址空間嗎?
例:int a;沒給值,那是否已經配置好a變數的記憶體位址?
還是說int a=10;或int a;a=10;後,編譯器才會配置好a變數的記憶體位址?
宣告跟定義主要差在什麼地方?

煩請有空時能回覆
幫我解惑
謝謝

回答讀者 Mr.K 的問題

您好:

很高興收到您的來信,給予我這麼多寶貴的意見。

關於兩份投影片,是我疏忽忘了傳上去,現在已經上傳好了,請從下列網址中下載:

http://sp1.wikidot.com/embedded

但必須注意的是,這兩份投影片是我五年前寫的,使用的組合語言是一種虛擬碼,而不是 CPU0 的組

合語言,不過應該還是可以看得出意思。

另外,關於哪種開發板好用的問題,由於我瞭解不多,僅能提供本身的經驗。我曾經使用新華的 Creator S3C2410 開發板,該板使用 ARM9 CPU,運作都算正常,但是新華的書籍寫得不太好,也不清楚,這是蠻大的缺陷。後來我看到長高科技的書寫得比較詳細,但是由於沒有買過長高的板子,所有並不清楚到底好不好用。

關於在 Xilinx 或 Altera 開發板上實作出 CPU0 的想法,我認為這是可行的,我本身也很想要完成這樣一個專案,但是一直還沒有時間去完成它。目前我試過的就是「如何設計一顆簡易的 CPU」那篇當中用華盛頓大學的 Richard 教授所設計的那個 VHDL 程式,然後在 Altera Quartus II 上跑出來的結果。但是那個程式並沒有包含匯流排協定,而是將 RAM 放入後直接使用,這不太符合一般的設計方式,如果要將 CPU0 放上Altera 開發板,應該會需要處理匯流排的協定部分。(但我認為將 CPU0 放上 FPGA 是可行的)。

關於下列問題,由於我本身對 VHDL 的經驗太過有限,因此還沒有能力回答:

軟體怎麼放到SRAM上 還有要怎麼把執行畫面顯示在Console 因為不是用FPGA廠商提供的
軟體IDE 可能要使用UART輸出來看結果

另外關於下列問題,則比較好回答。

編譯後就會以型別配置資料所需要的記憶體位址空間嗎?
例:int a;沒給值,那是否已經配置好a變數的記憶體位址?
還是說int a=10;或int a;a=10;後,編譯器才會配置好a變數的記憶體位址?
宣告跟定義主要差在什麼地方?

當編譯器編譯 int a=10 這種指令時,會在資料段保留一個四位元組的空間,裡面塞入整數 10 進去,以 CPU0 而言這個指令相當於

.data
a: WORD 10

但是對於 int a; 這種沒設初值的指令,則會被編譯到 BSS 段,如果寫成 CPU0 的組合語言,將會如下所示。

.bss
a: RESW 1

這些變數雖然在執行時期都會有對應的空間,但是在目的檔中,只有 int a=10 這種資料段的指令才會佔用空間,沒設初值的指令會放在 BSS 段,在目的檔中只會記錄 BSS 段的長度而已 (因為初始值未定,有些系統會將 BSS 段設定為全部是 0)。

非常感謝您提供這麼多寶貴的意見,也歡迎您多多來信!

如果您將 CPU0 成功的放到 FPGA 上,可以的話也請提供一份程式碼給我參考,感謝您!

金門大學 陳鍾誠 敬上

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License