使用keil编程常遇到c语言问题;main被重复定义了,如何破?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用keil编程常遇到c语言问题;main被重复定义了,如何破?相关的知识,希望对你有一定的参考价值。
#include<reg52.h>
extern main;
void dlay(float k)
unsigned int h,j;
h =k*100;
while(h--)
for(j=8505;j>0;j--) ;
void main()
int T,i; T=0xfe;
while(1)
for(i=8;i>0;i--)
P1=T,T<<=1,T=T+1,dlay(0.1) ;
main这个关键字不能随便定义的
只能存在一个
程序都是从main开始所以也不能被调用,所以根本没必要声明main函数。追问
删掉还不行:
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: MAIN
MODULE: 流水灯(位移).obj (流水灯(位移))
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?MAIN?流水灯(位移)
果然有多个文件
只留下text2.c其他全部删除
remove file删除其他的
只留下text2.c
如果要其他功能一般是.H .C成对出现
多个C里面还有多个main函数当然不行
最后再吧extern main;注释掉
编译器是keil4的
求大神,详细些
参考技术B P1=T,T<<=1,T=T+1,dlay(0.1)//这里的逗号都应该变成分号追问不行
的
void dlay(float k)
unsigned int h,j;
h =k*100;
while(h--)
for(j=8505;j>0;j--) ;
上面的float变成int型的变量就可以了,你的编译器不支持浮点运算,记得把extern main;删掉哦,把我上面发的文件按说明拷进keil中就能支持浮点运算了
还不行:
#include
void dlay(float k)
unsigned int h,j;
h =k*100;
while(h--)
for(j=8505;j>0;j--) ;
void main()
int T,i; T=0xfe;
while(1)
for(i=8;i>0;i--)
P1=T,T<<=1,T=T+1,dlay(0.1) ;
这是你的程序在我电脑上运行正常,看你还有一个c文件,另一个c里面不能再有main函数了
keil怎样把C语言转换成单片机汇编语言
有C语言程序加载在KEIL中 怎样可以获得单片机汇编语言
1、打开Keil,新建一个51工程,同时新建一个main.c文件,并加入到工程源代码当中。
2、再点击新建文件按钮,新建一个汇编语言源文件:test.asm,并将它保存到指定目录。
3、在test.asm当中输入下面的代码。
4、代码编写完成后,需要将test.asm加入到工程当中,即鼠标右键点击对应工程的源程序文件夹,选择“Add Files to Group……”,软件会弹出“Add Files to Group……“对话框。
5、Keil默认的源文件是c,输入*.asm查找所有汇编语言源文件,确定后点击“Add”按钮,然后会显示该目录所有的asm文件,选择该文件再次点击“Add”即可完成添加。
6、添加完test.asm后,回到main.c,对test_fun进行声明调用,然后编译即可,正常情况是不会出现Error也不会出现Warning。
7、如果在汇编源程序的函数前没有添加RSEG语句则在编译时会出现下面的错误和警告。
参考技术A首先在keil里,设置选项时,在列表选项中的汇编代码一项打勾。见下图
然后编译,编译后,在工程的同一个文件夹下有一个.LST文件,打开就看到了汇编代码,不过,需要自己进行整理,否则,是不能直接作为汇编程序的。
下面是一个例子:这是一个主程序的汇编代码,格式就是这样的。
; FUNCTION main (BEGIN)
; SOURCE LINE # 16
;---- Variable 'k' assigned to Register 'R4' ----
; SOURCE LINE # 17
; SOURCE LINE # 19
0000 D2B2 SETB light
0002 ?C0007:
; SOURCE LINE # 20
; SOURCE LINE # 21
; SOURCE LINE # 23
0002 7F05 MOV R7,#05H
0004 120000 R LCALL _delayms
; SOURCE LINE # 25
0007 300008 R JNB blink,?C0009
; SOURCE LINE # 26
; SOURCE LINE # 27
000A 0C INC R4
; SOURCE LINE # 28
000B BC2804 CJNE R4,#028H,?C0009
; SOURCE LINE # 29
; SOURCE LINE # 30
000E B2B2 CPL light
; SOURCE LINE # 31
0010 E4 CLR A
0011 FC MOV R4,A
; SOURCE LINE # 32
; SOURCE LINE # 33
0012 ?C0009:
; SOURCE LINE # 34
0012 20B7ED JB k0,?C0007
; SOURCE LINE # 35
C51 COMPILER V7.00 LIGHT1 09/14/2015 12:54:15 PAGE 3
; SOURCE LINE # 36
0015 B200 R CPL blink
; SOURCE LINE # 37
0017 200004 R JB blink,?C0012
001A D2B2 SETB light
001C 8002 SJMP ?C0014
001E ?C0012:
; SOURCE LINE # 38
001E E4 CLR A
001F FC MOV R4,A
0020 ?C0014:
; SOURCE LINE # 39
0020 20B7DF JB k0,?C0007
0023 80FB SJMP ?C0014
; FUNCTION main (END)
参考技术B 右击C文件,进入“options for files '**.C' ”勾选这两项,再编译就会出现一个"*.src"的文件,这就是C语言的汇编文件了。自己操作一下就会的,加油,还有,当有汇编和C语言混合编程时也要选这两项。 参考技术C 只要编译通过,在调试仿真里面,程序列表就是C与汇编混合显示。以上是关于使用keil编程常遇到c语言问题;main被重复定义了,如何破?的主要内容,如果未能解决你的问题,请参考以下文章
如何在keil调试中黄色箭头不出现汇编窗口而是停在main主函数上
keil mdk 启动程序(汇编语言写的)仿真时没法跟踪。 怎样让它自动跟踪代码? 像C语言一样