单片机是STC15F204EA, keil里不论勾选不勾选use onchip rom都没用。
这样造成0x7FF之前大部分是0xFF,浪费程序空间。看startup.a51也没看明白这个0x800怎么来的。。
有大神指导吗?
CODE 0800H 006DH INBLOCK ?PR?TM0?MAIN
BL51 BANKED LINKER/LOCATER V6.22, INVOKED BY:
D:PROGRAM FILES (X86)KEIL5C51BINBL51.EXE .Objectsmain.obj TO .Objectsqxrh00 PRINT (.Lis
tingsqxrh00.m51) RAMSI
>> ZE (256) CODE (0X0000-0X0FF8)
MEMORY MODEL: SMALL
INPUT MODULES INCLUDED:
.Objectsmain.obj (MAIN)
D:PROGRAM FILES (X86)KEIL5C51LIBC51S.LIB (?C_STARTUP)
LINK MAP OF MODULE: .Objectsqxrh00 (MAIN)
TYPE BASE LENGTH RELOCATION SEGMENT NAME
-----------------------------------------------------
* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"
DATA 0008H 001EH UNIT ?DT?MAIN
IDATA 0026H 0001H UNIT ?STACK
* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0003H ABSOLUTE
0003H 0008H *** GAP ***
CODE 000BH 0003H ABSOLUTE
000EH 07F2H *** GAP ***
CODE 0800H 006DH INBLOCK ?PR?TM0?MAIN
CODE 086DH 0049H INBLOCK ?PR?MAIN?MAIN
CODE 08B6H 000FH INBLOCK ?PR?UART_INIT?MAIN
CODE 08C5H 000CH UNIT ?C_C51STARTUP
OVERLAY MAP OF MODULE: .Objectsqxrh00 (MAIN)
SEGMENT
+--> CALLED SEGMENT
---------------------
?C_C51STARTUP
+--> ?PR?MAIN?MAIN
?PR?MAIN?MAIN
+--> ?PR?UART_INIT?MAIN
******************************************************************************
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 00C8H BYTE ( 9%) *
******************************************************************************
Program Size: data=39.0 xdata=0 code=215
LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
怎么决定的?
汇编的话也是由0000H处的跳转到主程序入口执行,但是并没有哪里规定主程序必须是0x800啊?
这篇文章也只是0x100
https://wenku.baidu.com/view/bb38d1d502d276a200292e5a.html
一周热门 更多>