-
51单片机系列教程主仓库地址:https://gitee.com/langcai1943/8051-from-boot-to-application
-
遇到的问题1:
-
如果你自建的汇编原文件不是以Keil默认的.A51或者.s .S结尾,而是以.asm .ASM结尾的话,在Keil工程里包含新文件时,不要使用文件类型:All files(.),而要使用文件类型:Asm Source file(*.s; *.src; .a),否则Keil编译会报错,无法创建中间文件的路径。
-
遇到的问题2:
-
不使用Keil的默认文件,如何自己写Boot汇编文件并跳转到Main函数?自己写的代码编译时会报错
-
Keil C51从汇编跳转到main函数编译器报错ERROR L127: UNRESOLVED EXTERNAL SYMBOL的解决办法
-
报错信息如下:
; Keil工程里面就新建2个文件,而且不使用Keil的默认Boot汇编文件,并自动跳转到main函数的功能
; STARTUP.A51:
EXTERN CODE (_MAIN)
ORG 00H
LJMP _MAIN
RETI
; ORG 0100H
;RESET:
; NOP
; RET
END
// main.c
int main()
{
return 0;
}
- 发现有编译报错:
Rebuild started: Project: aaa
Rebuild target 'Target 1'
assembling STARTUP.A51...
compiling main.c...
linking...
*** WARNING L30: MEMORY SPACE OVERLAP
SEG: ?CO?STARTUP?0
FROM: C:000000H
TO: C:000003H
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _MAIN
MODULE: .\Objects\STARTUP.obj (STARTUP)
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _MAIN
MODULE: .\Objects\STARTUP.obj (STARTUP)
ADDRESS: 1000001H
Program Size: data=9.0 xdata=0 const=0 code=23
Target not created.
Build Time Elapsed: 00:00:01
- 解决办法:
- 这是因为你不能像Keil默认工程那样使用int main()这种定义,这里面有返回值,必须要用void main(int param)才行,即使使用void main()也不行,也会报错;