链接时决定的,要这么整:
描述下语法
?PR?SYSTEMINIT?MAIN (0x800)
SYSTEMINIT是个函数
它包含在MAIN.c编译出的main.obj内,绝对定位地址为0x800
Keil的帮助里是这么写的:
CODE Linker DirectiveAbbreviation | CO
| Arguments | CODE (〚range〛 〚segment 〚(address)〛 〚, ...〛〛)
| Default | None.
| µVision | Options — BL51 Locate — Code Range.
Options — BL51 Locate — Code Segments.
| Description | The CODE directive specifies:
- The address range for relocatable CODE segments.
- The order of relocatable CODE segments in memory.
- The absolute memory location of individual CODE segments.
This directive is specified as follows:
CODE (〚range, ...〛 〚segment 〚(address)〛 〚, ...〛〛)Where
range | specifies the address range(s) to use for CODE segments. | segment | is the name of a segment. | address | is a physical address at which the segment is to be located. |
Note
- The BL51 Linker allows you to use wildcards when locating program segments. For example, ?PR?*?MYFILE may be used to represent all program segments from the MYFILE source file.
| See Also | BIT, DATA, IDATA, PDATA, PRECEDE, RAMSIZE, STACK, XDATA
| Example | The example below specifies that relocatable CODE segments be located in the address space 0 – 0x3FFF and 0x8000 – 0xFFFF:
BL51 MYPROG.OBJ CODE(0 - 0x3FFF, 0x8000 - 0xFFFF)To specify the order for segments, you must include the names of the segments separated by commas. The following example will place the ?PR?FUNC1?A and ?PR?FUNC2?A segments at the beginning of the CODE memory:
BL51 A.OBJ CODE(?PR?FUNC1?A, ?PR?FUNC2?A)You can also specify the memory location for a segment. The example below will place the ?PR?FUNC1?A segment at 800h and the ?PR?FUNC2?A segment after at this segment:
BL51 A.OBJ CODE(?PR?FUNC1?A (0x800), ?PR?FUNC2?A) |
|