# 系統設計流程

Typical system design flow is Top-down design, as following:

requirementsspecificationarchitecturecomponent developmentsystem integration

# 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 中,通常通過將程式分割成不同段來實現,定位器需要知道每個段在記憶體中的具體位置。