# 系統設計流程
Typical system design flow is Top-down design, as following:
# Requirements
從使用者的角度描述最終產品的用途和功能,並簡單明確地說明使用者期望獲得的結果。
Describe WHAT, not HOW
可以列出以下兩種 requirements
- Functional: 內部作為黑盒子,僅描述輸出作為輸入的函數關係
- Non-functional: 例如性能、可靠性、大小、成本
# Specification
- 規格描述應更精確且通常包含量化的內容,並不應該暗示特定的架構。
- 列出假設條件,例如「正常溫度監控:每 5 分鐘一次」。
- 可以涵蓋功能性和非功能性的要素。
# Architecture
- 架構描述應該列出滿足規格的主要組件,分為硬體和軟體兩大類。
- 硬體組件包括如 CPU、周邊設備
- 例如 ARM CPU、鍵盤、LCD 等
- 軟體組件則包括主要程式及其操作
- 如 OS 和 driver
- 架構需要考慮功能和非功能規格。此外,系統對刺激的期望反應應該反映一個或多個系統需求,並需要設計演算法或工作流程來測量、評估和驗證這些需求的達成。
# Component development
組件開發是指硬體和軟體各個組件的實際實現過程,其中一些組件可能是現成的。
# System integration
系統整合是將各個組件組合並進行測試和驗證,應盡早測試更多功能,以便快速發現錯誤。
# 系統開發
在 host computer 上進行開發,compiled, assembled, and linked,然後將代碼轉移到 target 硬體上執行。
開發板 (Development board) 通常具有與最終產品相同的 CPU 及許多周邊設備,用在建立真實硬體之前開發和測試軟體。
# 補充
# Cross Compiler
Runs on host but generates machine code for target.
# Linker/Locators
對於電腦系統:
- Linker (連接器): 創建可在主機上執行的映像檔案。
- Loader (載入器): 在運行時將映像檔案載入記憶體。
對於嵌入式系統:
- Locater (定位器): 創建包含二進位映像或其他格式的檔案,並將其複製到目標系統,該系統會獨立運行(不需要載入器)。
- 在這種情況下,需要事先確定具體的記憶體地址。
- 程式的一些部分放在 ROM 中,一些放在 RAM 中,通常通過將程式分割成不同段來實現,定位器需要知道每個段在記憶體中的具體位置。