ZHCUAV7Z september 1995 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , C346BA02 , C348A01 , CS241C01-Q1 , CS241C05-Q1 , CS246C01-Q1 , CS348C02-Q1 , OMAP-L132 , OMAP-L137 , OMAP-L138 , S470AV336LYSQRB , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
通常情况下,引用符号时会引用其运行时地址。但在运行时可能需要引用加载时地址。具体来说,将段从其加载地址复制到其运行地址的代码必须能够访问加载地址。.label 指令可定义一个引用段的加载地址的特殊符号。因此,如果正常符号相对于运行地址进行重定位,.label 符号也会相对于加载地址进行重定位。请参阅创建加载时地址标签,了解有关 .label 指令的更多信息。
#STDZ0755089和#STDZ0754221展示了 .label 指令的用法:将段从 SLOW_MEM 中的加载地址复制到 FAST_MEM 中的运行地址。图 8-3演示了#STDZ0755089的运行时执行。
如果使用表操作符,则不需要 .label 指令。请参阅节 8.8.4.1。
;-----------------------------------------------------------
; define a section to be copied from SLOW_MEM to FAST_MEM
;-----------------------------------------------------------
.sect ".fir"
.label fir_src ; load address of section
fir: ; run address of section
<code here> ; code for section
.label fir_end ; load address of section end
;-----------------------------------------------------------
; copy .fir section from SLOW_MEM to FAST_MEM
;-----------------------------------------------------------
.text
LDR r4, fir_s ; get fir load address start
LDR r5, fir_e ; get fir load address stop
LDR r3, fir_a ; get fir run address
$1: CMP r4, r5
LDRCC r0, [r4], #4 ; copy fir routine to its
; run address
STRCC r0, [r3], #4
BCC $1
;-----------------------------------------------------------
; jump to fir routine, now in FAST_MEM
;-----------------------------------------------------------
B fir
fir_a .word fir
fir_s .word fir_start
fir_e .word fir_end
/******************************************************/
/* FIR 示例的部分链接器命令文件 */
/******************************************************/
MEMORY
{
FAST_MEM : origin = 0x00001000, length = 0x00001000
SLOW_MEM : origin = 0x10000000, length = 0x00001000
}
SECTIONS
{
.text: load = FAST_MEM
.fir: load = SLOW_MEM, run FAST_MEM
}
有关在 C/C++ 代码中引用链接器符号的信息,请参阅节 8.6。