Hw7 開發紀錄

閱讀筆記

嵌入式系統建構:開發運作於STM32的韌體程式
  • 硬體的記憶體常使用到 flash 及 RAM,flash 存的是程式映像,RAM 存的是執行 stack 及 data section 中的資料。
  • 處理器 reset 後進行取得指令-解析-執行3-stage pipeline。以 cortex-M3 來說,處理器會從:
  • 0x00000000 取得 MSP 初始位址
  • 0x00000004 取得 PC 初始位址,之後就從 PC 開始執行
  • 初始 PC 的 LSB 必定為 1,為了讓處理器可以執行在 thumb state,而且 cortex-M3 是執行 thumb-2 指令集
  • 如果內建 flash 是從 0x08000000 開始,可以透過位址別名存取
  • 程式可以這樣實做
asm( .word 0x20001000 )    // MSP
asm( .word main )          // PC 初始位址,指定為 main
  • linker script
  • section:
  • loadable:需要在執行期載入記憶體
  • allocatable:沒有包含資料,但須在記憶體中保留一段空間
  • .text:唯讀,ARM 指令機碼 -> loadable
  • .rodata:唯讀的全域變數 -> loadable
  • .data:有給與初始值的全域變數 -> loadable
  • .bss:沒有初始值的全域變數 -> allocatable
  • linker:輸入:數個目的檔;輸出:一個大的映像檔
  • variable .:稱為 location counter,用來指定輸出 section 的位置。
  • .text.rodata屬性一樣 (唯讀),所以可以放在同一個 section
  • LMA:section 在記憶體上的位址
  • VMA:在執行時期的位址
  • SECTION 告訴 linker 如何將 input sections map 到 output sections