keil C251编译又现BUG_20260124
REMOVEUNUSED, NOOVERLAY 皆失效编译器把代码都干没了!
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P2 = 0xa0;
bit f;
voidmain(void){
P2M0 = 0xff;
P2M1 = 0x00;
P2 = 0x0F;
while(1){
P2 = ~P2;
}
while(1){
if(f){
}
}
}
案例2:
总结:
不要保留不可达的代码段,以防编译器心情不好给你全删了。
还有这操作啊 jwd 发表于 2026-1-24 19:41
还有这操作啊
点个灯差点道心干碎了{:tuosai:}
ercircle 发表于 2026-1-24 20:59
点个灯差点道心干碎了
施主道心破碎修为尽失,不如渡入佛门参禅礼佛,日后定能功德大成。{:huaixiao:} 命令行将C转成ASM是正常的:
$NOMACRO
$MODSRC
$MODEL(1)
$CASE
;
; 'main.SRC' generated from 'main.c'
; COMPILER INVOKED BY:
; D:\C251_V560\C251.EXE main.c SRC
;
NAME main
EXTRN CODE : NEAR (?C?STARTUP)
?PR?MAIN?MAINSEGMENTCODE
?BI?MAINSEGMENTBIT
RSEG ?BI?MAIN
f:DBIT1
;--- special function registers and bits:
P2DATA0A0H
P2M1DATA095H
P2M0DATA096H
ACCDATA0E0H
PSWDATA0D0H
DPLDATA082H
DPHDATA083H
BDATA0F0H
SPDATA081H
PSW1DATA0D1H
ZBIT 0D1H.1
EABIT 0A8H.7
OVBIT 0D0H.2
PBIT 0D0H.0
F0BIT 0D0H.5
RS1BIT 0D0H.4
RS0BIT 0D0H.3
ACBIT 0D0H.6
;--- end of special function registers and bits.
PUBLIC main
PUBLIC f
; line 1: sfr P2M1 = 0x95;
; line 2: sfr P2M0 = 0x96;
; line 3: sfr P2 = 0xa0;
; line 4: bit f;
; line 5:
; line 6: voidmain(void){
RSEG ?PR?MAIN?MAIN
main PROC
; line 7: P2M0 = 0xff;
MOV P2M0,#0FFH
; line 8: P2M1 = 0x00;
MOV P2M1,#00H
; line 9: P2 = 0x0F;
MOV P2,#0FH
; line 10: while(1){
; line 11: P2 = ~P2;
XRL P2,#0FFH
; line 12: }
SJMP ?C0003
; line 13: while(1){
; line 14: if(f){
; line 15: }
; line 16: }
; line 17: }
END
试了Keil C51默认的8级优化是没有问题的 21cnsound 发表于 2026-1-25 18:39
命令行将C转成ASM是正常的:
说起ASM,周末有位老哥发现 LX51,将大于31中断函数代码放入开启了汇编的C文件中不会报错
这样LX51既可以用REMOVEUNUSED又可以用大中断号。
ercircle 发表于 2026-1-25 19:25
说起ASM,周末有位老哥发现 LX51,将大于31中断函数代码放入开启了汇编的C文件中不会报错
这样LX51既可以 ...
开启了汇编的C文件中,是在c中嵌入汇编代码还是? 21cnsound 发表于 2026-1-26 08:27
开启了汇编的C文件中,是在c中嵌入汇编代码还是?
只需要打开这两
ercircle 发表于 2026-1-26 08:57
只需要打开这两
这两个勾选了,应该就是C转SRC/ASM,然后再对SRC/ASM汇编。
页:
[1]