在keil_v5\arm\armclang\sw\hlp --》 中由help文件
arm_instruction_set_reference_guide.pdf --》 arm指令集
compiler_reference_guide.pdf --》 c7.2 syntax of a scatter file
compiler_user_guide.pdf
errors_and_warnings_reference_guide.pdf
instruction_set_assembly_guide_for_armv7_and_earlier_arm_architectures.pdf
libraries_user_guide.pdf
migration_and_compatibility_guide.pdf
/* include memory map */ --》 可以包含其他.ld
output_format("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") --》 確定大小端
entry(_vector_start); --》 啟動
section cross references --》 可用於檢視每個.c引用的其他.c的函式
removing unused input sections from the image. --》
adding veneers to the image
image symbol table
memory map of the image
image component sizes
通過beyond compare檔案,可以比較修改前與修改後的.map檔案差異,如下
code (inc. data) ro data rw data zi data debug
72068 15504 6244 1320 39704 879702 grand totals
72068 15504 6244 656 39704 879702 elf image totals (compressed)
72068 15504 6244 656 0 0 rom totals
case1: 在乙個.c中加入一句printf("\r\n");後map檔案會差別較大,對於一些mcu,可能導致無法開機啟動
可以看到加了1句printf,導致code端增加很多內容
code (inc. data) ro data rw data zi data debug library member name
28 6 0 0 0 84 __2printf.o
40 6 0 0 0 72 _printf_char_file.o
12 0 0 0 0 68 defsig_exit.o
52 0 0 0 0 72 defsig_general.o
80 58 0 0 0 68 defsig_rtmem_inner.o
12 0 0 0 0 68 defsig_rtmem_outer.o
52 38 0 0 0 68 defsig_rtred_inner.o
12 0 0 0 0 68 defsig_rtred_outer.o
case2: sprintf使用不當,可能導致開機undefined_exception,可以從map檔案中檢視處理
case3:對於出現陣列越界的問題,列印出陣列越界位址,從map檔案中看越界的位置
.text 引用 .text,函式的直接呼叫
(.constdata) refers to oads.o(.text), 函式指標的賦值使用
(.text) refers to (.constdata) for __func__, 函式中通過函式指標呼叫函式
scatter/steering/symdefs file
compiler_reference_guide.pdf中的 c5.5.4 symdefs file format
type flag
x --》 a64 code (aarch64 only)
a --》 a32 code (aarch32 only)
t --》 t32 code (aarch32 only)
d --》 data
n --》 number.
example
this example shows a typical symdefs file format:
## arm linker, 6030169: last updated: date
;value type name, this is an added comment
0x00008000 a __main
0x00008004 a __scatterload
0x000080e0 t main
0x0000814d t _main_arg
0x0000814d t __ar**_alloc
0x00008199 t __rt_get_ar**
…# this is also a comment, blank lines are ignored
…0x0000a4fc d __stdin
0x0000a540 d __stdout
0x0000a584 d __stderr
0xfffffffd n __sig_ign
形如sections 0x1e200 align 32
ram_data {}
ram_bss {}
table a2-1 aarch32 processor modes
processor mode
mode number
user
0b10000
fiq0b10001
irq0b10010
supervisor
0b10011
monitor
0b10110
abort
0b10111
hyp0b11010
undefined
0b11011
system
0b11111
暫存器table a2-2 predeclared core registers in aarch32 state
register names
meaning
r0-r15 and r0-r15
general purpose registers.
a1-a4
argument, result or scratch registers. these are synonyms for r0 to r3.
v1-v8
variable registers. these are synonyms for r4 to r11.
sbstatic base register. this is a synonym for r9.
ipintra-procedure call scratch register. this is a synonym for r12.
spstack pointer. this is a synonym for r13.
lrlink register. this is a synonym for r14.
pcprogram counter. this is a synonym for r15.
啟動boot
啟動向量表
ARM啟動解析
參考文章 起始位址 在分析啟動流程之前我們首先要清楚不論是arm的何種處理器,其都是從0x0000 0000位址處開始執行程式的。以2440為例 1.啟動方式 s3c2440支援兩種啟動模式 nand和非nand 這裡是nor flash 具體採用的方式取決於om0 om1兩個引腳的狀態。需要檢測硬...
arm彙編相關
cmp rn rm operand tst logical and ldr用法 摘自arm嵌入式系統開發一書 資料 基址暫存器 示例 mem base offset 基址暫存器加上偏移 ldr r0,r1,offset mem base offset 不變 ldr r0,r1,offset mem ...
ARM相關軟體介紹
分為ads和axd arm extended debugger ads負責編譯 鏈結,axd負責除錯。ads主要有以下幾項功能 提供彙編器和編譯器,彙編和編譯arm組合語言檔案 標準c c 語言檔案。內含鏈結器,進行目標檔案鏈結,生成乙個用於除錯的映象檔案。含有標準c c 庫檔案,支援使用者程式。a...