c8059f320
flash :16kB 0000H-3FFFH, c代码
在keil中可设置编译地址
比如
之后keil会将代码编译在2a00之后这些地址空间里面,恩,是实际的flash的物理地址,不要认为是虚拟地址
由于复位时,cpu总是从0000开始执行,所以0000处必须有代码,keil帮我们安排了一个跳转代码,不是跳到main,而是跳到
startup处,去执行一些堆栈之类的初始化代码,
95: ?C_STARTUP: LJMP STARTUP1
96:
97: RSEG ?C_C51STARTUP
98:
99: STARTUP1:
C:0x0000 023188 LJMP STARTUP1(C:3188)
C:0x0003 FF MOV R7,A
C:0x0004 FF MOV R7,A
C:0x0005 FF MOV R7,A
C:0x0006 FF MOV R7,A
C:0x0007 FF MOV R7,A
C:0x0008 FF MOV R7,A
C:0x0009 FF MOV R7,A
C:0x000A FF MOV R7,A
STARTUP1:
C:0x3188 53A87F ANL IE(0xA8),#0x7F
C:0x318B 53D9BF ANL PCA0MD(0xD9),#0xBF
C:0x318E 750810 MOV DataSent(0x08),#0x10
C:0x3191 750900 MOV 0x09,#Setup(0x00)
C:0x3194 75810A MOV SP(0x81),#DataSize(0x0A)
C:0x3197 0231D5 LJMP C:31D5
C:0x319A 022BB7 LJMP main(C:2BB7)
C:0x319D E4 CLR A
C:0x319E 93 MOVC A,@A+DPTR
//执行完初始化之后跳转到main处
C:0x2BB3 E0 MOVX A,@DPTR
C:0x2BB4 F597 MOV USB0DAT(0x97),A
C:0x2BB6 22 RET
main:
C:0x2BB7 E4 CLR A
C:0x2BB8 9000A4 MOV DPTR,#0x00A4
C:0x2BBB F0 MOVX @DPTR,A
C:0x2BBC 53D9BF ANL PCA0MD(0xD9),#0xBF
C:0x2BBF C2AF CLR EA(0xA8.7)
C:0x2BC1 12392C LCALL Clock_Init(C:392C)
//main是从2BB7开始的,前面设置的2A00代码段开始处是什么东西呢?
C:0x29FD FF MOV R7,A
C:0x29FE FF MOV R7,A
C:0x29FF FF MOV R7,A
Handle_Setup:
C:0x2A00 E596 MOV A,USB0ADR(0x96)
C:0x2A02 20E7FB JB 0xE0.7,Handle_Setup(C:2A00)
C:0x2A05 1235A3 LCALL L?0352(C:35A3)
C:0x2A08 E596 MOV A,USB0ADR(0x96)
C:0x2A0A 20E7FB JB 0xE0.7,C:2A08
C:0x2A0D 759691 MOV USB0ADR(0x96),#TMR3CN(0x91)
C:0x2A10 E596 MOV A,USB0ADR(0x96)
C:0x2A12 20E7FB JB 0xE0.7,C:2A10
//是一个自定义的函数,也可看出2a00的flash之前是空白的
用u-ec5的下载工具可以看到
...................................
...............................
整个程序到此结束,
main函数为什么会在2BB7?keil编译时内定的
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 0002H UNIT ?C?LIB_DATA
DATA 000AH 0001H UNIT _DATA_GROUP_
IDATA 000BH 0001H UNIT ?STACK
* * * * * * * X D A T A M E M O R Y * * * * * * *
XDATA 0000H 0056H UNIT ?XD?USB
XDATA 0056H 004EH UNIT ?XD?MAIN
XDATA 00A4H 000EH UNIT _XDATA_GROUP_
00B2H 034EH *** GAP ***
XDATA 0400H 0400H ABSOLUTE
* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0003H ABSOLUTE
0003H 27FDH *** GAP ***
CODE 2800H 0001H ABSOLUTE
2801H 01FFH *** GAP ***
CODE 2A00H 01B7H UNIT ?PR?HANDLE_SETUP?USB
CODE 2BB7H 0179H UNIT ?PR?MAIN?MAIN
CODE 2D30H 0116H UNIT ?PR?GET_DESCRIPTOR?USB
CODE 2E46H 00EDH UNIT ?CO?USB_HID_DESCRIPTOR
CODE 2F33H 00D4H UNIT ?C?LIB_CODE
CODE 3007H 00C7H UNIT ?PR?BOOTLOADERHANDLER?MAIN
CODE 30CEH 00BAH UNIT ?PR?GET_STATUS?USB
BL51 BANKED LINKER/LOCATER V5.03 07/31/2011 16:07:05 PAGE 2
CODE 3188H 0092H UNIT ?C_C51STARTUP
CODE 321AH 0091H UNIT ?PR?SET_FEATURE?USB
CODE 32ABH 008FH UNIT ?PR?CLEAR_FEATURE?USB
CODE 333AH 0086H UNIT ?PR?_HID_SENDDATA?USB
CODE 33C0H 0080H UNIT ?PR?SET_CONFIGURATION?USB
CODE 3440H 0080H UNIT ?PR?_USB_ENABLE?USB
CODE 34C0H 007DH UNIT ?PR?HANDLE_OUT2?USB
CODE 353DH 007BH UNIT ?PR?USB
CODE 35B8H 006BH UNIT ?PR?HANDLE_IN1?USB
CODE 3623H 0069H UNIT ?PR?USB_HANDLER?USB
CODE 368CH 005CH UNIT ?PR?_FIFO_READ?USB
CODE 36E8H 005BH UNIT ?C_INITSEG
CODE 3743H 0059H UNIT ?PR?GET_CONFIGURATION?USB
CODE 379CH 004BH UNIT ?PR?SET_ADDRESS?USB
CODE 37E7H 0049H UNIT ?PR?MAIN
CODE 3830H 0049H UNIT ?PR?_FIFO_WRITE?USB
CODE 3879H 0044H UNIT ?PR?GET_INTERFACE?USB
CODE 38BDH 003AH UNIT ?PR?_USB_GETOUTDATA?USB
CODE 38F7H 0035H UNIT ?PR?SET_INTERFACE?USB
CODE 392CH 0024H UNIT ?PR?CLOCK_INIT?MAIN
CODE 3950H 001DH UNIT ?PR?USB_RESET?USB
CODE 396DH 001AH UNIT ?PR?FORCE_STALL?USB
CODE 3987H 000AH UNIT ?PR?IO_CONFIG?MAIN
CODE 3991H 000AH UNIT ?PR?USB_RESUME?USB
CODE 399BH 0004H UNIT ?CO?USB
CODE 399FH 0003H UNIT ?PR?_USB_INIT?USB
CODE 39A2H 0001H UNIT ?PR?USB_SUSPEND?USB
当然也可以自己指定,可参考
http://blog.sina.com.cn/s/blog_4c5cec3b0100dmtd.html
http://wenku.baidu.com/view/72d642ef5ef7ba0d4a733b40.html
c8051f320 keil
最新推荐文章于 2023-12-09 07:57:25 发布