51单片机Keil里为何实际代码总是从0x800开始的?

2019-07-15 11:34发布

单片机是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 (.Listingsqxrh00.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)


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
猎国倾城
1楼-- · 2019-07-15 17:12
你去了解一下51的存储结构,就知道那个是怎么来的了!
hobbye501
2楼-- · 2019-07-15 23:08
这个是由于51内核寄存器组决定的  你用汇编的话 就明白了 C的话 无所谓
悠游大萝卜
3楼-- · 2019-07-16 03:33
hobbye501 发表于 2017-3-27 11:44
这个是由于51内核寄存器组决定的  你用汇编的话 就明白了 C的话 无所谓

怎么决定的?
汇编的话也是由0000H处的跳转到主程序入口执行,但是并没有哪里规定主程序必须是0x800啊?
这篇文章也只是0x100
https://wenku.baidu.com/view/bb38d1d502d276a200292e5a.html
悠游大萝卜
4楼-- · 2019-07-16 03:58
这网站我也是醉了,一个技术论坛帖子审查整得比广电还牛掰,至于么。。
悠游大萝卜
5楼-- · 2019-07-16 04:29
 精彩回答 2  元偷偷看……
武力戡乱
6楼-- · 2019-07-16 06:53
我也向了解了解。关注!

一周热门 更多>