这 Keil 又再次的将之前 C51 9.52 更新版本到 v9.53 了。喜欢尝鲜的请尽速啦!附上的连结有其时效性(不到 24 小时)!同样的也是逾时不候呦!~
连结在此 ->
C51 v953.exe
What's New in C51 Version 9.53
■ [LX51 Linker/Locater]
■ Implemented: the PUBLICSONLY Linker directive.
The generated objectfile contains only public symbol information from the inputfile.
■ Enhanced: LX51 code optimization now removes common blocks for unused functions. Example:
- unsigned char a, b, c;
- unsigned char darr [0x10];
- void FuncA (void) {
- darr[c] = darr[b];
- }
- void FuncB (void) {
- darr[c] = darr[b];
- }
- void FuncC (void) {
- darr[c] = darr[a] + darr[b];
- }
- void FuncD (void) {
- darr[c] = darr[a] + darr[b];
- }
- void main(void) {
- FuncA ();
- FuncB ();
- while(1);
- }
- ; FUNCTION FuncA (BEGIN) ; FUNCTION FuncB (BEGIN) ; FUNCTION FuncC (BEGIN) ; FUNCTION FuncD (BEGIN)
- R MOV A,#LOW darr R MOV A,#LOW darr R MOV A,#LOW darr ----- + ----- R MOV A,#LOW darr
- R ADD A,b R ADD A,b R ADD A,b | R ADD A,b
- MOV R0,A ----- + ----- MOV R0,A MOV R0,A | MOV R0,A
- MOV A,@R0 | MOV A,@R0 MOV A,@R0 | MOV A,@R0
- MOV R7,A | MOV R7,A MOV R7,A | MOV R7,A
- R MOV A,#LOW darr | R MOV A,#LOW darr R MOV A,#LOW darr ----- + ----- R MOV A,#LOW darr
- R ADD A,c | R ADD A,c R ADD A,a | R ADD A,a
- MOV R0,A | MOV R0,A MOV R0,A | MOV R0,A
- MOV @R0,AR7 ----- + ----- MOV @R0,AR7 MOV A,@R0 | MOV A,@R0
- RET | RET ADD A,R7 | ADD A,R7
- o-> Common code for FuncA and FuncB MOV R7,A | MOV R7,A
- R MOV A,#LOW darr | R MOV A,#LOW darr
- R ADD A,c | R ADD A,c
- MOV R0,A | MOV R0,A
- MOV @R0,AR7 | MOV @R0,AR7
- RET | RET
- o-> Common code for FuncC and FuncD
复制代码
In the example above the functions FuncC() and FuncD() are removed when the REMOVEUNUSED linker directive is specified. Now, the first part of the common code block (FUNCTION ?L?COM0001) is no longer necessary. In previous verions this was still part of the image. With the new linker enhancement even this code block is removed.
- ----- FUNCTION ?L?COM0001 (BEGIN) -----
- 000021 7408 MOV A,#LOW darr ---+
- 000023 2519 ADD A,b |
- 000025 F8 MOV R0,A |
- 000026 E6 MOV A,@R0 | o-> Common code for FuncC and FuncD
- 000027 FF MOV R7,A |
- 000028 7408 MOV A,#LOW darr ---+
- 00002A ?L?COM0002:
- 00002A F8 MOV R0,A ---+
- 00002B E6 MOV A,@R0 |
- 00002C FF MOV R7,A |
- 00002D 7408 MOV A,#LOW darr | o-> Common code for FuncA and FuncB
- 00002F 251A ADD A,c |
- 000031 F8 MOV R0,A |
- 000032 A607 MOV @R0,AR7 ---+
- 000034 22 RET
- ----- FUNCTION ?L?COM0001 (END) -------
复制代码
■ [AX51 Assembler]
■ Enhanced: SEGMENT assembler statement now also supports ALIGN (1) as minimum alignment value.
■ [New Supported Devices]
■ CAST
S8051XC3.
■ Maxim
78M6613.
■ SigmaDesigns
ZM3102, ZM4102, ZM4101, and SD3402.
■ Silabs
C8051F970-A-GM, C8051F971-A-GM, C8051F972-A-GM, C8051F973-A-GM, C8051F974-A-GM, C8051F975-A-GM,
C8051F370, C8051F371, C8051F374, C8051F375,
C8051F388, C8051F389, C8051F38A, C8051F38B, C8051F38C,
C8051F390, C8051F391, C8051F392, C8051F393, C8051F394, C8051F395, C8051F396, C8051F397, C8051F398, C8051F399,
C8051F750, C8051F750B, C8051F751, C8051F751B, C8051F752, C8051F752B, C8051F755B, C8051F756B, C8051F757B,
C8051F760, C8051F761, C8051F762, C8051F765, C8051F766, C8051F767,
C8051T626, C8051T627, C8051T670, and C8051T671.
■ Texas Instruments
CC2541F128, CC2541F256, CC2543, CC2544, and CC2545.
■ Vitesse
VSC7388, VSC7389, VSC7390, VSC7391, VSC7395, VSC7420, and VSC7422.
■ [µVision]
■ This C51 release comes with µVision V5.11.2.0.
好用,代码优化比较好。
之前Keil3的问题
83: case 1: M.BIT.BIT1=1; ---------------------------------为什么这里没编译为 ORL M(0x08),#0x01
C:0x0046 AF08 MOV R7,M(0x08)
C:0x0048 EF MOV A,R7
C:0x0049 4401 ORL A,#0x01
C:0x004B F508 MOV M(0x08),A
84: break;
C:0x004D 22 RET
。
138: case 1: M.BIT.BIT1=0;----------------------------------为什么这里没编译为 ANL M(0x08),#0xFE
C:0x0149 AF08 MOV R7,M(0x08)
C:0x014B EF MOV A,R7
C:0x014C 54FE ANL A,#0xFE
C:0x014E F508 MOV M(0x08),A
139: break;
C:0x0150 22 RET
keil5
83: case 1: M.BIT.BIT1=1;
C:0x0843 430801 ORL M(0x08),#0x01
84: break;
C:0x0846 22 RET
138: case 1: M.BIT.BIT1=0;
C:0x08E6 5308FE ANL M(0x08),#0xFE
139: break;
C:0x08E9 22 RET
补个先
一周热门 更多>