怎样在KEIL环境中,在汇编语言里添加C的子函数啊!!!

您所在的位置:网站首页 c语音子函数 怎样在KEIL环境中,在汇编语言里添加C的子函数啊!!!

怎样在KEIL环境中,在汇编语言里添加C的子函数啊!!!

2023-04-26 11:42| 来源: 网络整理| 查看: 265

本文目录一览:

1、用keil软件如何将汇编与C语言结合起来一起编写单片机的程序 2、51单片机 keil中怎么建立像这样的子函数? 新手求助。 3、Keil中C语言调用汇编函数 4、51单片机中汇编语言如何调用C的子程序? 用keil软件如何将汇编与C语言结合起来一起编写单片机的程序

在混合编程中,最常用也是最实用的方法是在C语言中加入部分汇编语言的代码,分为两种方法。

方法1)在Keil C51的函数中直接插入汇编语句

方法2)按照Keil C51接口规则,编写汇编模块

方法1是利用编译控制命令#pragma asm(用来标识所插入的汇编语句的起始位置) 和 #pragma endasm (用来标识所插入的汇编语句的结束位置) ,这两条命令必须成对出现,并可以多次出现。在Keil C51中不对插入的汇编代码做任何的处理。

方法2编写汇编模块,需对KEIL编译器的编译过程做些了解。Keil编译器的编译过程是首先将项目中的一个个源文件编译为目标代码(obj文件),然在再通过连接器产生为最终可执行的hex文件。

目标代码将其中的代码、数据、常量放在不同的“段”中,保存程序的段称为“代码段”,保存数据的段称为“数据段”,最终目标代码经过Keil的连接器按照“段”的要求转换为程序和数据地址固定的可执行文件。

在Keil软件中,“段”按定位属性分为:“可重定位段”和“绝对段”。

“可重定位段”:程序和数据在其分别所对应的存储单元(FLASH和RAM)中的存储地址是浮动的、可重定义的、相对可变的。

“绝对段”:其地址在连接前就已确定不变,连接器据此为它分配地址。

经Keil编译器生成的“段”具有如下属性:

1)段的存储属性(program code data pdata xdata bdata bit等);

2)段的起始地址;3)段的长度;

4)段的定位要求:绝对段地址固定,可重定位段定位的要求如要求代码段在2K范围内,数据段定位在可位寻址区等;

5)段名:包括程序和数据(变量和常量)的段的存储属性及段所属的程序模块(文件)。代码段: ?PR? funcname?Filename

数据段如:?DT? funcname?Filename; ?BI? funcname?Filename

标准段名前缀列表

段前缀 存储类型 含义

?PR? Program 程序存储区的代码

?CO? code 程序存储区的常量

?BI? Bit 内部数据存储区的可位寻址的位变量

?BA? Bdata 内部数据存储区的可位寻址的字节变量

?DT? Data 内部数据存储区的变量

?ID? Idata 内部数据存储区可间接寻址的变量

?PD? Pdata 外部数据存储区的页变量

?XD? Xdata 外部数据存储区的变量

51单片机 keil中怎么建立像这样的子函数? 新手求助。

这个简单,首先创建其头文件,比如定义为 myself.h

//myself.h 头文件里面这么写

#ifndef _MYSELF_H_

#define _MYSELF_H_

#include //这里添加需要的头文件,比如math.h这些

//声明函数可被外部使用

extern void delay(); //可被其他c调用,只需要加载其头文件以及对应c即可

#endif

继续创建myself.c文件

//myself.c文件中写

#include "myself.h"

void delay()

{

_nop_();

}

然后把myself.c文件加载到工程,放置主函数文件中#include "myself.h"这样即可

可以继续追问

Keil中C语言调用汇编函数

1、在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码:

#pragma ASM

; Assembler Code Here

#pragma ENDASM

2、在 Project 窗口中包含汇编代码的 C 文件上右键,选择“Options for ...”,点击右边的“Generate Assembler SRC File”

和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;

3、根据选择的编译模式,把相应的库文件(如 Small 模式时,是 Keil\C51\Lib\C51S.Lib)加入工程中, 该文件必须作为工程的最

后文件;

51单片机中汇编语言如何调用C的子程序?

我的程序是KEIL编译的,如下

先申明

EXTRN CODE (_Send_CRC) ;Send_CRC是C中的函数,汇编中加了_

调用的时候

LCALL _Send_CRC

如果要使用C中的变量,那么CODE变成相应的DATA,XDATA等

标签: 怎样在KEIL环境中在汇编语言里添加C的子函数啊!!!


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3