在Keil C51函数中加入ASM代码

原创 2005年04月25日 17:34:00

使用C51进行单片机编程是事半功倍的事,但是很多算法上以及编译上的问题,往往使用ASM代码更为方便又高效。但不知什么原因,Keil在实现C51夹杂ASM代码比SDCC麻烦很多,方法如下:

预处理指令 #pragma asm 开始ASM代码
预处理指令 #pragma endasm 结束ASM代码

如果就这样直接编译的话,会出现以下错误:
error C272: 'asm/endasm' requires src-control to be active

解决方法:在 Files Toolbar 中选中当前C51文件,点右键查看文件选项,将 Generate Assembler SRC File 与 Assemble SRC File 的勾选由灰色变为黑色,即使这两项有效!

这时进行编译没有问题,但是Link时产生了两个警告:
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL

解决方法是需要在 Source Group 中添加一个 LIB 文件,根据专案的内容不同有所区别:
C51S.LIB - 没有浮点运算的 Small model
C51C.LIB - 没有浮点运算的 Compact model
C51L.LIB - 没有浮点运算的 Large model
C51FPS.LIB - 带浮点运算的 Small model
C51FPC.LIB - 带浮点运算的 Compact model
C51FPL.LIB - 带浮点运算的 Large model

LIB 方件在 Keil 安装目录下的 /C51/LIB/ 目录中。

C51下汇编的嵌入

(1)、C51语言中调用汇编语言程序; C51语言调用汇编语言程序要注意以下几点: 1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(S...
  • toraloo
  • toraloo
  • 2012年07月28日 00:38
  • 4270

c++中#pragma的用法

c++中#pragma的用法 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方...

keil C中嵌入汇编程序的方法

1. C语言中直接嵌入汇编程序段1、在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码:#pragma ASM; Assembler Code Here#pragma ENDASM2、在 Proje...

keil c51中启动代码详细说明

keil c51中启动代码详细说明让我们先来看看STARTUP.A51文件(默认设置)吧!根据源文件中的说明文字,我们很容易分析出STARTUP.A51文件的工作方式和作用!让我们把它先汉化一下看看!...

[转]Keil C51库函数参考

Keil C51库函数参考转自http://www.8951.com/book/1jiaob5.htmC51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,...

keil C51 模拟堆栈,可重入函数调用,参数传递

http://blog.chinaunix.net/uid-23787789-id-2385369.html 作者:xzp21st   撰文辛苦,转载请注明作者及出处 关键字:keilc51,模...

Keil C51中变量和函数的绝对地址定位问题:

Keil C51中变量和函数的绝对地址定位问题: 1.  变量绝对地址定位        1)    在定义变量时使用 _at_ 关键字加上地址就可.               e.g.  ...

Keil C51中变量和函数的绝对地址定位问题

Keil C51中变量和函数的绝对地址定位问题: 1.  变量绝对地址定位        1)    在定义变量时使用 _at_ 关键字加上地址就可.               e.g. ...

Keil C51中变量和函数的绝对地址定位问题

Keil C51中变量和函数的绝对地址定位问题: 1.  变量绝对地址定位        1)    在定义变量时使用 _at_ 关键字加上地址就可.               e.g. ...

关于keil c51里面的 printf 函数

今天看到keil c51库函数里面竟有一个printf()函数,我在想单片机又没有显示屏,思考诉久,又上网找了些资料,供大家参考!         在keil中printf 默认是向串口中发送数据...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Keil C51函数中加入ASM代码
举报原因:
原因补充:

(最多只允许输入30个字)